Commit d6a197b5 authored by nadro's avatar nadro

Prepared OpenGL CacheHandler class for the new architecture of Irrlicht's...

Prepared OpenGL CacheHandler class for the new architecture of Irrlicht's shared OpenGL drivers code.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@5165 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 72dcc7cb
This diff is collapsed.
...@@ -19,16 +19,19 @@ namespace video ...@@ -19,16 +19,19 @@ namespace video
class COGLCoreFeature class COGLCoreFeature
{ {
public: public:
COGLCoreFeature() : ColorAttachment(0), MultipleRenderTarget(0) COGLCoreFeature() : BlendOperation(false), ColorAttachment(0), MultipleRenderTarget(0), TextureUnit(1)
{ {
} }
virtual ~COGLCoreFeature() virtual ~COGLCoreFeature()
{ {
} }
bool BlendOperation;
u8 ColorAttachment; u8 ColorAttachment;
u8 MultipleRenderTarget; u8 MultipleRenderTarget;
u8 TextureUnit;
}; };
} }
......
This diff is collapsed.
...@@ -2,49 +2,28 @@ ...@@ -2,49 +2,28 @@
// This file is part of the "Irrlicht Engine". // This file is part of the "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in Irrlicht.h // For conditions of distribution and use, see copyright notice in Irrlicht.h
#ifndef __C_OPEN_GL_CACHE_HANDLER_H_INCLUDED__ #ifndef __C_OPENGL_CACHE_HANDLER_H_INCLUDED__
#define __C_OPEN_GL_CACHE_HANDLER_H_INCLUDED__ #define __C_OPENGL_CACHE_HANDLER_H_INCLUDED__
#include "IrrCompileConfig.h" #include "IrrCompileConfig.h"
#ifdef _IRR_COMPILE_WITH_OPENGL_ #ifdef _IRR_COMPILE_WITH_OPENGL_
#include "COpenGLExtensionHandler.h" #include "COpenGLExtensionHandler.h"
#include "SMaterial.h" #include "COGLCoreCacheHandler.h"
namespace irr namespace irr
{ {
namespace video namespace video
{ {
class COpenGLDriver;
class COpenGLTexture; class COpenGLTexture;
class COpenGLDriver;
class COpenGLCacheHandler class COpenGLCacheHandler : public COGLCoreCacheHandler<COpenGLDriver, COpenGLTexture>
{ {
class STextureCache
{
public:
STextureCache();
STextureCache(COpenGLCacheHandler* cacheHandler, u32 textureCount);
~STextureCache();
const COpenGLTexture* operator[](int index) const;
bool set(u32 index, const ITexture* texture);
void remove(ITexture* texture);
void clear();
private:
COpenGLCacheHandler* CacheHandler;
const COpenGLTexture* Texture[MATERIAL_MAX_TEXTURES];
u32 TextureCount;
};
public: public:
COpenGLCacheHandler(COpenGLDriver* driver); COpenGLCacheHandler(COpenGLDriver* driver);
~COpenGLCacheHandler(); virtual ~COpenGLCacheHandler();
// Alpha calls. // Alpha calls.
...@@ -52,113 +31,37 @@ namespace video ...@@ -52,113 +31,37 @@ namespace video
void setAlphaTest(bool enable); void setAlphaTest(bool enable);
// Blending calls.
void setBlendEquation(GLenum mode);
void setBlendEquationIndexed(GLuint index, GLenum mode);
void setBlendFunc(GLenum source, GLenum destination);
void setBlendFuncSeparate(GLenum sourceRGB, GLenum destinationRGB, GLenum sourceAlpha, GLenum destinationAlpha);
void setBlendFuncIndexed(GLuint index, GLenum source, GLenum destination);
void setBlendFuncSeparateIndexed(GLuint index, GLenum sourceRGB, GLenum destinationRGB, GLenum sourceAlpha, GLenum destinationAlpha);
void setBlend(bool enable);
void setBlendIndexed(GLuint index, bool enable);
// Client state calls. // Client state calls.
void setClientState(bool vertex, bool normal, bool color, bool texCoord0); void setClientState(bool vertex, bool normal, bool color, bool texCoord0);
// Color Mask.
void setColorMask(bool red, bool green, bool blue, bool alpha);
void setColorMaskIndexed(GLuint index, bool red, bool green, bool blue, bool alpha);
// Cull face calls.
void setCullFaceFunc(GLenum mode);
void setCullFace(bool enable);
// Depth calls. // Depth calls.
void setDepthFunc(GLenum mode);
void setDepthMask(bool enable);
void setDepthTest(bool enable); void setDepthTest(bool enable);
// FBO calls.
void getFBO(GLuint& id) const;
void setFBO(GLuint id);
// Matrix calls. // Matrix calls.
void setMatrixMode(GLenum mode); void setMatrixMode(GLenum mode);
// Texture calls. // Texture calls.
void setActiveTexture(GLenum texture);
void setClientActiveTexture(GLenum texture); void setClientActiveTexture(GLenum texture);
// Viewport calls. protected:
void setViewport(GLint viewportX, GLint viewportY, GLsizei viewportWidth, GLsizei viewportHeight);
// Texture cache.
STextureCache TextureCache;
private:
COpenGLDriver* Driver;
GLuint FrameBufferCount;
GLenum AlphaMode; GLenum AlphaMode;
GLclampf AlphaRef; GLclampf AlphaRef;
bool AlphaTest; bool AlphaTest;
GLenum* BlendEquation;
GLenum* BlendSourceRGB;
GLenum* BlendDestinationRGB;
GLenum* BlendSourceAlpha;
GLenum* BlendDestinationAlpha;
bool* Blend;
bool (*ColorMask)[4];
GLenum CullFaceMode;
bool CullFace;
GLenum DepthFunc;
bool DepthMask;
bool DepthTest; bool DepthTest;
GLuint FrameBufferID;
GLenum MatrixMode; GLenum MatrixMode;
GLenum ActiveTexture;
GLenum ClientActiveTexture; GLenum ClientActiveTexture;
bool ClientStateVertex; bool ClientStateVertex;
bool ClientStateNormal; bool ClientStateNormal;
bool ClientStateColor; bool ClientStateColor;
bool ClientStateTexCoord0; bool ClientStateTexCoord0;
GLint ViewportX;
GLint ViewportY;
GLsizei ViewportWidth;
GLsizei ViewportHeight;
}; };
} // end namespace video } // end namespace video
......
This diff is collapsed.
...@@ -17,9 +17,7 @@ namespace video ...@@ -17,9 +17,7 @@ namespace video
{ {
COpenGLExtensionHandler::COpenGLExtensionHandler() : COpenGLExtensionHandler::COpenGLExtensionHandler() :
StencilBuffer(false), MultiTextureExtension(false), StencilBuffer(false), TextureCompressionExtension(false), MaxLights(1),
TextureCompressionExtension(false),
MaxSupportedTextures(1), MaxTextureUnits(1), MaxLights(1),
MaxAnisotropy(1), MaxUserClipPlanes(0), MaxAuxBuffers(0), MaxIndices(65535), MaxAnisotropy(1), MaxUserClipPlanes(0), MaxAuxBuffers(0), MaxIndices(65535),
MaxTextureSize(1), MaxGeometryVerticesOut(0), MaxTextureSize(1), MaxGeometryVerticesOut(0),
MaxTextureLODBias(0.f), Version(0), ShaderLanguageVersion(0), MaxTextureLODBias(0.f), Version(0), ShaderLanguageVersion(0),
...@@ -373,7 +371,6 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) ...@@ -373,7 +371,6 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
delete [] str; delete [] str;
} }
MultiTextureExtension = FeatureAvailable[IRR_ARB_multitexture];
TextureCompressionExtension = FeatureAvailable[IRR_ARB_texture_compression]; TextureCompressionExtension = FeatureAvailable[IRR_ARB_texture_compression];
StencilBuffer=stencilBuffer; StencilBuffer=stencilBuffer;
...@@ -586,7 +583,7 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) ...@@ -586,7 +583,7 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
#elif defined(GL_MAX_TEXTURE_UNITS_ARB) #elif defined(GL_MAX_TEXTURE_UNITS_ARB)
glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &num); glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &num);
#endif #endif
MaxSupportedTextures=static_cast<u8>(num); Feature.TextureUnit=static_cast<u8>(num);
} }
#endif #endif
#if defined(GL_ARB_vertex_shader) || defined(GL_VERSION_2_0) #if defined(GL_ARB_vertex_shader) || defined(GL_VERSION_2_0)
...@@ -598,7 +595,7 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) ...@@ -598,7 +595,7 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
#elif defined(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB) #elif defined(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB)
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &num); glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &num);
#endif #endif
MaxSupportedTextures=core::max_(MaxSupportedTextures,static_cast<u8>(num)); Feature.TextureUnit =core::max_(Feature.TextureUnit,static_cast<u8>(num));
} }
#endif #endif
glGetIntegerv(GL_MAX_LIGHTS, &num); glGetIntegerv(GL_MAX_LIGHTS, &num);
...@@ -698,17 +695,12 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) ...@@ -698,17 +695,12 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (!pGlActiveTextureARB || !pGlClientActiveTextureARB) if (!pGlActiveTextureARB || !pGlClientActiveTextureARB)
{ {
MultiTextureExtension = false; Feature.TextureUnit = 1;
os::Printer::log("Failed to load OpenGL's multitexture extension, proceeding without.", ELL_WARNING); os::Printer::log("Failed to load OpenGL's multitexture extension, proceeding without.", ELL_WARNING);
} }
else else
#endif #endif
MaxTextureUnits = core::min_(MaxSupportedTextures, static_cast<u8>(MATERIAL_MAX_TEXTURES)); Feature.TextureUnit = core::min_(Feature.TextureUnit, static_cast<u8>(MATERIAL_MAX_TEXTURES));
if (MaxTextureUnits < 2)
{
MultiTextureExtension = false;
os::Printer::log("Warning: OpenGL device only has one texture unit. Disabling multitexturing.", ELL_WARNING);
}
#ifdef GL_ARB_occlusion_query #ifdef GL_ARB_occlusion_query
if (FeatureAvailable[IRR_ARB_occlusion_query]) if (FeatureAvailable[IRR_ARB_occlusion_query])
...@@ -729,6 +721,9 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) ...@@ -729,6 +721,9 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
#endif #endif
OcclusionQuerySupport=false; OcclusionQuerySupport=false;
Feature.BlendOperation = (Version >= 140) || FeatureAvailable[IRR_EXT_blend_minmax] || FeatureAvailable[IRR_EXT_blend_subtract] ||
FeatureAvailable[IRR_EXT_blend_logic_op];
#ifdef _DEBUG #ifdef _DEBUG
if (FeatureAvailable[IRR_NVX_gpu_memory_info]) if (FeatureAvailable[IRR_NVX_gpu_memory_info])
{ {
...@@ -770,7 +765,7 @@ bool COpenGLExtensionHandler::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const ...@@ -770,7 +765,7 @@ bool COpenGLExtensionHandler::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const
case EVDF_HARDWARE_TL: case EVDF_HARDWARE_TL:
return true; // we cannot tell other things return true; // we cannot tell other things
case EVDF_MULTITEXTURE: case EVDF_MULTITEXTURE:
return MultiTextureExtension; return Feature.TextureUnit > 1;
case EVDF_BILINEAR_FILTER: case EVDF_BILINEAR_FILTER:
return true; return true;
case EVDF_MIP_MAP: case EVDF_MIP_MAP:
...@@ -821,8 +816,7 @@ bool COpenGLExtensionHandler::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const ...@@ -821,8 +816,7 @@ bool COpenGLExtensionHandler::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const
// both features supported with OpenGL 1.1 // both features supported with OpenGL 1.1
return Version>=110; return Version>=110;
case EVDF_BLEND_OPERATIONS: case EVDF_BLEND_OPERATIONS:
return (Version>=140) || FeatureAvailable[IRR_EXT_blend_minmax] || return Feature.BlendOperation;
FeatureAvailable[IRR_EXT_blend_subtract] || FeatureAvailable[IRR_EXT_blend_logic_op];
case EVDF_BLEND_SEPARATE: case EVDF_BLEND_SEPARATE:
return (Version>=140) || FeatureAvailable[IRR_EXT_blend_func_separate]; return (Version>=140) || FeatureAvailable[IRR_EXT_blend_func_separate];
case EVDF_TEXTURE_MATRIX: case EVDF_TEXTURE_MATRIX:
......
...@@ -77,6 +77,16 @@ typedef unsigned int GLhandleARB; ...@@ -77,6 +77,16 @@ typedef unsigned int GLhandleARB;
typedef char GLchar; typedef char GLchar;
#endif #endif
// Blending definitions.
#if !defined(GL_VERSION_1_4)
#if defined(GL_EXT_blend_subtract) || defined(GL_EXT_blend_minmax) || defined(GL_EXT_blend_logic_op)
#define GL_FUNC_ADD GL_FUNC_ADD_EXT
#else
#define GL_FUNC_ADD 0
#endif
#endif
// FBO definitions. // FBO definitions.
#if !defined(GL_VERSION_3_0) && !defined(GL_ARB_framebuffer_object) #if !defined(GL_VERSION_3_0) && !defined(GL_ARB_framebuffer_object)
...@@ -115,6 +125,20 @@ typedef char GLchar; ...@@ -115,6 +125,20 @@ typedef char GLchar;
#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 7 #define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 7
#endif #endif
// Texture definitions.
#if !defined(GL_VERSION_1_3)
#ifdef GL_ARB_multitexture
#define GL_TEXTURE0 GL_TEXTURE0_ARB
#else
#define GL_TEXTURE0 0
#endif
#endif
// Irrlicht's OpenGL version.
#define IRR_OPENGL_VERSION 14
#include "COGLCoreFeature.h" #include "COGLCoreFeature.h"
namespace irr namespace irr
...@@ -1115,14 +1139,9 @@ class COpenGLExtensionHandler ...@@ -1115,14 +1139,9 @@ class COpenGLExtensionHandler
// Some variables for properties // Some variables for properties
bool StencilBuffer; bool StencilBuffer;
bool MultiTextureExtension;
bool TextureCompressionExtension; bool TextureCompressionExtension;
// Some non-boolean properties // Some non-boolean properties
//! Maxmimum texture layers supported by the fixed pipeline
u8 MaxSupportedTextures;
//! Maxmimum texture layers supported by the engine
u8 MaxTextureUnits;
//! Maximum hardware lights supported //! Maximum hardware lights supported
u8 MaxLights; u8 MaxLights;
//! Maximal Anisotropy //! Maximal Anisotropy
...@@ -1157,8 +1176,8 @@ class COpenGLExtensionHandler ...@@ -1157,8 +1176,8 @@ class COpenGLExtensionHandler
// public access to the (loaded) extensions. // public access to the (loaded) extensions.
// general functions // general functions
void extGlActiveTexture(GLenum texture); void irrGlActiveTexture(GLenum texture);
void extGlClientActiveTexture(GLenum texture); void irrGlClientActiveTexture(GLenum texture);
void extGlPointParameterf(GLint loc, GLfloat f); void extGlPointParameterf(GLint loc, GLfloat f);
void extGlPointParameterfv(GLint loc, const GLfloat *v); void extGlPointParameterfv(GLint loc, const GLfloat *v);
void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
...@@ -1272,17 +1291,17 @@ class COpenGLExtensionHandler ...@@ -1272,17 +1291,17 @@ class COpenGLExtensionHandler
void extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params); void extGlGetQueryObjectuiv(GLuint id, GLenum pname, GLuint *params);
// blend // blend
void extGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); void irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);
void extGlBlendEquation(GLenum mode); void irrGlBlendEquation(GLenum mode);
// indexed // indexed
void extGlEnableIndexed(GLenum target, GLuint index); void irrGlEnableIndexed(GLenum target, GLuint index);
void extGlDisableIndexed(GLenum target, GLuint index); void irrGlDisableIndexed(GLenum target, GLuint index);
void extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a); void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a);
void extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst); void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst);
void extGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);
void extGlBlendEquationIndexed(GLuint buf, GLenum mode); void irrGlBlendEquationIndexed(GLuint buf, GLenum mode);
void extGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha); void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha);
// generic vsync setting method for several extensions // generic vsync setting method for several extensions
void extGlSwapInterval(int interval); void extGlSwapInterval(int interval);
...@@ -1444,13 +1463,12 @@ class COpenGLExtensionHandler ...@@ -1444,13 +1463,12 @@ class COpenGLExtensionHandler
#endif #endif
}; };
inline void COpenGLExtensionHandler::extGlActiveTexture(GLenum texture) inline void COpenGLExtensionHandler::irrGlActiveTexture(GLenum texture)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (MultiTextureExtension && pGlActiveTextureARB) if (pGlActiveTextureARB)
pGlActiveTextureARB(texture); pGlActiveTextureARB(texture);
#else #else
if (MultiTextureExtension)
#ifdef GL_ARB_multitexture #ifdef GL_ARB_multitexture
glActiveTextureARB(texture); glActiveTextureARB(texture);
#else #else
...@@ -1459,14 +1477,13 @@ inline void COpenGLExtensionHandler::extGlActiveTexture(GLenum texture) ...@@ -1459,14 +1477,13 @@ inline void COpenGLExtensionHandler::extGlActiveTexture(GLenum texture)
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlClientActiveTexture(GLenum texture) inline void COpenGLExtensionHandler::irrGlClientActiveTexture(GLenum texture)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (MultiTextureExtension && pGlClientActiveTextureARB) if (pGlClientActiveTextureARB)
pGlClientActiveTextureARB(texture); pGlClientActiveTextureARB(texture);
#else #else
if (MultiTextureExtension) glClientActiveTextureARB(texture);
glClientActiveTextureARB(texture);
#endif #endif
} }
...@@ -2657,7 +2674,7 @@ inline void COpenGLExtensionHandler::extGlGetQueryObjectuiv(GLuint id, GLenum pn ...@@ -2657,7 +2674,7 @@ inline void COpenGLExtensionHandler::extGlGetQueryObjectuiv(GLuint id, GLenum pn
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha) inline void COpenGLExtensionHandler::irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlBlendFuncSeparate) if (pGlBlendFuncSeparate)
...@@ -2673,7 +2690,7 @@ inline void COpenGLExtensionHandler::extGlBlendFuncSeparate(GLenum sfactorRGB, G ...@@ -2673,7 +2690,7 @@ inline void COpenGLExtensionHandler::extGlBlendFuncSeparate(GLenum sfactorRGB, G
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlBlendEquation(GLenum mode) inline void COpenGLExtensionHandler::irrGlBlendEquation(GLenum mode)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlBlendEquation) if (pGlBlendEquation)
...@@ -2689,7 +2706,7 @@ inline void COpenGLExtensionHandler::extGlBlendEquation(GLenum mode) ...@@ -2689,7 +2706,7 @@ inline void COpenGLExtensionHandler::extGlBlendEquation(GLenum mode)
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlEnableIndexed(GLenum target, GLuint index) inline void COpenGLExtensionHandler::irrGlEnableIndexed(GLenum target, GLuint index)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlEnableIndexedEXT) if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlEnableIndexedEXT)
...@@ -2701,7 +2718,7 @@ inline void COpenGLExtensionHandler::extGlEnableIndexed(GLenum target, GLuint in ...@@ -2701,7 +2718,7 @@ inline void COpenGLExtensionHandler::extGlEnableIndexed(GLenum target, GLuint in
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlDisableIndexed(GLenum target, GLuint index) inline void COpenGLExtensionHandler::irrGlDisableIndexed(GLenum target, GLuint index)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlDisableIndexedEXT) if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlDisableIndexedEXT)
...@@ -2713,7 +2730,7 @@ inline void COpenGLExtensionHandler::extGlDisableIndexed(GLenum target, GLuint i ...@@ -2713,7 +2730,7 @@ inline void COpenGLExtensionHandler::extGlDisableIndexed(GLenum target, GLuint i
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a) inline void COpenGLExtensionHandler::irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlColorMaskIndexedEXT) if (FeatureAvailable[IRR_EXT_draw_buffers2] && pGlColorMaskIndexedEXT)
...@@ -2725,7 +2742,7 @@ inline void COpenGLExtensionHandler::extGlColorMaskIndexed(GLuint buf, GLboolean ...@@ -2725,7 +2742,7 @@ inline void COpenGLExtensionHandler::extGlColorMaskIndexed(GLuint buf, GLboolean
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst) inline void COpenGLExtensionHandler::irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFunciARB) if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFunciARB)
...@@ -2741,7 +2758,7 @@ inline void COpenGLExtensionHandler::extGlBlendFuncIndexed(GLuint buf, GLenum sr ...@@ -2741,7 +2758,7 @@ inline void COpenGLExtensionHandler::extGlBlendFuncIndexed(GLuint buf, GLenum sr
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) inline void COpenGLExtensionHandler::irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFuncSeparateiARB) if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendFuncSeparateiARB)
...@@ -2757,7 +2774,7 @@ inline void COpenGLExtensionHandler::extGlBlendFuncSeparateIndexed(GLuint buf, G ...@@ -2757,7 +2774,7 @@ inline void COpenGLExtensionHandler::extGlBlendFuncSeparateIndexed(GLuint buf, G
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlBlendEquationIndexed(GLuint buf, GLenum mode) inline void COpenGLExtensionHandler::irrGlBlendEquationIndexed(GLuint buf, GLenum mode)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationiARB) if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationiARB)
...@@ -2773,7 +2790,7 @@ inline void COpenGLExtensionHandler::extGlBlendEquationIndexed(GLuint buf, GLenu ...@@ -2773,7 +2790,7 @@ inline void COpenGLExtensionHandler::extGlBlendEquationIndexed(GLuint buf, GLenu
#endif #endif
} }
inline void COpenGLExtensionHandler::extGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha) inline void COpenGLExtensionHandler::irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
{ {
#ifdef _IRR_OPENGL_USE_EXTPOINTER_ #ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationSeparateiARB) if (FeatureAvailable[IRR_ARB_draw_buffers_blend] && pGlBlendEquationSeparateiARB)
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "IVideoDriver.h" #include "IVideoDriver.h"
#include "os.h" #include "os.h"
#include "COpenGLDriver.h" #include "COpenGLDriver.h"
#include "COpenGLTexture.h"
#include "COpenGLCacheHandler.h" #include "COpenGLCacheHandler.h"
#include "COpenGLMaterialRenderer.h" #include "COpenGLMaterialRenderer.h"
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "IVideoDriver.h" #include "IVideoDriver.h"
#include "os.h" #include "os.h"
#include "COpenGLDriver.h" #include "COpenGLDriver.h"
#include "COpenGLTexture.h"
#include "COpenGLCacheHandler.h" #include "COpenGLCacheHandler.h"
#include "COpenGLMaterialRenderer.h" #include "COpenGLMaterialRenderer.h"
......
...@@ -110,7 +110,7 @@ COpenGLTexture::COpenGLTexture(const io::path& name, const core::dimension2d<u32 ...@@ -110,7 +110,7 @@ COpenGLTexture::COpenGLTexture(const io::path& name, const core::dimension2d<u32
#endif #endif
COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler();
const COpenGLTexture* prevTexture = cacheHandler->TextureCache[0]; const COpenGLTexture* prevTexture = cacheHandler->getTextureCache()[0];
DriverType = EDT_OPENGL; DriverType = EDT_OPENGL;
...@@ -141,7 +141,7 @@ COpenGLTexture::COpenGLTexture(const io::path& name, const core::dimension2d<u32 ...@@ -141,7 +141,7 @@ COpenGLTexture::COpenGLTexture(const io::path& name, const core::dimension2d<u32
glGenTextures(1, &TextureName); glGenTextures(1, &TextureName);
cacheHandler->TextureCache.set(0, this); cacheHandler->getTextureCache().set(0, this);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, FilteringType); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, FilteringType);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
...@@ -157,14 +157,14 @@ COpenGLTexture::COpenGLTexture(const io::path& name, const core::dimension2d<u32 ...@@ -157,14 +157,14 @@ COpenGLTexture::COpenGLTexture(const io::path& name, const core::dimension2d<u32
glTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, OriginalSize.Width, OriginalSize.Height, 0, PixelFormat, PixelType, 0); glTexImage2D(GL_TEXTURE_2D, 0, InternalFormat, OriginalSize.Width, OriginalSize.Height, 0, PixelFormat, PixelType, 0);
cacheHandler->TextureCache.set(0, prevTexture); cacheHandler->getTextureCache().set(0, prevTexture);
} }
//! destructor //! destructor
COpenGLTexture::~COpenGLTexture() COpenGLTexture::~COpenGLTexture()
{ {
Driver->getCacheHandler()->TextureCache.remove(this); Driver->getCacheHandler()->getTextureCache().remove(this);
if (TextureName) if (TextureName)
glDeleteTextures(1, &TextureName); glDeleteTextures(1, &TextureName);
...@@ -480,7 +480,7 @@ void COpenGLTexture::uploadTexture(bool newTexture, void* mipmapData, u32 level) ...@@ -480,7 +480,7 @@ void COpenGLTexture::uploadTexture(bool newTexture, void* mipmapData, u32 level)
} }
COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler();
const COpenGLTexture* prevTexture = cacheHandler->TextureCache[0]; const COpenGLTexture* prevTexture = cacheHandler->getTextureCache()[0];
// get correct opengl color data values // get correct opengl color data values
GLenum oldInternalFormat = InternalFormat; GLenum oldInternalFormat = InternalFormat;
...@@ -490,7 +490,7 @@ void COpenGLTexture::uploadTexture(bool newTexture, void* mipmapData, u32 level) ...@@ -490,7 +490,7 @@ void COpenGLTexture::uploadTexture(bool newTexture, void* mipmapData, u32 level)
if (!newTexture) if (!newTexture)
InternalFormat=oldInternalFormat; InternalFormat=oldInternalFormat;
cacheHandler->TextureCache.set(0, this); cacheHandler->getTextureCache().set(0, this);
if (Driver->testGLError()) if (Driver->testGLError())
os::Printer::log("Could not bind Texture", ELL_ERROR); os::Printer::log("Could not bind Texture", ELL_ERROR);
...@@ -604,7 +604,7 @@ void COpenGLTexture::uploadTexture(bool newTexture, void* mipmapData, u32 level) ...@@ -604,7 +604,7 @@ void COpenGLTexture::uploadTexture(bool newTexture, void* mipmapData, u32 level)
if (Driver->testGLError()) if (Driver->testGLError())
os::Printer::log("Could not glTexImage2D", ELL_ERROR); os::Printer::log("Could not glTexImage2D", ELL_ERROR);
cacheHandler->TextureCache.set(0, prevTexture); cacheHandler->getTextureCache().set(0, prevTexture);
} }
...@@ -615,9 +615,9 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel) ...@@ -615,9 +615,9 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel)
return 0; return 0;
COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler();
const COpenGLTexture* prevTexture = cacheHandler->TextureCache[0]; const COpenGLTexture* prevTexture = cacheHandler->getTextureCache()[0];
cacheHandler->TextureCache.set(0, this); cacheHandler->getTextureCache().set(0, this);
// store info about which image is locked // store info about which image is locked
IImage* image = (mipmapLevel==0)?Image:MipImage; IImage* image = (mipmapLevel==0)?Image:MipImage;
...@@ -663,7 +663,7 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel) ...@@ -663,7 +663,7 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel)
} }
if (!image) if (!image)
{ {
cacheHandler->TextureCache.set(0, prevTexture); cacheHandler->getTextureCache().set(0, prevTexture);
return 0; return 0;
} }
...@@ -673,7 +673,7 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel) ...@@ -673,7 +673,7 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel)
u8* pixels = static_cast<u8*>(image->lock()); u8* pixels = static_cast<u8*>(image->lock());
if (!pixels) if (!pixels)
{ {
cacheHandler->TextureCache.set(0, prevTexture); cacheHandler->getTextureCache().set(0, prevTexture);
return 0; return 0;
} }
...@@ -718,7 +718,7 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel) ...@@ -718,7 +718,7 @@ void* COpenGLTexture::lock(E_TEXTURE_LOCK_MODE mode, u32 mipmapLevel)
} }
} }
cacheHandler->TextureCache.set(0, prevTexture); cacheHandler->getTextureCache().set(0, prevTexture);
return image->lock(); return image->lock();
} }
...@@ -791,16 +791,16 @@ void COpenGLTexture::regenerateMipMapLevels(void* mipmapData) ...@@ -791,16 +791,16 @@ void COpenGLTexture::regenerateMipMapLevels(void* mipmapData)
} }
COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler();
const COpenGLTexture* prevTexture = cacheHandler->TextureCache[0]; const COpenGLTexture* prevTexture = cacheHandler->getTextureCache()[0];
cacheHandler->TextureCache.set(0, this); cacheHandler->getTextureCache().set(0, this);
// hardware moethods for generate mipmaps. // hardware moethods for generate mipmaps.
if (!mipmapData && AutomaticMipmapUpdate && !MipmapLegacyMode) if (!mipmapData && AutomaticMipmapUpdate && !MipmapLegacyMode)
{ {
Driver->irrGlGenerateMipmap(GL_TEXTURE_2D); Driver->irrGlGenerateMipmap(GL_TEXTURE_2D);
cacheHandler->TextureCache.set(0, prevTexture); cacheHandler->getTextureCache().set(0, prevTexture);
return; return;
} }
...@@ -857,7 +857,7 @@ void COpenGLTexture::regenerateMipMapLevels(void* mipmapData) ...@@ -857,7 +857,7 @@ void COpenGLTexture::regenerateMipMapLevels(void* mipmapData)
if (!mipmapData) if (!mipmapData)
delete [] target; delete [] target;
cacheHandler->TextureCache.set(0, prevTexture); cacheHandler->getTextureCache().set(0, prevTexture);
} }
COpenGLTexture::SStatesCache& COpenGLTexture::getStatesCache() const COpenGLTexture::SStatesCache& COpenGLTexture::getStatesCache() const
......
...@@ -1008,6 +1008,7 @@ ...@@ -1008,6 +1008,7 @@
<ClInclude Include="CGeometryCreator.h" /> <ClInclude Include="CGeometryCreator.h" />
<ClInclude Include="CMeshCache.h" /> <ClInclude Include="CMeshCache.h" />
<ClInclude Include="CMeshManipulator.h" /> <ClInclude Include="CMeshManipulator.h" />
<ClInclude Include="COGLCoreCacheHandler.h" />
<ClInclude Include="COGLCoreFeature.h" /> <ClInclude Include="COGLCoreFeature.h" />
<ClInclude Include="COGLCoreRenderTarget.h" /> <ClInclude Include="COGLCoreRenderTarget.h" />
<ClInclude Include="COpenGLCacheHandler.h" /> <ClInclude Include="COpenGLCacheHandler.h" />
......
...@@ -1312,6 +1312,9 @@ ...@@ -1312,6 +1312,9 @@
<ClInclude Include="COpenGLTexture.h"> <ClInclude Include="COpenGLTexture.h">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="COGLCoreCacheHandler.h">
<Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude>
<ClInclude Include="COGLCoreFeature.h"> <ClInclude Include="COGLCoreFeature.h">
<Filter>Irrlicht\video\OpenGL Core</Filter> <Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude> </ClInclude>
......
...@@ -1008,6 +1008,7 @@ ...@@ -1008,6 +1008,7 @@
<ClInclude Include="CGeometryCreator.h" /> <ClInclude Include="CGeometryCreator.h" />
<ClInclude Include="CMeshCache.h" /> <ClInclude Include="CMeshCache.h" />
<ClInclude Include="CMeshManipulator.h" /> <ClInclude Include="CMeshManipulator.h" />
<ClInclude Include="COGLCoreCacheHandler.h" />
<ClInclude Include="COGLCoreFeature.h" /> <ClInclude Include="COGLCoreFeature.h" />
<ClInclude Include="COGLCoreRenderTarget.h" /> <ClInclude Include="COGLCoreRenderTarget.h" />
<ClInclude Include="COpenGLCacheHandler.h" /> <ClInclude Include="COpenGLCacheHandler.h" />
......
...@@ -1312,6 +1312,9 @@ ...@@ -1312,6 +1312,9 @@
<ClInclude Include="COpenGLTexture.h"> <ClInclude Include="COpenGLTexture.h">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="COGLCoreCacheHandler.h">
<Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude>
<ClInclude Include="COGLCoreFeature.h"> <ClInclude Include="COGLCoreFeature.h">
<Filter>Irrlicht\video\OpenGL Core</Filter> <Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude> </ClInclude>
......
...@@ -1008,6 +1008,7 @@ ...@@ -1008,6 +1008,7 @@
<ClInclude Include="CGeometryCreator.h" /> <ClInclude Include="CGeometryCreator.h" />
<ClInclude Include="CMeshCache.h" /> <ClInclude Include="CMeshCache.h" />
<ClInclude Include="CMeshManipulator.h" /> <ClInclude Include="CMeshManipulator.h" />
<ClInclude Include="COGLCoreCacheHandler.h" />
<ClInclude Include="COGLCoreFeature.h" /> <ClInclude Include="COGLCoreFeature.h" />
<ClInclude Include="COGLCoreRenderTarget.h" /> <ClInclude Include="COGLCoreRenderTarget.h" />
<ClInclude Include="COpenGLCacheHandler.h" /> <ClInclude Include="COpenGLCacheHandler.h" />
......
...@@ -1312,6 +1312,9 @@ ...@@ -1312,6 +1312,9 @@
<ClInclude Include="COpenGLTexture.h"> <ClInclude Include="COpenGLTexture.h">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="COGLCoreCacheHandler.h">
<Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude>
<ClInclude Include="COGLCoreFeature.h"> <ClInclude Include="COGLCoreFeature.h">
<Filter>Irrlicht\video\OpenGL Core</Filter> <Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude> </ClInclude>
......
...@@ -1018,6 +1018,7 @@ ...@@ -1018,6 +1018,7 @@
<ClInclude Include="CGeometryCreator.h" /> <ClInclude Include="CGeometryCreator.h" />
<ClInclude Include="CMeshCache.h" /> <ClInclude Include="CMeshCache.h" />
<ClInclude Include="CMeshManipulator.h" /> <ClInclude Include="CMeshManipulator.h" />
<ClInclude Include="COGLCoreCacheHandler.h" />
<ClInclude Include="COGLCoreFeature.h" /> <ClInclude Include="COGLCoreFeature.h" />
<ClInclude Include="COGLCoreRenderTarget.h" /> <ClInclude Include="COGLCoreRenderTarget.h" />
<ClInclude Include="COpenGLCacheHandler.h" /> <ClInclude Include="COpenGLCacheHandler.h" />
......
...@@ -1312,6 +1312,9 @@ ...@@ -1312,6 +1312,9 @@
<ClInclude Include="COpenGLTexture.h"> <ClInclude Include="COpenGLTexture.h">
<Filter>Irrlicht\video\OpenGL</Filter> <Filter>Irrlicht\video\OpenGL</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="COGLCoreCacheHandler.h">
<Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude>
<ClInclude Include="COGLCoreFeature.h"> <ClInclude Include="COGLCoreFeature.h">
<Filter>Irrlicht\video\OpenGL Core</Filter> <Filter>Irrlicht\video\OpenGL Core</Filter>
</ClInclude> </ClInclude>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment