nux-0.9.46
|
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 namespace nux 00046 { 00047 00048 class FontTexture; 00049 class FontRenderer; 00050 class FilePath; 00051 class BaseTexture; 00052 class TextureRectangle; 00053 00054 class ROPConfig 00055 { 00056 public: 00057 ROPConfig(); 00058 ~ROPConfig(); 00059 00060 bool Blend; 00061 t_u32 SrcBlend; 00062 t_u32 DstBlend; 00063 00064 static ROPConfig Default; 00065 }; 00066 00067 class BlendOperator 00068 { 00069 public: 00070 BlendOperator (); 00071 ~BlendOperator (); 00072 00073 void EnableBlending (bool enable); 00074 void SetPorterDuffOperator (PorterDuffOperator op); 00075 void SetCustomBlendOperator (unsigned int src_blend, unsigned int dst_blend); 00076 00077 bool _enable; 00078 unsigned int _src_blend; 00079 unsigned int _dst_blend; 00080 }; 00081 00082 typedef struct 00083 { 00084 int x; 00085 int y; 00086 int width; 00087 int height; 00088 00089 } OpenGLContext; 00090 00092 class GraphicsEngine 00093 { 00094 public: 00099 GraphicsEngine (GraphicsDisplay &GlWindow, bool create_rendering_data = true); 00100 ~GraphicsEngine(); 00101 00102 void SetContext (int x, int y, int width, int height); 00103 void GetContextSize (int &w, int &h) const; 00104 int GetContextWidth() const; 00105 int GetContextHeight() const; 00106 int GetContextX() const; 00107 int GetContextY() const; 00108 00109 void GetWindowSize (int &w, int &h) const; 00110 int GetWindowWidth() const; 00111 int GetWindowHeight() const; 00112 00113 OpenGLContext m_CurrrentContext; 00114 00115 // Load Textures 00116 BaseTexture *Load2DTextureFile (const char *filename); 00117 BaseTexture *Load2DRectangleTextureFile (const char *filename); 00118 BaseTexture *Load2DTextureFileGenerateAlpha (const char *filename, int red, int green, int blue); 00119 00120 void SetTexture (int TextureUnit, BaseTexture *Texture); 00121 void SetTexture (int TextureUnit, ObjectPtr< IOpenGLBaseTexture > Texture); 00122 void EnableTextureMode (int TextureUnit, int TextureMode); 00123 void DisableTextureMode (int TextureUnit, int TextureMode); 00124 void DisableAllTextureMode (int TextureUnit); 00125 00126 00128 // DRAW TEXTURE // 00130 00131 // Neutral 00132 void QRP_1Tex (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> Tex0, TexCoordXForm &texxform, const Color &color0); 00133 void QRP_Pixelate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0, int pixel_size); 00134 void QRP_Color (int x, int y, int width, int height, const Color &c0); 00135 void QRP_Color (int x, int y, int width, int height, const Color &c0, const Color &c1, const Color &c2, const Color &c3); 00136 void QRP_ColorModTexAlpha (int x, int y, int width, int height, 00137 ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform0, const Color &color); 00138 00139 void QRP_2Tex (int x, int y, int width, int height, 00140 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00141 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00142 00143 void QRP_2TexMod (int x, int y, int width, int height, 00144 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00145 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00146 00147 void QRP_4Tex (int x, int y, int width, int height, 00148 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00149 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1, 00150 ObjectPtr<IOpenGLBaseTexture> DeviceTexture2, TexCoordXForm &texxform2, const Color &color2, 00151 ObjectPtr<IOpenGLBaseTexture> DeviceTexture3, TexCoordXForm &texxform3, const Color &color3); 00152 00153 void QRP_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0); 00154 void QRP_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0, Color c1, Color c2); 00155 void QRP_Line (int x0, int y0, int x1, int y1, Color c0); 00156 void QRP_Line (int x0, int y0, int x1, int y1, Color c0, Color c1); 00157 void QRP_QuadWireframe (int x0, int y0, int width, int height, Color c0, Color c1, Color c2, Color c3); 00158 00159 00160 ObjectPtr<IOpenGLBaseTexture> QRP_GetBlurTexture ( 00161 int x, int y, 00162 int buffer_width, int buffer_height, 00163 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00164 const Color& c0, 00165 float sigma = 1.0f, int num_pass = 1); 00166 00167 ObjectPtr<IOpenGLBaseTexture> QRP_GetAlphaTexture ( 00168 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00169 const Color& c0); 00170 00171 ObjectPtr<IOpenGLBaseTexture> QRP_GetColorMatrixTexture ( 00172 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00173 const Color& c0, 00174 Matrix4 color_matrix, Vector4 offset); 00175 00176 ObjectPtr<IOpenGLBaseTexture> QRP_GetPower ( 00177 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& c0, const Vector4 &exponent); 00178 00179 ObjectPtr<IOpenGLBaseTexture> QRP_GetLQBlur ( 00180 int x, int y, int buffer_width, int buffer_height, 00181 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00182 const Color& c0); 00183 00184 ObjectPtr<IOpenGLBaseTexture> QRP_GetHQBlur ( 00185 int x, int y, int buffer_width, int buffer_height, 00186 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00187 const Color& c0, float sigma = 1.0f, int num_pass = 1); 00188 00189 void QRP_DisturbedTexture ( 00190 int x, int y, int width, int height, 00191 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00192 ObjectPtr<IOpenGLBaseTexture> src_device_texture, TexCoordXForm &texxform1, const Color& c1); 00193 00194 ObjectPtr<IOpenGLBaseTexture> QRP_GetPixelBlocks ( 00195 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform0, const Color& c0, int pixel_size); 00196 00197 // ASM 00198 void QRP_ASM_1Tex (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> Tex0, TexCoordXForm &texxform, const Color &color0); 00199 void QRP_ASM_Pixelate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0, int pixel_size); 00200 00201 void QRP_ASM_Color (int x, int y, int width, int height, const Color &c0); 00202 void QRP_ASM_Color (int x, int y, int width, int height, const Color &c0, const Color &c1, const Color &c2, const Color &c3); 00203 void QRP_ASM_ColorModTexAlpha (int x, int y, int width, int height, 00204 ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform0, const Color &color); 00205 00206 void QRP_ASM_2Tex (int x, int y, int width, int height, 00207 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00208 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00209 00210 void QRP_ASM_2TexMod (int x, int y, int width, int height, 00211 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00212 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00213 00214 void QRP_ASM_4Tex (int x, int y, int width, int height, 00215 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00216 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1, 00217 ObjectPtr<IOpenGLBaseTexture> DeviceTexture2, TexCoordXForm &texxform2, const Color &color2, 00218 ObjectPtr<IOpenGLBaseTexture> DeviceTexture3, TexCoordXForm &texxform3, const Color &color3); 00219 00220 void QRP_ASM_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0); 00221 void QRP_ASM_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0, Color c1, Color c2); 00222 void QRP_ASM_Line (int x0, int y0, int x1, int y1, Color c0); 00223 void QRP_ASM_Line (int x0, int y0, int x1, int y1, Color c0, Color c1); 00224 void QRP_ASM_QuadWireframe (int x0, int y0, int width, int height, Color c0, Color c1, Color c2, Color c3); 00225 00226 void QRP_ASM_Power (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, Vector4 exponent); 00227 void QRP_ASM_AlphaReplicate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0); 00228 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); 00229 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); 00230 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); 00231 00233 00242 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetBlurTexture ( 00243 int x, int y, int buffer_width, int buffer_height, 00244 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& color, float sigma = 1.0f, int num_pass = 1); 00245 00247 00253 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetAlphaTexture ( 00254 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& color); 00255 00257 00265 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetColorMatrixTexture ( 00266 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00267 const Color& c, Matrix4 color_matrix, Vector4 offset); 00268 00270 00278 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetPower ( 00279 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& c0, const Vector4 &exponent); 00280 00281 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetLQBlur ( 00282 int x, int y, int buffer_width, int buffer_height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00283 const Color& c0); 00284 00285 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetHQBlur ( 00286 int x, int y, int buffer_width, int buffer_height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00287 const Color& c0, float sigma = 1.0f, int num_pass = 1); 00288 00289 void QRP_ASM_DisturbedTexture ( 00290 int x, int y, int width, int height, 00291 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00292 ObjectPtr<IOpenGLBaseTexture> src_device_texture, TexCoordXForm &texxform1, const Color& c1); 00293 00295 00302 ObjectPtr<IOpenGLBaseTexture> QRP_ASM_GetPixelBlocks ( 00303 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform0, const Color& color, int pixel_size); 00304 00305 // GLSL 00306 00307 void QRP_GLSL_1Tex (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0); 00308 void QRP_GLSL_Pixelate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform, const Color &c0, int pixel_size); 00309 00310 void QRP_GLSL_Color (int x, int y, int width, int height, const Color &c0); 00311 void QRP_GLSL_Color (int x, int y, int width, int height, const Color &c0, const Color &c1, const Color &c2, const Color &c3); 00312 void QRP_GLSL_ColorModTexAlpha (int x, int y, int width, int height, 00313 ObjectPtr<IOpenGLBaseTexture> DeviceTexture, TexCoordXForm &texxform0, const Color &color); 00314 00315 void QRP_GLSL_2Tex (int x, int y, int width, int height, 00316 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00317 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00318 00319 void QRP_GLSL_2TexMod (int x, int y, int width, int height, 00320 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00321 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1); 00322 00323 00324 void QRP_GLSL_4Tex (int x, int y, int width, int height, 00325 ObjectPtr<IOpenGLBaseTexture> DeviceTexture0, TexCoordXForm &texxform0, const Color &color0, 00326 ObjectPtr<IOpenGLBaseTexture> DeviceTexture1, TexCoordXForm &texxform1, const Color &color1, 00327 ObjectPtr<IOpenGLBaseTexture> DeviceTexture2, TexCoordXForm &texxform2, const Color &color2, 00328 ObjectPtr<IOpenGLBaseTexture> DeviceTexture3, TexCoordXForm &texxform3, const Color &color3); 00329 00330 void QRP_GLSL_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0); 00331 void QRP_GLSL_Triangle (int x0, int y0, int x1, int y1, int x2, int y2, Color c0, Color c1, Color c2); 00332 void QRP_GLSL_Line (int x0, int y0, int x1, int y1, Color c0); 00333 void QRP_GLSL_Line (int x0, int y0, int x1, int y1, Color c0, Color c1); 00334 void QRP_GLSL_QuadWireframe (int x0, int y0, int width, int height, Color c0, Color c1, Color c2, Color c3); 00335 00336 void QRP_GLSL_Power (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0, Vector4 exponent); 00337 void QRP_GLSL_AlphaReplicate (int x, int y, int width, int height, ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color &c0); 00338 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); 00339 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); 00340 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); 00341 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); 00342 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); 00343 00352 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetBlurTexture ( 00353 int x, int y, 00354 int buffer_width, int buffer_height, 00355 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00356 const Color& c0, 00357 float sigma = 1.0f, int num_pass = 1); 00358 00359 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetAlphaTexture ( 00360 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00361 const Color& c0); 00362 00363 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetColorMatrixTexture ( 00364 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00365 const Color& c0, 00366 Matrix4 color_matrix, Vector4 offset); 00367 00368 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetPower ( 00369 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, const Color& c0, const Vector4 &exponent); 00370 00371 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetLQBlur ( 00372 int x, int y, 00373 int buffer_width, int buffer_height, 00374 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00375 const Color& c0); 00376 00377 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetHQBlur ( 00378 int x, int y, 00379 int buffer_width, int buffer_height, 00380 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform, 00381 const Color& c0, float sigma = 1.0f, int num_pass = 1); 00382 00383 void QRP_GLSL_DisturbedTexture ( 00384 int x, int y, int width, int height, 00385 ObjectPtr<IOpenGLBaseTexture> distorsion_texture, TexCoordXForm &texxform0, const Color& c0, 00386 ObjectPtr<IOpenGLBaseTexture> src_device_texture, TexCoordXForm &texxform1, const Color& c1); 00387 00389 00396 ObjectPtr<IOpenGLBaseTexture> QRP_GLSL_GetPixelBlocks ( 00397 ObjectPtr<IOpenGLBaseTexture> device_texture, TexCoordXForm &texxform0, const Color& c0, int pixel_size); 00398 00400 // DRAW CLIPPING // 00402 00403 mutable std::vector<Rect> ClippingRect; 00404 void PushClippingRectangle (Rect rect); 00405 void PopClippingRectangle (); 00406 void EmptyClippingRegion (); 00408 void ApplyClippingRectangle (); 00409 00410 void SetGlobalClippingRectangle (Rect rect); 00411 void DisableGlobalClippingRectangle (); 00412 00414 00417 void SetClippingRectangle (const Rect &rect); 00418 00420 void SetOpenGLClippingRectangle (int x, int y, unsigned int width, unsigned int height); 00421 00422 Rect GetClippingRegion () const; 00423 int GetNumberOfClippingRegions () const; 00424 00425 void AddClipOffset (int x, int y); 00426 void PushClipOffset (int x, int y); 00427 void PopClipOffset (); 00428 00429 void ClearAreaColorDepthStencil (int x, int y, int width, int height, Color clearcolor, float cleardepth, int clearstencil); 00430 void ClearAreaColor (int x, int y, int width, int height, Color clearcolor); 00431 void ClearAreaDepthStencil (int x, int y, int width, int height, float cleardepth, int clearstencil); 00432 00433 void Set3DView (int w, int h); 00434 00436 void Push2DWindow (int w, int h); 00437 void Pop2DWindow (); 00438 void Push2DModelViewMatrix (Matrix4 mat); 00439 Matrix4 Pop2DModelViewMatrix (); 00440 void Clear2DModelViewMatrix (); 00441 std::list<Matrix4> m_2DModelViewMatricesStack; 00442 00443 void SetViewport (int x, int y, int w, int h); 00444 Rect GetViewportRect () const; 00445 int GetViewportWidth () const; 00446 int GetViewportHeight () const; 00447 int GetViewportX () const; 00448 int GetViewportY () const; 00449 00450 void GetViewportSize (int &viewport_width, int &viewport_height) const; 00451 00452 void SetScissor (int x, int y, int w, int h); 00453 00461 void SetScissorOffset (int x, int y); 00462 00463 Rect GetScissorRect(); 00464 void EnableScissoring (bool b); 00465 00466 00467 // void LoadPainterImages(); 00468 // const PainterImage* GetImage(UXStyleImageRef style); 00469 // Rect GetImageGeometry(UXStyleImageRef style); 00470 // std::list<PainterImage*> m_PainterImageList; 00471 00472 int RenderColorText (ObjectPtr<FontTexture> Font, int x, int y, const NString &Str, 00473 const Color &TextColor, 00474 bool WriteAlphaChannel, 00475 int NumCharacter); 00476 00477 int RenderColorTextLineStatic (ObjectPtr<FontTexture> Font, const PageBBox &pageSize, const NString &Str, 00478 const Color &TextColor, 00479 bool WriteAlphaChannel, 00480 TextAlignment alignment); 00481 00482 int RenderColorTextLineEdit (ObjectPtr<FontTexture> Font, const PageBBox &pageSize, const NString &Str, 00483 const Color &TextColor, 00484 bool WriteAlphaChannel, 00485 const Color &SelectedTextColor, 00486 const Color &SelectedTextBackgroundColor, 00487 const Color &TextBlinkColor, 00488 const Color &CursorColor, 00489 bool ShowCursor, unsigned int CursorPosition, 00490 int offset = 0, int selection_start = 0, int selection_end = 0); 00491 00492 ObjectPtr <IOpenGLBaseTexture> CreateTextureFromBackBuffer (int x, int y, int width, int height); 00493 00494 //Statistics 00495 void ResetStats(); 00496 00503 ObjectPtr<CachedResourceData> CacheResource (ResourceData *Resource); 00504 00509 void UpdateResource (ResourceData *Resource); 00510 00511 bool FlushCachedResourceData (ResourceData *Resource); 00512 bool IsResourceCached (ResourceData *Resource); 00513 NResourceCache ResourceCache; 00514 00515 Matrix4 GetProjectionMatrix (); 00517 Matrix4 GetOpenGLProjectionMatrix (); 00518 00519 void SetProjectionMatrix (const Matrix4 &matrix); 00520 00522 00528 void SetOrthographicProjectionMatrix (int viewport_width, int viewport_height); 00529 00531 void ResetProjectionMatrix (); 00532 00533 Matrix4 GetModelViewMatrix (); 00535 Matrix4 GetOpenGLModelViewMatrix (); 00536 00537 Matrix4 GetModelViewProjectionMatrix (); 00538 Matrix4 GetOpenGLModelViewProjectionMatrix (); 00539 00540 GpuRenderStates &GetRenderStates() 00541 { 00542 return *_graphics_display.m_DeviceFactory->_gpu_render_states; 00543 } 00544 void ResetRenderStates() 00545 { 00546 _graphics_display.m_DeviceFactory->_gpu_render_states->ResetStateChangeToDefault(); 00547 } 00548 void VerifyRenderStates() 00549 { 00550 _graphics_display.m_DeviceFactory->_gpu_render_states->CheckStateChange(); 00551 } 00552 00553 ObjectPtr<FontTexture> GetFont(); 00554 ObjectPtr<FontTexture> GetBoldFont(); 00555 00557 00560 bool UsingGLSLCodePath (); 00561 00563 00566 bool UsingARBProgramCodePath (); 00567 00569 void PushModelViewMatrix (const Matrix4 &matrix); 00570 00572 void PushIdentityModelViewMatrix (); 00573 00575 00578 void Push2DTranslationModelViewMatrix (float tx, float ty, float tz); 00579 00581 00584 bool PopModelViewMatrix (); 00585 00587 void ResetModelViewMatrixStack (); 00588 00590 00593 void SetModelViewMatrix (const Matrix4 &matrix); 00594 00596 void ApplyModelViewMatrix (); 00597 00599 00605 Rect ModelViewXFormRect (const Rect& rect); 00606 00608 00611 int ModelViewStackDepth (); 00612 00613 00614 00616 void PushProjectionMatrix (const Matrix4 &matrix); 00617 00619 00622 bool PopProjectionMatrix (); 00623 00625 00628 int ProjectionStackDepth (); 00629 00630 00631 00632 00633 00635 void PushPorterDuffBlend (const PorterDuffOperator &porter_duff_op); 00636 00638 void PushDisableBlend (); 00639 00641 00645 void PushBlend (unsigned int src_blend, unsigned int dst_blend); 00646 00648 00651 bool PopBlend (); 00652 00654 00657 int BlendStackDepth (); 00658 00659 private: 00660 00661 ObjectPtr<FontTexture> _normal_font; 00662 ObjectPtr<FontTexture> _bold_font; 00663 00664 void InitShaders(); 00665 00667 void GaussianWeights (float **weights, float sigma, unsigned int num_tap); 00668 00670 void SetFrameBufferHelper( 00671 ObjectPtr<IOpenGLFrameBufferObject>& fbo, 00672 ObjectPtr<IOpenGLTexture2D>& colorbuffer, 00673 ObjectPtr<IOpenGLTexture2D>& depthbuffer, 00674 int width, int height); 00675 00676 #ifndef NUX_OPENGLES_20 00677 void InitAsmColorShader(); 00679 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmColor; 00680 00681 void InitAsmTextureShader(); 00683 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmTextureModColor; 00685 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmTextureRectModColor; 00686 00687 void InitAsmPixelateShader(); 00689 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPixelate; 00691 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPixelateRect; 00692 00693 void InitAsmColorModTexMaskAlpha(); 00696 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmColorModTexMaskAlpha; 00697 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmColorModTexRectMaskAlpha; 00698 00699 void InitAsm2TextureAdd(); 00701 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureAdd; 00702 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureRectAdd; 00703 00704 void InitAsm2TextureMod(); 00706 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureMod; 00707 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm2TextureRectMod; 00708 00709 void InitAsm4TextureAdd(); 00711 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm4TextureAdd; 00712 ObjectPtr<IOpenGLAsmShaderProgram> m_Asm4TextureRectAdd; 00713 00714 void InitAsmPower (); 00716 00719 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_component_exponentiation_prog; 00720 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_component_exponentiation_prog; 00721 00722 void InitAsmAlphaReplicate (); 00724 00727 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_alpha_replicate_prog; 00728 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_alpha_replicate_prog; 00729 00730 void InitAsmSeparableGaussFilter (); 00732 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_separable_gauss_filter_prog; 00733 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_separable_gauss_filter_prog; 00734 00735 // void InitAsmSeparableGaussFilter2 (); 00736 // //! Gauss horizontal filter. 00737 // ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_separable_gauss_filter_prog2; 00738 // ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_separable_gauss_filter_prog2; 00739 00740 void InitAsmColorMatrixFilter (); 00742 ObjectPtr<IOpenGLAsmShaderProgram> _asm_tex_color_matrix_filter_prog; 00743 ObjectPtr<IOpenGLAsmShaderProgram> _asm_texrect_color_matrix_filter_prog; 00744 00745 void InitAsm2TextureDepRead (); 00746 ObjectPtr<IOpenGLAsmShaderProgram> m_ASM2TextureDepRead; 00747 ObjectPtr<IOpenGLAsmShaderProgram> m_ASM2TextureRectDepRead; 00748 00749 void InitAsmBlendModes(); 00750 00751 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBNormal; 00752 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBLighten; 00753 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBDarken; 00754 ObjectPtr<IOpenGLAsmShaderProgram> m_AsmPSBMultiply; 00755 #endif 00756 00757 void InitSlColorShader(); 00759 ObjectPtr<IOpenGLShaderProgram> m_SlColor; 00760 00761 void InitSlTextureShader(); 00763 ObjectPtr<IOpenGLShaderProgram> m_SlTextureModColor; 00764 00765 void InitSlPixelateShader(); 00767 ObjectPtr<IOpenGLShaderProgram> m_SLPixelate; 00768 00769 void InitSlColorModTexMaskAlpha(); 00772 ObjectPtr<IOpenGLShaderProgram> m_SlColorModTexMaskAlpha; 00773 ObjectPtr<IOpenGLShaderProgram> m_SlColorModTexRectMaskAlpha; 00774 00775 void InitSl2TextureAdd(); 00778 ObjectPtr<IOpenGLShaderProgram> m_Sl2TextureAdd; 00779 00780 void InitSl2TextureDepRead(); 00783 ObjectPtr<IOpenGLShaderProgram> m_Sl2TextureDepRead; 00784 00785 00786 void InitSl2TextureMod(); 00789 ObjectPtr<IOpenGLShaderProgram> m_Sl2TextureMod; 00790 00791 void InitSl4TextureAdd(); 00793 ObjectPtr<IOpenGLShaderProgram> m_Sl4TextureAdd; 00794 00795 void InitSLPower (); 00797 00800 ObjectPtr<IOpenGLShaderProgram> _component_exponentiation_prog; 00801 00802 void InitSLAlphaReplicate (); 00804 00807 ObjectPtr<IOpenGLShaderProgram> _alpha_replicate_prog; 00808 00809 void InitSLHorizontalGaussFilter (); 00811 ObjectPtr<IOpenGLShaderProgram> _horizontal_gauss_filter_prog; 00812 00813 void InitSLVerticalGaussFilter (); 00815 ObjectPtr<IOpenGLShaderProgram> _vertical_gauss_filter_prog; 00816 00817 00818 void InitSLHorizontalHQGaussFilter (); 00820 ObjectPtr<IOpenGLShaderProgram> _horizontal_hq_gauss_filter_prog; 00821 00822 void InitSLVerticalHQGaussFilter (); 00824 ObjectPtr<IOpenGLShaderProgram> _vertical_hq_gauss_filter_prog; 00825 00826 00827 00828 void InitSLColorMatrixFilter (); 00830 ObjectPtr<IOpenGLShaderProgram> _color_matrix_filter_prog; 00831 00832 void InitSlBlendModes(); 00833 00834 ObjectPtr<IOpenGLShaderProgram> m_SlPSBNormal; 00835 ObjectPtr<IOpenGLShaderProgram> m_SlPSBLighten; 00836 ObjectPtr<IOpenGLShaderProgram> m_SlPSBDarken; 00837 ObjectPtr<IOpenGLShaderProgram> m_SlPSBMultiply; 00838 00839 00841 void EvaluateGpuCaps (); 00842 00843 bool _use_glsl_shaders; 00844 00845 ObjectPtr<IOpenGLFrameBufferObject> _offscreen_fbo; 00846 ObjectPtr<IOpenGLTexture2D> _offscreen_color_rt0; 00847 ObjectPtr<IOpenGLTexture2D> _offscreen_depth_rt0; 00848 ObjectPtr<IOpenGLTexture2D> _offscreen_color_rt1; 00849 ObjectPtr<IOpenGLTexture2D> _offscreen_depth_rt1; 00850 ObjectPtr<IOpenGLTexture2D> _offscreen_color_rt2; 00851 ObjectPtr<IOpenGLTexture2D> _offscreen_depth_rt2; 00852 ObjectPtr<IOpenGLTexture2D> _offscreen_color_rt3; 00853 ObjectPtr<IOpenGLTexture2D> _offscreen_depth_rt3; 00854 00855 Matrix4 _projection_matrix; 00856 Matrix4 _model_view_matrix; 00857 00858 std::list<Matrix4> _model_view_stack; 00859 std::list<BlendOperator> _blend_stack; 00860 00862 GraphicsDisplay &_graphics_display; 00863 00864 Rect _viewport; 00865 Rect _scissor; 00866 int _clip_offset_x; 00867 int _clip_offset_y; 00868 Rect _clipping_rect; 00869 00870 00872 00877 bool _global_clipping_enabled; 00878 00880 Rect _global_clipping_rect; 00881 00882 std::list<Point> _clip_offset_stack; 00883 00884 FontRenderer *_font_renderer; 00885 00886 //Statistics 00887 mutable long m_quad_stats; 00888 mutable long m_quad_tex_stats; 00889 mutable long m_triangle_stats; 00890 mutable long m_triangle_tex_stats; 00891 mutable long m_line_stats; 00892 00893 GraphicsEngine (const GraphicsEngine &); 00894 // Does not make sense for a singleton. This is a self assignment. 00895 GraphicsEngine& operator = (const GraphicsEngine &); 00896 // Declare operator address-of as private 00897 GraphicsEngine* operator & (); 00898 }; 00899 00900 } 00901 00902 #endif // OPENGLENGINE_H 00903