00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(_XRB_RENDERCONTEXT_HPP_)
00012 #define _XRB_RENDERCONTEXT_HPP_
00013
00014 #include "xrb.hpp"
00015
00016 #include "xrb_color.hpp"
00017 #include "xrb_screencoord.hpp"
00018
00019 namespace Xrb
00020 {
00021
00042 class RenderContext
00043 {
00044 public:
00045
00049 inline RenderContext (
00050 ScreenCoordRect const &clip_rect,
00051 Color const &color_bias,
00052 Color const &color_mask)
00053 :
00054 m_clip_rect(clip_rect),
00055 m_color_bias(color_bias),
00056 m_color_mask(color_mask)
00057 { }
00061 inline RenderContext (RenderContext const &source)
00062 :
00063 m_clip_rect(source.m_clip_rect),
00064 m_color_bias(source.m_color_bias),
00065 m_color_mask(source.m_color_mask)
00066 { }
00069 inline ~RenderContext () { }
00070
00074 inline void operator = (RenderContext const &source)
00075 {
00076 m_clip_rect = source.m_clip_rect;
00077 m_color_bias = source.m_color_bias;
00078 m_color_mask = source.m_color_mask;
00079 }
00080
00083 inline ScreenCoordRect const &ClipRect () const
00084 {
00085 return m_clip_rect;
00086 }
00089 inline Color const &ColorBias () const
00090 {
00091 return m_color_bias;
00092 }
00095 inline Color const &ColorMask () const
00096 {
00097 return m_color_mask;
00098 }
00102 inline Color &ColorBias ()
00103 {
00104 return m_color_bias;
00105 }
00109 inline Color &ColorMask ()
00110 {
00111 return m_color_mask;
00112 }
00117 inline ScreenCoordRect ClippedRect (ScreenCoordRect const &rect) const
00118 {
00119 return m_clip_rect & rect;
00120 }
00124 inline Color BlendedColorBias (Color const &color_bias) const
00125 {
00126 Color blended_color_bias(m_color_bias);
00127 blended_color_bias.Blend(color_bias);
00128 return blended_color_bias;
00129 }
00133 inline Color MaskedColor (Color const &color) const
00134 {
00135 return m_color_mask * color;
00136 }
00140 bool MaskAndBiasWouldResultInNoOp () const;
00147 bool MaskAndBiasWouldResultInNoOp (ColorCoord color_alpha_channel_value) const;
00148
00151 inline void SetClipRect (ScreenCoordRect const &clip_rect)
00152 {
00153 m_clip_rect = clip_rect;
00154 }
00155
00158 inline void ApplyClipRect (ScreenCoordRect const &clip_rect)
00159 {
00160 m_clip_rect &= clip_rect;
00161 }
00164 inline void ApplyColorBias (Color const &color_bias)
00165 {
00166 m_color_bias.Blend(color_bias);
00167 }
00170 inline void ApplyColorMask (Color const &color_mask)
00171 {
00172 m_color_mask *= color_mask;
00173 }
00176 inline void ApplyAlphaMaskToColorMask (Float const alpha_mask)
00177 {
00178 m_color_mask[Dim::A] *= alpha_mask;
00179 }
00182 void SetupGLClipRect () const;
00183
00184 private:
00185
00186 ScreenCoordRect m_clip_rect;
00187 Color m_color_bias;
00188 Color m_color_mask;
00189 };
00190
00191 }
00192
00193 #endif // !defined(_XRB_RENDERCONTEXT_HPP_)