nux-1.16.0
|
00001 /* 00002 * Copyright 2010 Inalogic® Inc. 00003 * 00004 * This program is free software: you can redistribute it and/or modify it 00005 * under the terms of the GNU Lesser General Public License, as 00006 * published by the Free Software Foundation; either version 2.1 or 3.0 00007 * of the License. 00008 * 00009 * This program is distributed in the hope that it will be useful, but 00010 * WITHOUT ANY WARRANTY; without even the implied warranties of 00011 * MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR 00012 * PURPOSE. See the applicable version of the GNU Lesser General Public 00013 * License for more details. 00014 * 00015 * You should have received a copy of both the GNU Lesser General Public 00016 * License along with this program. If not, see <http://www.gnu.org/licenses/> 00017 * 00018 * Authored by: Jay Taoko <jaytaoko@inalogic.com> 00019 * 00020 */ 00021 00022 00023 #ifndef OPENGLENGINE_H 00024 #define OPENGLENGINE_H 00025 00026 #include "GLResource.h" 00027 #include "GpuDevice.h" 00028 #include "GLDeviceObjects.h" 00029 #include "GLResourceManager.h" 00030 #include "GLTextureResourceManager.h" 00031 #include "GLVertexResourceManager.h" 00032 #include "GLRenderStates.h" 00033 #include "FontTexture.h" 00034 #include "RenderingPipe.h" 00035 #include "GLShader.h" 00036 00037 #if defined(NUX_OS_WINDOWS) 00038 #include "GraphicsDisplay.h" 00039 #include "GLWindowManager.h" 00040 #elif defined(NUX_OS_LINUX) 00041 #include "GraphicsDisplay.h" 00042 #include "GLWindowManager.h" 00043 #endif 00044 00045 #define NUX_MAX_GAUSSIAN_SIGMA 11 00046 #define NUX_MIN_GAUSSIAN_SIGMA 1 00047 00048 namespace nux 00049 { 00050 00051 class FontTexture; 00052 class FontRenderer; 00053 class FilePath; 00054 class BaseTexture; 00055 class TextureRectangle; 00056 00057 class ROPConfig 00058 { 00059 public: 00060 ROPConfig(); 00061 ~ROPConfig(); 00062 00063 bool Blend; 00064 t_u32 SrcBlend; 00065 t_u32 DstBlend; 00066 00067 static ROPConfig Default; 00068 }; 00069 00070 class BlendOperator 00071 { 00072 public: 00073 BlendOperator (); 00074 ~BlendOperator (); 00075 00076 void EnableBlending (bool enable); 00077 void SetPorterDuffOperator (PorterDuffOperator op); 00078 void SetCustomBlendOperator (unsigned int src_blend, unsigned int dst_blend); 00079 00080 bool _enable; 00081 unsigned int _src_blend; 00082 unsigned int _dst_blend; 00083 }; 00084 00085 typedef struct 00086 { 00087 int x; 00088 int y; 00089 int width; 00090 int height; 00091 00092 } OpenGLContext; 00093 00094 class FxStructure 00095 { 00096 public: 00097 FxStructure(); 00098 ~FxStructure(); 00099 ObjectPtr<IOpenGLBaseTexture> dst_texture; 00100 ObjectPtr<IOpenGLBaseTexture> src_texture; 00101 ObjectPtr<IOpenGLBaseTexture> temp_texture; 00102 }; 00103 00105 class GraphicsEngine 00106 { 00107 public: 00112 GraphicsEngine (GraphicsDisplay &GlWindow, bool create_rendering_data = true); 00113 ~GraphicsEngine(); 00114 00115 void SetContext (int x, int y, int width, int height); 00116 void GetContextSize (int &w, int &h) const; 00117 int GetContextWidth() const; 00118 int GetContextHeight() const; 00119 int GetContextX() const; 00120 int GetContextY() const; 00121 00122 void GetWindowSize (int &w, int &h) const; 00123 int GetWindowWidth() const; 00124 int GetWindowHeight() const; 00125 00126 OpenGLContext m_CurrrentContext; 00127 00128 // Load Textures 00129 BaseTexture *Load2DTextureFile (const char *filename); 00130 BaseTexture *Load2DRectangleTextureFile (const char *filename); 00131 BaseTexture *Load2DTextureFileGenerateAlpha (const char *filename, int red, int green, int blue); 00132 00133 void SetTexture (int TextureUnit, BaseTexture *Texture); 00134 void SetTexture (int TextureUnit, ObjectPtr< IOpenGLBaseTexture > Texture); 00135 void EnableTextureMode (int TextureUnit, int TextureMode); 00136 void DisableTextureMode (int TextureUnit, int TextureMode); 00137 void DisableAllTextureMode (int TextureUnit); 00138 00140 // DRAW TEXTURE // 00142 00143 // Neutral 00144 void QRP_1Tex (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> Tex0, TexCoordXForm &texxform, const Color &color0); 00145 void QRP_Pixelate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0, int pixel_size); 00146 void QRP_Color (int x, int y, int width, int height, const Color &c0); 00147 void QRP_Color (int x, int y, int width, int height, const Color &c0, const Color &c1, const Color &c2, const Color &c3); 00148 void QRP_ColorModTexAlpha (int x, int y, int width, int height, 00149 ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform0, const Color &color); 00150 00151 void QRP_2Tex (int x, int y, int width, int height, 00152 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00153 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00154 00155 void QRP_2TexMod (int x, int y, int width, int height, 00156 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00157 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00158 00159 void QRP_4Tex (int x, int y, int width, int height, 00160 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00161 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1, 00162 ObjectPtr<IOpenGLBaseTexture> DeviceTexture2, TexCoordXForm &texxform2, const Color &color2, 00163 ObjectPtr<IOpenGLBaseTexture> DeviceTexture3, TexCoordXForm &texxform3, const Color &color3); 00164 00165 void QRP_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0); 00166 void QRP_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0, Color c1, Color c2); 00167 void QRP_Line (int x0, int y0, int x1, int y1, Color c0); 00168 void QRP_Line (int x0, int y0, int x1, int y1, Color c0, Color c1); 00169 void QRP_QuadWireframe (int x0, int y0, int width, int height, Color c0, Color c1, Color c2, Color c3); 00170 00171 00172 ObjectPtr<IOpenGLBaseTexture> QRP_GetBlurTexture ( 00173 int x, int y, 00174 int buffer_width, int buffer_height, 00175 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00176 const Color& c0, 00177 float sigma = 1.0f, int num_pass = 1); 00178 00179 ObjectPtr<IOpenGLBaseTexture> QRP_GetAlphaTexture ( 00180 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00181 const Color& c0); 00182 00183 ObjectPtr<IOpenGLBaseTexture> QRP_GetColorMatrixTexture ( 00184 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00185 const Color& c0, 00186 Matrix4 color_matrix, Vector4 offset); 00187 00188 ObjectPtr<IOpenGLBaseTexture> QRP_GetPower ( 00189 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& c0, const Vector4 &exponent); 00190 00191 ObjectPtr<IOpenGLBaseTexture> QRP_GetLQBlur ( 00192 int x, int y, int buffer_width, int buffer_height, 00193 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00194 const Color& c0); 00195 00196 ObjectPtr<IOpenGLBaseTexture> QRP_GetHQBlur ( 00197 int x, int y, int buffer_width, int buffer_height, 00198 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00199 const Color& c0, float sigma = 1.0f, int num_pass = 1); 00200 00201 void QRP_DisturbedTexture ( 00202 int x, int y, int width, int height, 00203 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00204 ObjectPtr<IOpenGLBaseTexture> src_device_texture, TexCoordXForm &texxform1, const Color& c1); 00205 00206 ObjectPtr<IOpenGLBaseTexture> QRP_GetPixelBlocks ( 00207 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform0, const Color& c0, int pixel_size); 00208 00209 void QRP_GetCopyTexture ( 00210 int width, int height, 00211 ObjectPtr<IOpenGLBaseTexture>& dst_device_texture, 00212 ObjectPtr<IOpenGLBaseTexture>& src_device_texture, 00213 TexCoordXForm &texxform0, const Color& c0); 00214 00215 // ASM 00216 void QRP_ASM_1Tex (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> Tex0, TexCoordXForm &texxform, const Color &color0); 00217 void QRP_ASM_Pixelate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0, int pixel_size); 00218 00219 void QRP_ASM_Color (int x, int y, int width, int height, const Color &c0); 00220 void QRP_ASM_Color (int x, int y, int width, int height, const Color &c0, const Color &c1, const Color &c2, const Color &c3); 00221 void QRP_ASM_ColorModTexAlpha (int x, int y, int width, int height, 00222 ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform0, const Color &color); 00223 00224 void QRP_ASM_2Tex (int x, int y, int width, int height, 00225 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00226 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00227 00228 void QRP_ASM_2TexMod (int x, int y, int width, int height, 00229 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00230 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00231 00232 void QRP_ASM_4Tex (int x, int y, int width, int height, 00233 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00234 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1, 00235 ObjectPtr<IOpenGLBaseTexture> DeviceTexture2, TexCoordXForm &texxform2, const Color &color2, 00236 ObjectPtr<IOpenGLBaseTexture> DeviceTexture3, TexCoordXForm &texxform3, const Color &color3); 00237 00238 void QRP_ASM_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0); 00239 void QRP_ASM_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0, Color c1, Color c2); 00240 void QRP_ASM_Line (int x0, int y0, int x1, int y1, Color c0); 00241 void QRP_ASM_Line (int x0, int y0, int x1, int y1, Color c0, Color c1); 00242 void QRP_ASM_QuadWireframe (int x0, int y0, int width, int height, Color c0, Color c1, Color c2, Color c3); 00243 00244 void QRP_ASM_Power (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, Vector4 exponent); 00245 void QRP_ASM_AlphaReplicate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0); 00246 void QRP_ASM_HorizontalGauss (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, float sigma = 1.0f); 00247 void QRP_ASM_VerticalGauss (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, float sigma = 1.0f); 00248 void QRP_ASM_ColorMatrix (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, Matrix4 color_matrix, Vector4 offset); 00249 00251 00260 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetBlurTexture ( 00261 int x, int y, int buffer_width, int buffer_height, 00262 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& color, float sigma = 1.0f, int num_pass = 1); 00263 00264 void QRP_ASM_GetBlurTextureFx ( 00265 int x, int y, int buffer_width, int buffer_height, 00266 FxStructure *fx_structure, TexCoordXForm &texxform, const Color& color, float sigma = 1.0f, int num_pass = 1); 00267 00269 00275 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetAlphaTexture ( 00276 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& color); 00277 00279 00287 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetColorMatrixTexture ( 00288 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00289 const Color& c, Matrix4 color_matrix, Vector4 offset); 00290 00292 00300 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetPower ( 00301 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& c0, const Vector4 &exponent); 00302 00303 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetLQBlur ( 00304 int x, int y, int buffer_width, int buffer_height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00305 const Color& c0); 00306 00307 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetHQBlur ( 00308 int x, int y, int buffer_width, int buffer_height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00309 const Color& c0, float sigma = 1.0f, int num_pass = 1); 00310 00311 void QRP_ASM_DisturbedTexture ( 00312 int x, int y, int width, int height, 00313 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00314 ObjectPtr<IOpenGLBaseTexture> src_device_texture, TexCoordXForm &texxform1, const Color& c1); 00315 00317 00324 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetPixelBlocks ( 00325 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform0, const Color& color, int pixel_size); 00326 00327 void QRP_ASM_GetCopyTexture ( 00328 int width, int height, 00329 ObjectPtr<IOpenGLBaseTexture>& dst_device_texture, 00330 ObjectPtr<IOpenGLBaseTexture>& src_device_texture, 00331 TexCoordXForm &texxform0, const Color& c0); 00332 00333 // GLSL 00334 00335 void QRP_GLSL_1Tex (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0); 00336 void QRP_GLSL_Pixelate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0, int pixel_size); 00337 00338 void QRP_GLSL_Color (int x, int y, int width, int height, const Color &c0); 00339 void QRP_GLSL_Color (int x, int y, int width, int height, const Color &c0, const Color &c1, const Color &c2, const Color &c3); 00340 void QRP_GLSL_ColorModTexAlpha (int x, int y, int width, int height, 00341 ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform0, const Color &color); 00342 00343 void QRP_GLSL_2Tex (int x, int y, int width, int height, 00344 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00345 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00346 00347 void QRP_GLSL_2TexMod (int x, int y, int width, int height, 00348 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00349 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00350 00351 00352 void QRP_GLSL_4Tex (int x, int y, int width, int height, 00353 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00354 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1, 00355 ObjectPtr<IOpenGLBaseTexture> DeviceTexture2, TexCoordXForm &texxform2, const Color &color2, 00356 ObjectPtr<IOpenGLBaseTexture> DeviceTexture3, TexCoordXForm &texxform3, const Color &color3); 00357 00358 void QRP_GLSL_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0); 00359 void QRP_GLSL_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0, Color c1, Color c2); 00360 void QRP_GLSL_Line (int x0, int y0, int x1, int y1, Color c0); 00361 void QRP_GLSL_Line (int x0, int y0, int x1, int y1, Color c0, Color c1); 00362 void QRP_GLSL_QuadWireframe (int x0, int y0, int width, int height, Color c0, Color c1, Color c2, Color c3); 00363 00364 void QRP_GLSL_Power (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, Vector4 exponent); 00365 void QRP_GLSL_AlphaReplicate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0); 00366 void QRP_GLSL_HorizontalGauss (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, float sigma = 1.0f); 00367 void QRP_GLSL_VerticalGauss (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, float sigma = 1.0f); 00368 void QRP_GLSL_HorizontalHQGauss (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, float sigma = 1.0f); 00369 void QRP_GLSL_VerticalHQGauss (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, float sigma = 1.0f); 00370 void QRP_GLSL_ColorMatrix (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, Matrix4 color_matrix, Vector4 offset); 00371 00380 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetBlurTexture ( 00381 int x, int y, 00382 int buffer_width, int buffer_height, 00383 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00384 const Color& c0, 00385 float sigma = 1.0f, int num_pass = 1); 00386 00387 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetAlphaTexture ( 00388 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00389 const Color& c0); 00390 00391 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetColorMatrixTexture ( 00392 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00393 const Color& c0, 00394 Matrix4 color_matrix, Vector4 offset); 00395 00396 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetPower ( 00397 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& c0, const Vector4 &exponent); 00398 00399 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetLQBlur ( 00400 int x, int y, 00401 int buffer_width, int buffer_height, 00402 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00403 const Color& c0); 00404 00405 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetHQBlur ( 00406 int x, int y, 00407 int buffer_width, int buffer_height, 00408 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00409 const Color& c0, float sigma = 1.0f, int num_pass = 1); 00410 00411 void QRP_GLSL_GetHQBlurFx ( 00412 int x, int y, 00413 int buffer_width, int buffer_height, 00414 FxStructure *fx_structure, TexCoordXForm &texxform, 00415 const Color& c0, float sigma = 1.0f, int num_pass = 1); 00416 00417 void QRP_GLSL_DisturbedTexture ( 00418 int x, int y, int width, int height, 00419 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00420 ObjectPtr<IOpenGLBaseTexture> src_device_texture, TexCoordXForm &texxform1, const Color& c1); 00421 00422 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetDisturbedTexture( 00423 int x, int y, int width, int height, 00424 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00425 ObjectPtr<IOpenGLBaseTexture> src_device_texture, TexCoordXForm &texxform1, const Color& c1); 00426 00427 void QRP_GLSL_GetDisturbedTextureFx( 00428 int x, int y, int width, int height, 00429 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00430 FxStructure *fx_structure, TexCoordXForm &texxform1, const Color& c1); 00431 00433 00440 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetPixelBlocks ( 00441 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform0, const Color& c0, int pixel_size); 00442 00443 void QRP_GLSL_GetCopyTexture( 00444 int width, int height, 00445 ObjectPtr<IOpenGLBaseTexture>& dst_device_texture, 00446 ObjectPtr<IOpenGLBaseTexture>& src_device_texture, 00447 TexCoordXForm &texxform0, const Color& c0); 00448 00450 // DRAW CLIPPING // 00452 00453 mutable std::vector<Rect> ClippingRect; 00454 void PushClippingRectangle (Rect rect); 00455 void PopClippingRectangle (); 00456 void EmptyClippingRegion (); 00458 void ApplyClippingRectangle (); 00459 00460 void SetGlobalClippingRectangle (Rect rect); 00461 void DisableGlobalClippingRectangle (); 00462 00464 00467 void SetClippingRectangle (const Rect &rect); 00468 00470 void SetOpenGLClippingRectangle (int x, int y, unsigned int width, unsigned int height); 00471 00472 Rect GetClippingRegion () const; 00473 int GetNumberOfClippingRegions () const; 00474 00475 void AddClipOffset (int x, int y); 00476 void PushClipOffset (int x, int y); 00477 void PopClipOffset (); 00478 00479 void ClearAreaColorDepthStencil (int x, int y, int width, int height, Color clearcolor, float cleardepth, int clearstencil); 00480 void ClearAreaColor (int x, int y, int width, int height, Color clearcolor); 00481 void ClearAreaDepthStencil (int x, int y, int width, int height, float cleardepth, int clearstencil); 00482 00483 void Set3DView (int w, int h); 00484 00486 void Push2DWindow (int w, int h); 00487 void Pop2DWindow (); 00488 void Push2DModelViewMatrix (Matrix4 mat); 00489 Matrix4 Pop2DModelViewMatrix (); 00490 void Clear2DModelViewMatrix (); 00491 std::list<Matrix4> m_2DModelViewMatricesStack; 00492 00493 void SetViewport (int x, int y, int w, int h); 00494 Rect GetViewportRect () const; 00495 int GetViewportWidth () const; 00496 int GetViewportHeight () const; 00497 int GetViewportX () const; 00498 int GetViewportY () const; 00499 00500 void GetViewportSize (int &viewport_width, int &viewport_height) const; 00501 00502 void SetScissor (int x, int y, int w, int h); 00503 00511 void SetScissorOffset (int x, int y); 00512 00513 Rect GetScissorRect(); 00514 void EnableScissoring (bool b); 00515 00516 00517 // void LoadPainterImages(); 00518 // const PainterImage* GetImage(UXStyleImageRef style); 00519 // Rect GetImageGeometry(UXStyleImageRef style); 00520 // std::list<PainterImage*> m_PainterImageList; 00521 00522 int RenderColorText (ObjectPtr<FontTexture> Font, int x, int y, const NString &Str, 00523 const Color &TextColor, 00524 bool WriteAlphaChannel, 00525 int NumCharacter); 00526 00527 int RenderColorTextLineStatic (ObjectPtr<FontTexture> Font, const PageBBox &pageSize, const NString &Str, 00528 const Color &TextColor, 00529 bool WriteAlphaChannel, 00530 TextAlignment alignment); 00531 00532 int RenderColorTextLineEdit (ObjectPtr<FontTexture> Font, const PageBBox &pageSize, const NString &Str, 00533 const Color &TextColor, 00534 bool WriteAlphaChannel, 00535 const Color &SelectedTextColor, 00536 const Color &SelectedTextBackgroundColor, 00537 const Color &TextBlinkColor, 00538 const Color &CursorColor, 00539 bool ShowCursor, unsigned int CursorPosition, 00540 int offset = 0, int selection_start = 0, int selection_end = 0); 00541 00542 ObjectPtr <IOpenGLBaseTexture> CreateTextureFromBackBuffer (int x, int y, int width, int height); 00543 00544 //Statistics 00545 void ResetStats(); 00546 00553 ObjectPtr<CachedResourceData> CacheResource (ResourceData *Resource); 00554 00559 void UpdateResource (ResourceData *Resource); 00560 00561 bool FlushCachedResourceData (ResourceData *Resource); 00562 bool IsResourceCached (ResourceData *Resource); 00563 NResourceCache ResourceCache; 00564 00565 Matrix4 GetProjectionMatrix (); 00567 Matrix4 GetOpenGLProjectionMatrix (); 00568 00569 void SetProjectionMatrix (const Matrix4 &matrix); 00570 00572 00578 void SetOrthographicProjectionMatrix (int viewport_width, int viewport_height); 00579 00581 void ResetProjectionMatrix (); 00582 00583 Matrix4 GetModelViewMatrix (); 00585 Matrix4 GetOpenGLModelViewMatrix (); 00586 00587 Matrix4 GetModelViewProjectionMatrix (); 00588 Matrix4 GetOpenGLModelViewProjectionMatrix (); 00589 00590 GpuRenderStates &GetRenderStates() 00591 { 00592 return *_graphics_display.m_DeviceFactory->_gpu_render_states; 00593 } 00594 void ResetRenderStates() 00595 { 00596 _graphics_display.m_DeviceFactory->_gpu_render_states->ResetStateChangeToDefault(); 00597 } 00598 void VerifyRenderStates() 00599 { 00600 _graphics_display.m_DeviceFactory->_gpu_render_states->CheckStateChange(); 00601 } 00602 00603 ObjectPtr<FontTexture> GetFont(); 00604 ObjectPtr<FontTexture> GetBoldFont(); 00605 00607 00610 bool UsingGLSLCodePath (); 00611 00613 00616 bool UsingARBProgramCodePath (); 00617 00619 void PushModelViewMatrix (const Matrix4 &matrix); 00620 00622 void PushIdentityModelViewMatrix (); 00623 00625 00628 void Push2DTranslationModelViewMatrix (float tx, float ty, float tz); 00629 00631 00634 bool PopModelViewMatrix (); 00635 00637 void ResetModelViewMatrixStack (); 00638 00640 00643 void SetModelViewMatrix (const Matrix4 &matrix); 00644 00646 void ApplyModelViewMatrix (); 00647 00649 00655 Rect ModelViewXFormRect (const Rect& rect); 00656 00658 00661 int ModelViewStackDepth (); 00662 00663 00664 00666 void PushProjectionMatrix (const Matrix4 &matrix); 00667 00669 00672 bool PopProjectionMatrix (); 00673 00675 00678 int ProjectionStackDepth (); 00679 00680 00681 00682 00683 00685 void PushPorterDuffBlend (const PorterDuffOperator &porter_duff_op); 00686 00688 void PushDisableBlend (); 00689 00691 00695 void PushBlend (unsigned int src_blend, unsigned int dst_blend); 00696 00698 00701 bool PopBlend (); 00702 00704 00707 int BlendStackDepth (); 00708 00709 private: 00710 00711 ObjectPtr<FontTexture> _normal_font; 00712 ObjectPtr<FontTexture> _bold_font; 00713 00714 void InitShaders(); 00715 00717 void GaussianWeights (float **weights, float sigma, unsigned int num_tap); 00718 00720 void SetFrameBufferHelper( 00721 ObjectPtr<IOpenGLFrameBufferObject>& fbo, 00722 ObjectPtr<IOpenGLBaseTexture>& colorbuffer, 00723 ObjectPtr<IOpenGLBaseTexture>& depthbuffer, 00724 int width, int height); 00725 00726 #ifndef NUX_OPENGLES_20 00727 void InitAsmColorShader(); 00729 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmColor; 00730 00731 void InitAsmTextureShader(); 00733 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmTextureModColor; 00735 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmTextureRectModColor; 00736 00737 void InitAsmPixelateShader(); 00739 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPixelate; 00741 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPixelateRect; 00742 00743 void InitAsmColorModTexMaskAlpha(); 00746 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmColorModTexMaskAlpha; 00747 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmColorModTexRectMaskAlpha; 00748 00749 void InitAsm2TextureAdd(); 00751 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureAdd; 00752 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureRectAdd; 00753 00754 void InitAsm2TextureMod(); 00756 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureMod; 00757 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureRectMod; 00758 00759 void InitAsm4TextureAdd(); 00761 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm4TextureAdd; 00762 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm4TextureRectAdd; 00763 00764 void InitAsmPower (); 00766 00769 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_component_exponentiation_prog; 00770 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_component_exponentiation_prog; 00771 00772 void InitAsmAlphaReplicate (); 00774 00777 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_alpha_replicate_prog; 00778 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_alpha_replicate_prog; 00779 00780 void InitAsmSeparableGaussFilter (); 00782 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_separable_gauss_filter_prog; 00783 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_separable_gauss_filter_prog; 00784 00785 // void InitAsmSeparableGaussFilter2 (); 00786 // //! Gauss horizontal filter. 00787 // ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_separable_gauss_filter_prog2; 00788 // ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_separable_gauss_filter_prog2; 00789 00790 void InitAsmColorMatrixFilter (); 00792 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_color_matrix_filter_prog; 00793 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_color_matrix_filter_prog; 00794 00795 void InitAsm2TextureDepRead (); 00796 ObjectPtr<IOpenGLAsmShaderProgram> m_ASM2TextureDepRead; 00797 ObjectPtr<IOpenGLAsmShaderProgram> m_ASM2TextureRectDepRead; 00798 00799 void InitAsmBlendModes(); 00800 00801 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBNormal; 00802 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBLighten; 00803 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBDarken; 00804 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBMultiply; 00805 #endif 00806 00807 void InitSlColorShader(); 00809 ObjectPtr<IOpenGLShaderProgram> m_SlColor; 00810 00811 void InitSlTextureShader(); 00813 ObjectPtr<IOpenGLShaderProgram> m_SlTextureModColor; 00814 00815 void InitSlPixelateShader(); 00817 ObjectPtr<IOpenGLShaderProgram> m_SLPixelate; 00818 00819 void InitSlColorModTexMaskAlpha(); 00822 ObjectPtr<IOpenGLShaderProgram> m_SlColorModTexMaskAlpha; 00823 ObjectPtr<IOpenGLShaderProgram> m_SlColorModTexRectMaskAlpha; 00824 00825 void InitSl2TextureAdd(); 00828 ObjectPtr<IOpenGLShaderProgram> m_Sl2TextureAdd; 00829 00830 void InitSl2TextureDepRead(); 00833 ObjectPtr<IOpenGLShaderProgram> m_Sl2TextureDepRead; 00834 00835 00836 void InitSl2TextureMod(); 00839 ObjectPtr<IOpenGLShaderProgram> m_Sl2TextureMod; 00840 00841 void InitSl4TextureAdd(); 00843 ObjectPtr<IOpenGLShaderProgram> m_Sl4TextureAdd; 00844 00845 void InitSLPower (); 00847 00850 ObjectPtr<IOpenGLShaderProgram> _component_exponentiation_prog; 00851 00852 void InitSLAlphaReplicate (); 00854 00857 ObjectPtr<IOpenGLShaderProgram> _alpha_replicate_prog; 00858 00859 void InitSLHorizontalGaussFilter (); 00861 ObjectPtr<IOpenGLShaderProgram> _horizontal_gauss_filter_prog; 00862 00863 void InitSLVerticalGaussFilter (); 00865 ObjectPtr<IOpenGLShaderProgram> _vertical_gauss_filter_prog; 00866 00867 00868 void InitSLHorizontalHQGaussFilter (int sigma); 00870 ObjectPtr<IOpenGLShaderProgram> _horizontal_hq_gauss_filter_prog[NUX_MAX_GAUSSIAN_SIGMA]; 00871 00872 void InitSLVerticalHQGaussFilter (int sigma); 00874 ObjectPtr<IOpenGLShaderProgram> _vertical_hq_gauss_filter_prog[NUX_MAX_GAUSSIAN_SIGMA]; 00875 00876 00877 00878 void InitSLColorMatrixFilter (); 00880 ObjectPtr<IOpenGLShaderProgram> _color_matrix_filter_prog; 00881 00882 void InitSlBlendModes(); 00883 00884 void InitBlendModeNormal(); 00885 void InitBlendModeLighten(); 00886 void InitBlendModeDarken(); 00887 00888 ObjectPtr<IOpenGLShaderProgram> _shader_layer_blend_normal; 00889 ObjectPtr<IOpenGLShaderProgram> _shader_layer_blend_lighten; 00890 ObjectPtr<IOpenGLShaderProgram> _shader_layer_blend_darken; 00891 ObjectPtr<IOpenGLShaderProgram> _shader_layer_blend_multiply; 00892 00893 00895 void EvaluateGpuCaps (); 00896 00897 bool _use_glsl_shaders; 00898 00899 ObjectPtr<IOpenGLFrameBufferObject> _offscreen_fbo; 00900 ObjectPtr<IOpenGLBaseTexture> _offscreen_color_rt0; 00901 ObjectPtr<IOpenGLBaseTexture> _offscreen_depth_rt0; 00902 ObjectPtr<IOpenGLBaseTexture> _offscreen_color_rt1; 00903 ObjectPtr<IOpenGLBaseTexture> _offscreen_depth_rt1; 00904 ObjectPtr<IOpenGLBaseTexture> _offscreen_color_rt2; 00905 ObjectPtr<IOpenGLBaseTexture> _offscreen_depth_rt2; 00906 ObjectPtr<IOpenGLBaseTexture> _offscreen_color_rt3; 00907 ObjectPtr<IOpenGLBaseTexture> _offscreen_depth_rt3; 00908 00909 Matrix4 _projection_matrix; 00910 Matrix4 _model_view_matrix; 00911 00912 std::list<Matrix4> _model_view_stack; 00913 std::list<BlendOperator> _blend_stack; 00914 00916 GraphicsDisplay &_graphics_display; 00917 00918 Rect _viewport; 00919 Rect _scissor; 00920 int _clip_offset_x; 00921 int _clip_offset_y; 00922 Rect _clipping_rect; 00923 00924 00926 00931 bool _global_clipping_enabled; 00932 00934 Rect _global_clipping_rect; 00935 00936 std::list<Point> _clip_offset_stack; 00937 00938 FontRenderer *_font_renderer; 00939 00940 //Statistics 00941 mutable long m_quad_stats; 00942 mutable long m_quad_tex_stats; 00943 mutable long m_triangle_stats; 00944 mutable long m_triangle_tex_stats; 00945 mutable long m_line_stats; 00946 00947 GraphicsEngine (const GraphicsEngine &); 00948 // Does not make sense for a singleton. This is a self assignment. 00949 GraphicsEngine& operator = (const GraphicsEngine &); 00950 // Declare operator address-of as private 00951 GraphicsEngine* operator & (); 00952 }; 00953 00954 } 00955 00956 #endif // OPENGLENGINE_H 00957