Split OpenGL extension stuff into new file which is inherited by the driver in order to keep backward compatibility. The handler is not automatically created and thus has to be manually updated sometimes. Many functions and pointers are still missing...
git-svn-id: http://svn.code.sf.net/p/irrlicht/code/trunk@689 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
parent
237b9a3c23
commit
d18bd7c5d4
File diff suppressed because it is too large
Load Diff
@ -8,6 +8,7 @@
|
||||
#include "IrrCompileConfig.h"
|
||||
#include "CNullDriver.h"
|
||||
#include "IMaterialRendererServices.h"
|
||||
#include "COpenGLExtensionHandler.h"
|
||||
|
||||
#ifdef _IRR_COMPILE_WITH_OPENGL_
|
||||
|
||||
@ -63,7 +64,7 @@ namespace video
|
||||
{
|
||||
class COpenGLTexture;
|
||||
|
||||
class COpenGLDriver : public CNullDriver, public IMaterialRendererServices
|
||||
class COpenGLDriver : public CNullDriver, public IMaterialRendererServices, public COpenGLExtensionHandler
|
||||
{
|
||||
public:
|
||||
|
||||
@ -108,7 +109,10 @@ namespace video
|
||||
void drawVertexPrimitiveList(const void* vertices, u32 vertexCount, const u16* indexList, u32 primitiveCount, E_VERTEX_TYPE vType, scene::E_PRIMITIVE_TYPE pType);
|
||||
|
||||
//! queries the features of the driver, returns true if feature is available
|
||||
bool queryFeature(E_VIDEO_DRIVER_FEATURE feature);
|
||||
bool queryFeature(E_VIDEO_DRIVER_FEATURE feature)
|
||||
{
|
||||
return COpenGLExtensionHandler::queryFeature(feature);
|
||||
}
|
||||
|
||||
//! Sets a material. All 3d drawing functions draw geometry now
|
||||
//! using this material.
|
||||
@ -217,54 +221,6 @@ namespace video
|
||||
//! Returns the transformation set by setTransform
|
||||
virtual const core::matrix4& getTransform(E_TRANSFORMATION_STATE state);
|
||||
|
||||
// public access to the (loaded) extensions.
|
||||
void extGlActiveTextureARB(GLenum texture);
|
||||
void extGlClientActiveTextureARB(GLenum texture);
|
||||
void extGlGenProgramsARB(GLsizei n, GLuint *programs);
|
||||
void extGlBindProgramARB(GLenum target, GLuint program);
|
||||
void extGlProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
|
||||
void extGlDeleteProgramsARB(GLsizei n, const GLuint *programs);
|
||||
void extGlProgramLocalParameter4fvARB(GLenum, GLuint, const GLfloat *);
|
||||
GLhandleARB extGlCreateShaderObjectARB(GLenum shaderType);
|
||||
void extGlShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings);
|
||||
void extGlCompileShaderARB(GLhandleARB shader);
|
||||
GLhandleARB extGlCreateProgramObjectARB(void);
|
||||
void extGlAttachObjectARB(GLhandleARB program, GLhandleARB shader);
|
||||
void extGlLinkProgramARB(GLhandleARB program);
|
||||
void extGlUseProgramObjectARB(GLhandleARB prog);
|
||||
void extGlDeleteObjectARB(GLhandleARB object);
|
||||
void extGlGetInfoLogARB(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
|
||||
void extGlGetObjectParameterivARB(GLhandleARB object, GLenum type, int *param);
|
||||
GLint extGlGetUniformLocationARB(GLhandleARB program, const char *name);
|
||||
void extGlUniform4fvARB(GLint location, GLsizei count, const GLfloat *v);
|
||||
|
||||
void extGlUniform1ivARB (GLint loc, GLsizei count, const GLint *v);
|
||||
void extGlUniform1fvARB (GLint loc, GLsizei count, const GLfloat *v);
|
||||
void extGlUniform2fvARB (GLint loc, GLsizei count, const GLfloat *v);
|
||||
void extGlUniform3fvARB (GLint loc, GLsizei count, const GLfloat *v);
|
||||
void extGlUniformMatrix2fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
|
||||
void extGlUniformMatrix3fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
|
||||
void extGlUniformMatrix4fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
|
||||
void extGlGetActiveUniformARB (GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
|
||||
void extGlPointParameterfARB (GLint loc, GLfloat f);
|
||||
void extGlPointParameterfvARB (GLint loc, const GLfloat *v);
|
||||
void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
|
||||
void extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
|
||||
void extGlCompressedTexImage2D(GLenum target, GLint level,
|
||||
GLenum internalformat, GLsizei width, GLsizei height,
|
||||
GLint border, GLsizei imageSize, const void* data);
|
||||
|
||||
void extGlBindFramebufferEXT (GLenum target, GLuint framebuffer);
|
||||
void extGlDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);
|
||||
void extGlGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);
|
||||
GLenum extGlCheckFramebufferStatusEXT (GLenum target);
|
||||
void extGlFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
|
||||
void extGlBindRenderbufferEXT (GLenum target, GLuint renderbuffer);
|
||||
void extGlDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);
|
||||
void extGlGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);
|
||||
void extGlRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
|
||||
void extGlFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
|
||||
|
||||
//! Can be called by an IMaterialRenderer to make its work easier.
|
||||
void setBasicRenderStates(const SMaterial& material, const SMaterial& lastmaterial,
|
||||
bool resetAllRenderstates);
|
||||
@ -330,7 +286,7 @@ namespace video
|
||||
private:
|
||||
|
||||
//! inits the parts of the open gl driver used on all platforms
|
||||
bool genericDriverInit(const core::dimension2d<s32>& screenSize);
|
||||
bool genericDriverInit(const core::dimension2d<s32>& screenSize, bool stencilBuffer);
|
||||
//! returns a device dependent texture from a software surface (IImage)
|
||||
virtual video::ITexture* createDeviceDependentTexture(IImage* surface, const char* name);
|
||||
|
||||
@ -338,7 +294,6 @@ namespace video
|
||||
void createGLMatrix(GLfloat gl_matrix[16], const core::matrix4& m);
|
||||
void createGLTextureMatrix(GLfloat gl_matrix[16], const core::matrix4& m);
|
||||
|
||||
|
||||
//! sets the needed renderstates
|
||||
void setRenderStates3DMode();
|
||||
|
||||
@ -348,14 +303,13 @@ namespace video
|
||||
// returns the current size of the screen or rendertarget
|
||||
core::dimension2d<s32> getCurrentRenderTargetSize();
|
||||
|
||||
void loadExtensions();
|
||||
void createMaterialRenderers();
|
||||
|
||||
core::stringw Name;
|
||||
core::matrix4 Matrices[ETS_COUNT];
|
||||
core::array<u8> ColorBuffer;
|
||||
|
||||
// enumeration for rendering modes such as 2d and 3d for minizing the switching of renderStates.
|
||||
//! enumeration for rendering modes such as 2d and 3d for minizing the switching of renderStates.
|
||||
enum E_RENDER_MODE
|
||||
{
|
||||
ERM_NONE = 0, // no render state has been set yet.
|
||||
@ -364,93 +318,18 @@ namespace video
|
||||
};
|
||||
|
||||
E_RENDER_MODE CurrentRenderMode;
|
||||
bool ResetRenderStates; // bool to make all renderstates be reseted if set.
|
||||
//! bool to make all renderstates reset if set to true.
|
||||
bool ResetRenderStates;
|
||||
bool Transformation3DChanged;
|
||||
bool StencilBuffer;
|
||||
bool AntiAlias;
|
||||
bool MultiTextureExtension;
|
||||
bool MultiSamplingExtension;
|
||||
bool AnisotropyExtension;
|
||||
bool ARBVertexProgramExtension; //GL_ARB_vertex_program
|
||||
bool ARBFragmentProgramExtension; //GL_ARB_fragment_program
|
||||
bool ARBShadingLanguage100Extension;
|
||||
bool SeparateStencilExtension;
|
||||
bool GenerateMipmapExtension;
|
||||
bool TextureCompressionExtension;
|
||||
bool TextureNPOTExtension;
|
||||
bool FramebufferObjectExtension;
|
||||
bool EXTPackedDepthStencil;
|
||||
bool EXTSeparateSpecularColor;
|
||||
|
||||
SMaterial Material, LastMaterial;
|
||||
COpenGLTexture* RenderTargetTexture;
|
||||
ITexture* CurrentTexture[MATERIAL_MAX_TEXTURES];
|
||||
s32 LastSetLight;
|
||||
f32 MaxAnisotropy;
|
||||
|
||||
GLint MaxTextureUnits;
|
||||
GLint MaxLights;
|
||||
GLint MaxIndices;
|
||||
|
||||
core::dimension2d<s32> CurrentRendertargetSize;
|
||||
|
||||
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
|
||||
PFNGLACTIVETEXTUREARBPROC pGlActiveTextureARB;
|
||||
PFNGLCLIENTACTIVETEXTUREARBPROC pGlClientActiveTextureARB;
|
||||
PFNGLGENPROGRAMSARBPROC pGlGenProgramsARB;
|
||||
PFNGLBINDPROGRAMARBPROC pGlBindProgramARB;
|
||||
PFNGLPROGRAMSTRINGARBPROC pGlProgramStringARB;
|
||||
PFNGLDELETEPROGRAMSNVPROC pGlDeleteProgramsARB;
|
||||
PFNGLPROGRAMLOCALPARAMETER4FVARBPROC pGlProgramLocalParameter4fvARB;
|
||||
PFNGLCREATESHADEROBJECTARBPROC pGlCreateShaderObjectARB;
|
||||
PFNGLSHADERSOURCEARBPROC pGlShaderSourceARB;
|
||||
PFNGLCOMPILESHADERARBPROC pGlCompileShaderARB;
|
||||
PFNGLCREATEPROGRAMOBJECTARBPROC pGlCreateProgramObjectARB;
|
||||
PFNGLATTACHOBJECTARBPROC pGlAttachObjectARB;
|
||||
PFNGLLINKPROGRAMARBPROC pGlLinkProgramARB;
|
||||
PFNGLUSEPROGRAMOBJECTARBPROC pGlUseProgramObjectARB;
|
||||
PFNGLDELETEOBJECTARBPROC pGlDeleteObjectARB;
|
||||
PFNGLGETINFOLOGARBPROC pGlGetInfoLogARB;
|
||||
PFNGLGETOBJECTPARAMETERIVARBPROC pGlGetObjectParameterivARB;
|
||||
PFNGLGETUNIFORMLOCATIONARBPROC pGlGetUniformLocationARB;
|
||||
PFNGLUNIFORM1IVARBPROC pGlUniform1ivARB;
|
||||
PFNGLUNIFORM1FVARBPROC pGlUniform1fvARB;
|
||||
PFNGLUNIFORM2FVARBPROC pGlUniform2fvARB;
|
||||
PFNGLUNIFORM3FVARBPROC pGlUniform3fvARB;
|
||||
PFNGLUNIFORM4FVARBPROC pGlUniform4fvARB;
|
||||
PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;
|
||||
PFNGLUNIFORMMATRIX3FVARBPROC pGlUniformMatrix3fvARB;
|
||||
PFNGLUNIFORMMATRIX4FVARBPROC pGlUniformMatrix4fvARB;
|
||||
PFNGLGETACTIVEUNIFORMARBPROC pGlGetActiveUniformARB;
|
||||
PFNGLPOINTPARAMETERFARBPROC pGlPointParameterfARB;
|
||||
PFNGLPOINTPARAMETERFVARBPROC pGlPointParameterfvARB;
|
||||
#ifdef GL_ATI_separate_stencil
|
||||
PFNGLSTENCILFUNCSEPARATEPROC pGlStencilFuncSeparate;
|
||||
PFNGLSTENCILOPSEPARATEPROC pGlStencilOpSeparate;
|
||||
PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
|
||||
PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
|
||||
#endif
|
||||
#ifdef PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
|
||||
#endif // PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
#ifdef _IRR_WINDOWS_API_
|
||||
typedef BOOL (APIENTRY *PFNWGLSWAPINTERVALFARPROC)(int);
|
||||
PFNWGLSWAPINTERVALFARPROC wglSwapIntervalEXT;
|
||||
#elif defined(_IRR_LINUX_PLATFORM_) && defined(GLX_SGI_swap_control)
|
||||
PFNGLXSWAPINTERVALSGIPROC glxSwapIntervalSGI;
|
||||
#endif
|
||||
PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
|
||||
PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
|
||||
PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
|
||||
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC pGlCheckFramebufferStatusEXT;
|
||||
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC pGlFramebufferTexture2DEXT;
|
||||
PFNGLBINDRENDERBUFFEREXTPROC pGlBindRenderbufferEXT;
|
||||
PFNGLDELETERENDERBUFFERSEXTPROC pGlDeleteRenderbuffersEXT;
|
||||
PFNGLGENRENDERBUFFERSEXTPROC pGlGenRenderbuffersEXT;
|
||||
PFNGLRENDERBUFFERSTORAGEEXTPROC pGlRenderbufferStorageEXT;
|
||||
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC pGlFramebufferRenderbufferEXT;
|
||||
#endif
|
||||
|
||||
#ifdef _IRR_WINDOWS_API_
|
||||
HDC HDc; // Private GDI Device Context
|
||||
HWND Window;
|
||||
|
905
source/Irrlicht/COpenGLExtensionHandler.cpp
Normal file
905
source/Irrlicht/COpenGLExtensionHandler.cpp
Normal file
@ -0,0 +1,905 @@
|
||||
#include "COpenGLExtensionHandler.h"
|
||||
#include "os.h"
|
||||
#include "irrString.h"
|
||||
#include "SMaterial.h" // for MATERIAL_MAX_TEXTURES
|
||||
|
||||
#include "IrrCompileConfig.h"
|
||||
|
||||
#ifdef _IRR_COMPILE_WITH_OPENGL_
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
COpenGLExtensionHandler::COpenGLExtensionHandler() :
|
||||
StencilBuffer(false),
|
||||
MultiTextureExtension(false), MultiSamplingExtension(false), AnisotropyExtension(false),
|
||||
SeparateStencilExtension(false),
|
||||
TextureCompressionExtension(false),
|
||||
PackedDepthStencilExtension(false),
|
||||
MaxTextureUnits(1), MaxLights(1), MaxIndices(1),
|
||||
MaxAnisotropy(1),
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
pGlActiveTextureARB(0), pGlClientActiveTextureARB(0),
|
||||
pGlGenProgramsARB(0), pGlBindProgramARB(0), pGlProgramStringARB(0),
|
||||
pGlDeleteProgramsARB(0), pGlProgramLocalParameter4fvARB(0),
|
||||
pGlCreateShaderObjectARB(0), pGlShaderSourceARB(0),
|
||||
pGlCompileShaderARB(0), pGlCreateProgramObjectARB(0), pGlAttachObjectARB(0),
|
||||
pGlLinkProgramARB(0), pGlUseProgramObjectARB(0), pGlDeleteObjectARB(0),
|
||||
pGlGetObjectParameterivARB(0), pGlGetUniformLocationARB(0),
|
||||
pGlUniform1ivARB(0), pGlUniform1fvARB(0), pGlUniform2fvARB(0), pGlUniform3fvARB(0), pGlUniform4fvARB(0), pGlUniformMatrix2fvARB(0),
|
||||
pGlUniformMatrix3fvARB(0), pGlUniformMatrix4fvARB(0), pGlGetActiveUniformARB(0), pGlPointParameterfARB(0), pGlPointParameterfvARB(0),
|
||||
pGlStencilFuncSeparate(0), pGlStencilOpSeparate(0),
|
||||
pGlStencilFuncSeparateATI(0), pGlStencilOpSeparateATI(0),
|
||||
#ifdef PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
pGlCompressedTexImage2D(0),
|
||||
#endif
|
||||
#ifdef _IRR_USE_WINDOWS_DEVICE_
|
||||
wglSwapIntervalEXT(0),
|
||||
#elif defined(GLX_SGI_swap_control)
|
||||
glxSwapIntervalSGI(0),
|
||||
#endif
|
||||
pGlBindFramebufferEXT(0), pGlDeleteFramebuffersEXT(0), pGlGenFramebuffersEXT(0),
|
||||
pGlCheckFramebufferStatusEXT(0), pGlFramebufferTexture2DEXT(0),
|
||||
pGlBindRenderbufferEXT(0), pGlDeleteRenderbuffersEXT(0), pGlGenRenderbuffersEXT(0),
|
||||
pGlRenderbufferStorageEXT(0), pGlFramebufferRenderbufferEXT(0)
|
||||
#endif // _IRR_OPENGL_USE_EXTPOINTER_
|
||||
{
|
||||
for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i)
|
||||
FeatureAvailable[i]=false;
|
||||
}
|
||||
|
||||
|
||||
void COpenGLExtensionHandler::dump() const
|
||||
{
|
||||
for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i)
|
||||
os::Printer::log(OpenGLFeatureStrings[i], FeatureAvailable[i]?" true":" false");
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
|
||||
{
|
||||
if (atof((c8*)glGetString(GL_VERSION)) >= 1.2)
|
||||
os::Printer::log("OpenGL driver version is 1.2 or better.", ELL_INFORMATION);
|
||||
else
|
||||
os::Printer::log("OpenGL driver version is not 1.2 or better.", ELL_WARNING);
|
||||
|
||||
const GLubyte* t = glGetString(GL_EXTENSIONS);
|
||||
// os::Printer::log((const c8*)t, ELL_INFORMATION);
|
||||
#ifdef GLU_VERSION_1_3
|
||||
const GLubyte* gluVersion = gluGetString(GLU_VERSION);
|
||||
|
||||
if (gluVersion[0]>1 || gluVersion[3]>2)
|
||||
{
|
||||
for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i)
|
||||
FeatureAvailable[i] = gluCheckExtension((const GLubyte*)OpenGLFeatureStrings[i], t);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
s32 len = (s32)strlen((const char*)t);
|
||||
c8 *str = new c8[len+1];
|
||||
c8* p = str;
|
||||
|
||||
for (s32 i=0; i<len; ++i)
|
||||
{
|
||||
str[i] = (char)t[i];
|
||||
|
||||
if (str[i] == ' ')
|
||||
{
|
||||
str[i] = 0;
|
||||
for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i)
|
||||
if (strstr(p, OpenGLFeatureStrings[i]))
|
||||
FeatureAvailable[i] = true;
|
||||
|
||||
p = p + strlen(p) + 1;
|
||||
}
|
||||
}
|
||||
|
||||
delete [] str;
|
||||
}
|
||||
|
||||
MultiTextureExtension = FeatureAvailable[IRR_ARB_multitexture];
|
||||
MultiSamplingExtension = FeatureAvailable[IRR_ARB_multisample];
|
||||
AnisotropyExtension = FeatureAvailable[IRR_EXT_texture_filter_anisotropic];
|
||||
SeparateStencilExtension = FeatureAvailable[IRR_ATI_separate_stencil];
|
||||
TextureCompressionExtension = FeatureAvailable[IRR_ARB_texture_compression];
|
||||
PackedDepthStencilExtension = FeatureAvailable[IRR_EXT_packed_depth_stencil];
|
||||
SeparateSpecularColorExtension = FeatureAvailable[IRR_EXT_separate_specular_color];
|
||||
StencilBuffer=stencilBuffer;
|
||||
|
||||
#ifdef _IRR_WINDOWS_API_
|
||||
// get multitexturing function pointers
|
||||
pGlActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress("glActiveTextureARB");
|
||||
pGlClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) wglGetProcAddress("glClientActiveTextureARB");
|
||||
|
||||
// get fragment and vertex program function pointers
|
||||
pGlGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) wglGetProcAddress("glGenProgramsARB");
|
||||
pGlBindProgramARB = (PFNGLBINDPROGRAMARBPROC) wglGetProcAddress("glBindProgramARB");
|
||||
pGlProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) wglGetProcAddress("glProgramStringARB");
|
||||
pGlDeleteProgramsARB = (PFNGLDELETEPROGRAMSNVPROC) wglGetProcAddress("glDeleteProgramsARB");
|
||||
pGlProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) wglGetProcAddress("glProgramLocalParameter4fvARB");
|
||||
pGlCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) wglGetProcAddress("glCreateShaderObjectARB");
|
||||
pGlShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) wglGetProcAddress("glShaderSourceARB");
|
||||
pGlCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) wglGetProcAddress("glCompileShaderARB");
|
||||
pGlCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) wglGetProcAddress("glCreateProgramObjectARB");
|
||||
pGlAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) wglGetProcAddress("glAttachObjectARB");
|
||||
pGlLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) wglGetProcAddress("glLinkProgramARB");
|
||||
pGlUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) wglGetProcAddress("glUseProgramObjectARB");
|
||||
pGlDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) wglGetProcAddress("glDeleteObjectARB");
|
||||
pGlGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) wglGetProcAddress("glGetInfoLogARB");
|
||||
pGlGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) wglGetProcAddress("glGetObjectParameterivARB");
|
||||
pGlGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) wglGetProcAddress("glGetUniformLocationARB");
|
||||
pGlUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) wglGetProcAddress("glUniform4fvARB");
|
||||
pGlUniform1ivARB = (PFNGLUNIFORM1IVARBPROC) wglGetProcAddress("glUniform1ivARB");
|
||||
pGlUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) wglGetProcAddress("glUniform1fvARB");
|
||||
pGlUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) wglGetProcAddress("glUniform2fvARB");
|
||||
pGlUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) wglGetProcAddress("glUniform3fvARB");
|
||||
pGlUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) wglGetProcAddress("glUniformMatrix2fvARB");
|
||||
pGlUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) wglGetProcAddress("glUniformMatrix3fvARB");
|
||||
pGlUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) wglGetProcAddress("glUniformMatrix4fvARB");
|
||||
pGlGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) wglGetProcAddress("glGetActiveUniformARB");
|
||||
|
||||
// get point parameter extension
|
||||
pGlPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC) wglGetProcAddress("glPointParameterfARB");
|
||||
pGlPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC) wglGetProcAddress("glPointParameterfvARB");
|
||||
|
||||
// get stencil extension
|
||||
pGlStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC) wglGetProcAddress("glStencilFuncSeparate");
|
||||
pGlStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC) wglGetProcAddress("glStencilOpSeparate");
|
||||
pGlStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC) wglGetProcAddress("glStencilFuncSeparateATI");
|
||||
pGlStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC) wglGetProcAddress("glStencilOpSeparateATI");
|
||||
|
||||
// compressed textures
|
||||
#ifdef PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
pGlCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) wglGetProcAddress("glCompressedTexImage2D");
|
||||
#endif
|
||||
|
||||
// FrameBufferObjects
|
||||
pGlBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) wglGetProcAddress("glBindFramebufferEXT");
|
||||
pGlDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) wglGetProcAddress("glDeleteFramebuffersEXT");
|
||||
pGlGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) wglGetProcAddress("glGenFramebuffersEXT");
|
||||
pGlCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) wglGetProcAddress("glCheckFramebufferStatusEXT");
|
||||
pGlFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) wglGetProcAddress("glFramebufferTexture2DEXT");
|
||||
pGlBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) wglGetProcAddress("glBindRenderbufferEXT");
|
||||
pGlDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) wglGetProcAddress("glDeleteRenderbuffersEXT");
|
||||
pGlGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) wglGetProcAddress("glGenRenderbuffersEXT");
|
||||
pGlRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) wglGetProcAddress("glRenderbufferStorageEXT");
|
||||
pGlFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) wglGetProcAddress("glFramebufferRenderbufferEXT");
|
||||
|
||||
// vsync extension
|
||||
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALFARPROC)wglGetProcAddress( "wglSwapIntervalEXT" );
|
||||
|
||||
#elif defined(_IRR_USE_LINUX_DEVICE_) || defined (_IRR_USE_SDL_DEVICE_)
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
|
||||
#ifdef _IRR_USE_SDL_DEVICE_
|
||||
#define IRR_OGL_LOAD_EXTENSION(x) SDL_GL_GetProcAddress(reinterpret_cast<const char*>(x))
|
||||
#else
|
||||
// Accessing the correct function is quite complex
|
||||
// All libraries should support the ARB version, however
|
||||
// since GLX 1.4 the non-ARB version is the official one
|
||||
// So we have to check the runtime environment and
|
||||
// choose the proper symbol
|
||||
// In case you still have problems please enable the
|
||||
// next line by uncommenting it
|
||||
// #define _IRR_GETPROCADDRESS_WORKAROUND_
|
||||
|
||||
#ifndef _IRR_GETPROCADDRESS_WORKAROUND_
|
||||
__GLXextFuncPtr (*IRR_OGL_LOAD_EXTENSION)(const GLubyte*)=0;
|
||||
#ifdef GLX_VERSION_1_4
|
||||
int major,minor;
|
||||
glXQueryVersion(glXGetCurrentDisplay(), &major, &minor);
|
||||
if ((major>1) || (minor>3))
|
||||
IRR_OGL_LOAD_EXTENSION=glXGetProcAddress;
|
||||
else
|
||||
#endif
|
||||
IRR_OGL_LOAD_EXTENSION=glXGetProcAddressARB;
|
||||
#else
|
||||
#define IRR_OGL_LOAD_EXTENSION glXGetProcAddressARB
|
||||
#endif
|
||||
#endif
|
||||
|
||||
pGlActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glActiveTextureARB"));
|
||||
|
||||
pGlClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glClientActiveTextureARB"));
|
||||
|
||||
// get fragment and vertex program function pointers
|
||||
pGlGenProgramsARB = (PFNGLGENPROGRAMSARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGenProgramsARB"));
|
||||
|
||||
pGlBindProgramARB = (PFNGLBINDPROGRAMARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glBindProgramARB"));
|
||||
|
||||
pGlProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glProgramStringARB"));
|
||||
|
||||
pGlDeleteProgramsARB = (PFNGLDELETEPROGRAMSNVPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glDeleteProgramsARB"));
|
||||
|
||||
pGlProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glProgramLocalParameter4fvARB"));
|
||||
|
||||
pGlCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glCreateShaderObjectARB"));
|
||||
|
||||
pGlShaderSourceARB = (PFNGLSHADERSOURCEARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glShaderSourceARB"));
|
||||
|
||||
pGlCompileShaderARB = (PFNGLCOMPILESHADERARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glCompileShaderARB"));
|
||||
|
||||
pGlCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glCreateProgramObjectARB"));
|
||||
|
||||
pGlAttachObjectARB = (PFNGLATTACHOBJECTARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glAttachObjectARB"));
|
||||
|
||||
pGlLinkProgramARB = (PFNGLLINKPROGRAMARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glLinkProgramARB"));
|
||||
|
||||
pGlUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUseProgramObjectARB"));
|
||||
|
||||
pGlDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glDeleteObjectARB"));
|
||||
|
||||
pGlGetInfoLogARB = (PFNGLGETINFOLOGARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGetInfoLogARB"));
|
||||
|
||||
pGlGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGetObjectParameterivARB"));
|
||||
|
||||
pGlGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGetUniformLocationARB"));
|
||||
|
||||
pGlUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniform4fvARB"));
|
||||
|
||||
pGlUniform1ivARB = (PFNGLUNIFORM1IVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniform1ivARB"));
|
||||
|
||||
pGlUniform1fvARB = (PFNGLUNIFORM1FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniform1fvARB"));
|
||||
|
||||
pGlUniform2fvARB = (PFNGLUNIFORM2FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniform2fvARB"));
|
||||
|
||||
pGlUniform3fvARB = (PFNGLUNIFORM3FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniform3fvARB"));
|
||||
|
||||
pGlUniform4fvARB = (PFNGLUNIFORM4FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniform4fvARB"));
|
||||
|
||||
pGlUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniformMatrix2fvARB"));
|
||||
|
||||
pGlUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniformMatrix3fvARB"));
|
||||
|
||||
pGlUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glUniformMatrix4fvARB"));
|
||||
|
||||
pGlGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGetActiveUniformARB"));
|
||||
|
||||
// get point parameter extension
|
||||
pGlPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glPointParameterfARB"));
|
||||
pGlPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glPointParameterfvARB"));
|
||||
|
||||
// get stencil extension
|
||||
pGlStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glStencilFuncSeparate"));
|
||||
pGlStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glStencilOpSeparate"));
|
||||
pGlStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glStencilFuncSeparateATI"));
|
||||
pGlStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glStencilOpSeparateATI"));
|
||||
|
||||
// compressed textures
|
||||
#ifdef PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
pGlCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glCompressedTexImage2D"));
|
||||
#endif
|
||||
|
||||
#if defined(GLX_SGI_swap_control) && !defined(_IRR_USE_SDL_DEVICE_)
|
||||
// get vsync extension
|
||||
glxSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glXSwapIntervalSGI"));
|
||||
#endif
|
||||
|
||||
// FrameBufferObjects
|
||||
pGlBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glBindFramebufferEXT"));
|
||||
|
||||
pGlDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glDeleteFramebuffersEXT"));
|
||||
|
||||
pGlGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGenFramebuffersEXT"));
|
||||
|
||||
pGlCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glCheckFramebufferStatusEXT"));
|
||||
|
||||
pGlFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glFramebufferTexture2DEXT"));
|
||||
|
||||
pGlBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glBindRenderbufferEXT"));
|
||||
|
||||
pGlDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glDeleteRenderbuffersEXT"));
|
||||
|
||||
pGlGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGenRenderbuffersEXT"));
|
||||
|
||||
pGlRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glRenderbufferStorageEXT"));
|
||||
|
||||
pGlFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)
|
||||
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glFramebufferRenderbufferEXT"));
|
||||
|
||||
#endif // _IRR_OPENGL_USE_EXTPOINTER_
|
||||
#endif // _IRR_WINDOWS_API_
|
||||
|
||||
// set some properties
|
||||
glGetIntegerv(GL_MAX_TEXTURE_UNITS, &MaxTextureUnits);
|
||||
glGetIntegerv(GL_MAX_LIGHTS, &MaxLights);
|
||||
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &MaxAnisotropy);
|
||||
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (!pGlActiveTextureARB || !pGlClientActiveTextureARB)
|
||||
{
|
||||
MultiTextureExtension = false;
|
||||
// ExtensionHandler.MultiTextureExtension = false;
|
||||
os::Printer::log("Failed to load OpenGL's multitexture extension, proceeding without.", ELL_WARNING);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (MaxTextureUnits < 2)
|
||||
{
|
||||
MultiTextureExtension = false;
|
||||
// ExtensionHandler.MultiTextureExtension = false;
|
||||
os::Printer::log("Warning: OpenGL device only has one texture unit. Disabling multitexturing.", ELL_WARNING);
|
||||
}
|
||||
MaxTextureUnits = core::min_((u32)MaxTextureUnits,MATERIAL_MAX_TEXTURES);
|
||||
glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &MaxIndices);
|
||||
|
||||
}
|
||||
|
||||
bool COpenGLExtensionHandler::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const
|
||||
{
|
||||
switch (feature)
|
||||
{
|
||||
case EVDF_RENDER_TO_TARGET:
|
||||
return true;
|
||||
case EVDF_MULTITEXTURE:
|
||||
return MultiTextureExtension;
|
||||
case EVDF_BILINEAR_FILTER:
|
||||
return true;
|
||||
case EVDF_MIP_MAP:
|
||||
return true;
|
||||
case EVDF_MIP_MAP_AUTO_UPDATE:
|
||||
return FeatureAvailable[IRR_SGIS_generate_mipmap];
|
||||
case EVDF_STENCIL_BUFFER:
|
||||
return StencilBuffer;
|
||||
case EVDF_ARB_VERTEX_PROGRAM_1:
|
||||
return FeatureAvailable[IRR_ARB_vertex_program];
|
||||
case EVDF_ARB_FRAGMENT_PROGRAM_1:
|
||||
return FeatureAvailable[IRR_ARB_fragment_program];
|
||||
case EVDF_ARB_GLSL:
|
||||
return FeatureAvailable[IRR_ARB_shading_language_100];
|
||||
case EVDF_TEXTURE_NPOT:
|
||||
return FeatureAvailable[IRR_ARB_texture_non_power_of_two];
|
||||
case EVDF_FRAMEBUFFER_OBJECT:
|
||||
return FeatureAvailable[IRR_EXT_framebuffer_object];
|
||||
default:
|
||||
return false;
|
||||
};
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlActiveTextureARB(GLenum texture)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (MultiTextureExtension && pGlActiveTextureARB)
|
||||
// if (ExtensionHandler.MultiTextureExtension && pGlActiveTextureARB)
|
||||
pGlActiveTextureARB(texture);
|
||||
#else
|
||||
if (MultiTextureExtension) glActiveTextureARB(texture);
|
||||
// if (ExtensionHandler.MultiTextureExtension) glActiveTextureARB(texture);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlClientActiveTextureARB(GLenum texture)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (MultiTextureExtension && pGlClientActiveTextureARB)
|
||||
// if (ExtensionHandler.MultiTextureExtension && pGlClientActiveTextureARB)
|
||||
pGlClientActiveTextureARB(texture);
|
||||
#else
|
||||
if (MultiTextureExtension) glClientActiveTextureARB(texture);
|
||||
// if (ExtensionHandler.MultiTextureExtension) glClientActiveTextureARB(texture);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlGenProgramsARB(GLsizei n, GLuint *programs)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlGenProgramsARB)
|
||||
pGlGenProgramsARB(n, programs);
|
||||
#elif defined(GL_ARB_vertex_program)
|
||||
glGenProgramsARB(n,programs);
|
||||
#else
|
||||
os::Printer::log("glGenProgramsARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlBindProgramARB(GLenum target, GLuint program)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlBindProgramARB)
|
||||
pGlBindProgramARB(target, program);
|
||||
#elif defined(GL_ARB_vertex_program)
|
||||
glBindProgramARB(target, program);
|
||||
#else
|
||||
os::Printer::log("glBindProgramARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlProgramStringARB)
|
||||
pGlProgramStringARB(target, format, len, string);
|
||||
#elif defined(GL_ARB_vertex_program)
|
||||
glProgramStringARB(target,format,len,string);
|
||||
#else
|
||||
os::Printer::log("glProgramStringARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlDeleteProgramsARB(GLsizei n, const GLuint *programs)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlDeleteProgramsARB)
|
||||
pGlDeleteProgramsARB(n, programs);
|
||||
#elif defined(GL_ARB_vertex_program)
|
||||
glDeleteProgramsARB(n,programs);
|
||||
#else
|
||||
os::Printer::log("glDeleteProgramsARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlProgramLocalParameter4fvARB(GLenum n, GLuint i, const GLfloat * f)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlProgramLocalParameter4fvARB)
|
||||
pGlProgramLocalParameter4fvARB(n,i,f);
|
||||
#elif defined(GL_ARB_vertex_program)
|
||||
glProgramLocalParameter4fvARB(n,i,f);
|
||||
#else
|
||||
os::Printer::log("glProgramLocalParameter4fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
GLhandleARB COpenGLExtensionHandler::extGlCreateShaderObjectARB(GLenum shaderType)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlCreateShaderObjectARB)
|
||||
return pGlCreateShaderObjectARB(shaderType);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
return glCreateShaderObjectARB(shaderType);
|
||||
#else
|
||||
os::Printer::log("glCreateShaderObjectARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlShaderSourceARB)
|
||||
pGlShaderSourceARB(shader, numOfStrings, strings, lenOfStrings);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glShaderSourceARB(shader, numOfStrings, strings, (GLint *)lenOfStrings);
|
||||
#else
|
||||
os::Printer::log("glShaderSourceARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlCompileShaderARB(GLhandleARB shader)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlCompileShaderARB)
|
||||
pGlCompileShaderARB(shader);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glCompileShaderARB(shader);
|
||||
#else
|
||||
os::Printer::log("glCompileShaderARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
GLhandleARB COpenGLExtensionHandler::extGlCreateProgramObjectARB(void)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlCreateProgramObjectARB)
|
||||
return pGlCreateProgramObjectARB();
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
return glCreateProgramObjectARB();
|
||||
#else
|
||||
os::Printer::log("glCreateProgramObjectARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlAttachObjectARB(GLhandleARB program, GLhandleARB shader)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlAttachObjectARB)
|
||||
pGlAttachObjectARB(program, shader);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glAttachObjectARB(program, shader);
|
||||
#else
|
||||
os::Printer::log("glAttachObjectARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlLinkProgramARB(GLhandleARB program)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlLinkProgramARB)
|
||||
pGlLinkProgramARB(program);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glLinkProgramARB(program);
|
||||
#else
|
||||
os::Printer::log("glLinkProgramARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUseProgramObjectARB(GLhandleARB prog)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUseProgramObjectARB)
|
||||
pGlUseProgramObjectARB(prog);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUseProgramObjectARB(prog);
|
||||
#else
|
||||
os::Printer::log("glUseProgramObjectARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlDeleteObjectARB(GLhandleARB object)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlDeleteObjectARB)
|
||||
pGlDeleteObjectARB(object);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glDeleteObjectARB(object);
|
||||
#else
|
||||
os::Printer::log("gldeleteObjectARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlGetInfoLogARB(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlGetInfoLogARB)
|
||||
pGlGetInfoLogARB(object, maxLength, length, infoLog);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glGetInfoLogARB(object, maxLength, length, infoLog);
|
||||
#else
|
||||
os::Printer::log("glGetInfoLogARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlGetObjectParameterivARB(GLhandleARB object, GLenum type, int *param)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlGetObjectParameterivARB)
|
||||
pGlGetObjectParameterivARB(object, type, param);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glGetObjectParameterivARB(object, type, (GLint *)param);
|
||||
#else
|
||||
os::Printer::log("glGetObjectParameterivARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
GLint COpenGLExtensionHandler::extGlGetUniformLocationARB(GLhandleARB program, const char *name)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlGetUniformLocationARB)
|
||||
return pGlGetUniformLocationARB(program, name);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
return glGetUniformLocationARB(program, name);
|
||||
#else
|
||||
os::Printer::log("glGetUniformLocationARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniform4fvARB(GLint location, GLsizei count, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniform4fvARB)
|
||||
pGlUniform4fvARB(location, count, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniform4fvARB(location, count, v);
|
||||
#else
|
||||
os::Printer::log("glUniform4fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniform1ivARB (GLint loc, GLsizei count, const GLint *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniform1ivARB)
|
||||
pGlUniform1ivARB(loc, count, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniform1ivARB(loc, count, v);
|
||||
#else
|
||||
os::Printer::log("glUniform1ivARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniform1fvARB (GLint loc, GLsizei count, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniform1fvARB)
|
||||
pGlUniform1fvARB(loc, count, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniform1fvARB(loc, count, v);
|
||||
#else
|
||||
os::Printer::log("glUniform1fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniform2fvARB (GLint loc, GLsizei count, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniform2fvARB)
|
||||
pGlUniform2fvARB(loc, count, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniform2fvARB(loc, count, v);
|
||||
#else
|
||||
os::Printer::log("glUniform2fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniform3fvARB (GLint loc, GLsizei count, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniform3fvARB)
|
||||
pGlUniform3fvARB(loc, count, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniform3fvARB(loc, count, v);
|
||||
#else
|
||||
os::Printer::log("glUniform3fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniformMatrix2fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniformMatrix2fvARB)
|
||||
pGlUniformMatrix2fvARB(loc, count, transpose, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniformMatrix2fvARB(loc, count, transpose, v);
|
||||
#else
|
||||
os::Printer::log("glUniformMatrix2fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniformMatrix3fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniformMatrix3fvARB)
|
||||
pGlUniformMatrix3fvARB(loc, count, transpose, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniformMatrix3fvARB(loc, count, transpose, v);
|
||||
#else
|
||||
os::Printer::log("glUniformMatrix3fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlUniformMatrix4fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlUniformMatrix4fvARB)
|
||||
pGlUniformMatrix4fvARB(loc, count, transpose, v);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glUniformMatrix4fvARB(loc, count, transpose, v);
|
||||
#else
|
||||
os::Printer::log("glUniformMatrix4fvARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlGetActiveUniformARB (GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlGetActiveUniformARB)
|
||||
pGlGetActiveUniformARB(program, index, maxlength, length, size, type, name);
|
||||
#elif defined(GL_ARB_shader_objects)
|
||||
glGetActiveUniformARB(program, index, maxlength, length, size, type, name);
|
||||
#else
|
||||
os::Printer::log("glGetActiveUniformARB not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlPointParameterfARB (GLint loc, GLfloat f)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlPointParameterfARB)
|
||||
pGlPointParameterfARB(loc, f);
|
||||
#else
|
||||
glPointParameterfARB(loc, f);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlPointParameterfvARB (GLint loc, const GLfloat *v)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlPointParameterfvARB)
|
||||
pGlPointParameterfvARB(loc, v);
|
||||
#else
|
||||
glPointParameterfvARB(loc, v);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlStencilFuncSeparate)
|
||||
pGlStencilFuncSeparate(frontfunc, backfunc, ref, mask);
|
||||
else if (pGlStencilFuncSeparateATI)
|
||||
pGlStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
|
||||
#elif defined(GL_VERSION_2_0)
|
||||
glStencilFuncSeparate(frontfunc, backfunc, ref, mask);
|
||||
#elif defined(GL_ATI_separate_stencil)
|
||||
glStencilFuncSeparateATI(frontfunc, backfunc, ref, mask);
|
||||
#else
|
||||
os::Printer::log("glStencilFuncSeparate not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlStencilOpSeparate)
|
||||
pGlStencilOpSeparate(face, fail, zfail, zpass);
|
||||
else if (pGlStencilOpSeparateATI)
|
||||
pGlStencilOpSeparateATI(face, fail, zfail, zpass);
|
||||
#elif defined(GL_VERSION_2_0)
|
||||
glStencilOpSeparate(face, fail, zfail, zpass);
|
||||
#elif defined(GL_ATI_separate_stencil)
|
||||
glStencilOpSeparateATI(face, fail, zfail, zpass);
|
||||
#else
|
||||
os::Printer::log("glStencilOpSeparate not supported", ELL_ERROR);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width,
|
||||
GLsizei height, GLint border, GLsizei imageSize, const void* data)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
#ifdef PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
if (pGlCompressedTexImage2D)
|
||||
pGlCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
|
||||
#endif
|
||||
#else
|
||||
glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlBindFramebufferEXT (GLenum target, GLuint framebuffer)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlBindFramebufferEXT)
|
||||
pGlBindFramebufferEXT(target, framebuffer);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glBindFramebufferEXT(target, framebuffer);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlDeleteFramebuffersEXT)
|
||||
pGlDeleteFramebuffersEXT(n, framebuffers);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glDeleteFramebuffersEXT(n, framebuffers);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlGenFramebuffersEXT (GLsizei n, GLuint *framebuffers)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlGenFramebuffersEXT)
|
||||
pGlGenFramebuffersEXT(n, framebuffers);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glGenFramebuffersEXT(n, framebuffers);
|
||||
#endif
|
||||
}
|
||||
|
||||
GLenum COpenGLExtensionHandler::extGlCheckFramebufferStatusEXT (GLenum target)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlCheckFramebufferStatusEXT)
|
||||
return pGlCheckFramebufferStatusEXT(target);
|
||||
else
|
||||
return 0;
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
return glCheckFramebufferStatusEXT(target);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlFramebufferTexture2DEXT)
|
||||
pGlFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlBindRenderbufferEXT (GLenum target, GLuint renderbuffer)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlBindRenderbufferEXT)
|
||||
pGlBindRenderbufferEXT(target, renderbuffer);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glBindRenderbufferEXT(target, renderbuffer);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlDeleteRenderbuffersEXT)
|
||||
pGlDeleteRenderbuffersEXT(n, renderbuffers);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glDeleteRenderbuffersEXT(n, renderbuffers);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlGenRenderbuffersEXT)
|
||||
pGlGenRenderbuffersEXT(n, renderbuffers);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glGenRenderbuffersEXT(n, renderbuffers);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlRenderbufferStorageEXT)
|
||||
pGlRenderbufferStorageEXT(target, internalformat, width, height);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glRenderbufferStorageEXT(target, internalformat, width, height);
|
||||
#endif
|
||||
}
|
||||
|
||||
void COpenGLExtensionHandler::extGlFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer)
|
||||
{
|
||||
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
|
||||
if (pGlFramebufferRenderbufferEXT)
|
||||
pGlFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
|
||||
#elif defined(GL_EXT_framebuffer_object)
|
||||
glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
793
source/Irrlicht/COpenGLExtensionHandler.h
Normal file
793
source/Irrlicht/COpenGLExtensionHandler.h
Normal file
@ -0,0 +1,793 @@
|
||||
// Copyright (C) 2002-2007 Nikolaus Gebhardt
|
||||
// This file is part of the "Irrlicht Engine".
|
||||
// For conditions of distribution and use, see copyright notice in Irrlicht.h
|
||||
|
||||
#ifndef __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
|
||||
#define __C_OPEN_GL_FEATURE_MAP_H_INCLUDED__
|
||||
|
||||
#include "EDriverFeatures.h"
|
||||
#include "irrTypes.h"
|
||||
|
||||
#if defined(_IRR_WINDOWS_API_)
|
||||
// include windows headers for HWND
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#include "glext.h"
|
||||
#ifdef _MSC_VER
|
||||
#pragma comment(lib, "OpenGL32.lib")
|
||||
#pragma comment(lib, "GLu32.lib")
|
||||
#endif
|
||||
#elif defined(MACOSX)
|
||||
#define GL_EXT_texture_env_combine 1
|
||||
#include "CIrrDeviceMacOSX.h"
|
||||
#include <OpenGL/gl.h>
|
||||
#include <OpenGL/glu.h>
|
||||
#include <OpenGL/glext.h>
|
||||
#elif defined(_IRR_USE_SDL_DEVICE_)
|
||||
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
|
||||
#define GL_GLEXT_LEGACY 1
|
||||
#define GLX_GLXEXT_LEGACY 1
|
||||
#else
|
||||
#define GL_GLEXT_PROTOTYPES 1
|
||||
#define GLX_GLXEXT_PROTOTYPES 1
|
||||
#endif
|
||||
#include <SDL/SDL_opengl.h>
|
||||
#define NO_SDL_GLEXT
|
||||
#include "glext.h"
|
||||
#else
|
||||
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
|
||||
#define GL_GLEXT_LEGACY 1
|
||||
#define GLX_GLXEXT_LEGACY 1
|
||||
#else
|
||||
#define GL_GLEXT_PROTOTYPES 1
|
||||
#define GLX_GLXEXT_PROTOTYPES 1
|
||||
#endif
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glu.h>
|
||||
#include <GL/glx.h>
|
||||
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
|
||||
#include "glext.h"
|
||||
#undef GLX_ARB_get_proc_address // avoid problems with local glxext.h
|
||||
#include "glxext.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
namespace irr
|
||||
{
|
||||
namespace video
|
||||
{
|
||||
|
||||
static const char* const OpenGLFeatureStrings[] = {
|
||||
"GL_3DFX_multisample",
|
||||
"GL_3DFX_tbuffer",
|
||||
"GL_3DFX_texture_compression_FXT1",
|
||||
"GL_APPLE_client_storage",
|
||||
"GL_APPLE_element_array",
|
||||
"GL_APPLE_fence",
|
||||
"GL_APPLE_flush_buffer_range",
|
||||
"GL_APPLE_specular_vector",
|
||||
"GL_APPLE_transform_hint",
|
||||
"GL_APPLE_vertex_array_object",
|
||||
"GL_APPLE_vertex_array_range",
|
||||
"GL_APPLE_ycbcr_422",
|
||||
"GL_ARB_color_buffer_float",
|
||||
"GL_ARB_depth_texture",
|
||||
"GL_ARB_draw_buffers",
|
||||
"GL_ARB_fragment_program",
|
||||
"GL_ARB_fragment_program_shadow",
|
||||
"GL_ARB_fragment_shader",
|
||||
"GL_ARB_half_float_pixel",
|
||||
"GL_ARB_imaging",
|
||||
"GL_ARB_matrix_palette",
|
||||
"GL_ARB_multisample",
|
||||
"GL_ARB_multitexture",
|
||||
"GL_ARB_occlusion_query",
|
||||
"GL_ARB_pixel_buffer_object",
|
||||
"GL_ARB_point_parameters",
|
||||
"GL_ARB_point_sprite",
|
||||
"GL_ARB_shader_objects",
|
||||
"GL_ARB_shading_language_100",
|
||||
"GL_ARB_shadow",
|
||||
"GL_ARB_shadow_ambient",
|
||||
"GL_ARB_texture_border_clamp",
|
||||
"GL_ARB_texture_compression",
|
||||
"GL_ARB_texture_cube_map",
|
||||
"GL_ARB_texture_env_add",
|
||||
"GL_ARB_texture_env_combine",
|
||||
"GL_ARB_texture_env_crossbar",
|
||||
"GL_ARB_texture_env_dot3",
|
||||
"GL_ARB_texture_float",
|
||||
"GL_ARB_texture_mirrored_repeat",
|
||||
"GL_ARB_texture_non_power_of_two",
|
||||
"GL_ARB_texture_rectangle",
|
||||
"GL_ARB_transpose_matrix",
|
||||
"GL_ARB_vertex_blend",
|
||||
"GL_ARB_vertex_buffer_object",
|
||||
"GL_ARB_vertex_program",
|
||||
"GL_ARB_vertex_shader",
|
||||
"GL_ARB_window_pos",
|
||||
"GL_ATI_draw_buffers",
|
||||
"GL_ATI_element_array",
|
||||
"GL_ATI_envmap_bumpmap",
|
||||
"GL_ATI_fragment_shader",
|
||||
"GL_ATI_map_object_buffer",
|
||||
"GL_ATI_pixel_format_float",
|
||||
"GL_ATI_pn_triangles",
|
||||
"GL_ATI_separate_stencil",
|
||||
"GL_ATI_text_fragment_shader",
|
||||
"GL_ATI_texture_env_combine3",
|
||||
"GL_ATI_texture_float",
|
||||
"GL_ATI_texture_mirror_once",
|
||||
"GL_ATI_vertex_array_object",
|
||||
"GL_ATI_vertex_attrib_array_object",
|
||||
"GL_ATI_vertex_streams",
|
||||
"GL_EXT_422_pixels",
|
||||
"GL_EXT_abgr",
|
||||
"GL_EXT_bgra",
|
||||
"GL_EXT_bindable_uniform",
|
||||
"GL_EXT_blend_color",
|
||||
"GL_EXT_blend_equation_separate",
|
||||
"GL_EXT_blend_func_separate",
|
||||
"GL_EXT_blend_logic_op",
|
||||
"GL_EXT_blend_minmax",
|
||||
"GL_EXT_blend_subtract",
|
||||
"GL_EXT_clip_volume_hint",
|
||||
"GL_EXT_cmyka",
|
||||
"GL_EXT_color_subtable",
|
||||
"GL_EXT_compiled_vertex_array",
|
||||
"GL_EXT_convolution",
|
||||
"GL_EXT_coordinate_frame",
|
||||
"GL_EXT_copy_texture",
|
||||
"GL_EXT_cull_vertex",
|
||||
"GL_EXT_depth_bounds_test",
|
||||
"GL_EXT_draw_buffers2",
|
||||
"GL_EXT_draw_instanced",
|
||||
"GL_EXT_draw_range_elements",
|
||||
"GL_EXT_fog_coord",
|
||||
"GL_EXT_framebuffer_blit",
|
||||
"GL_EXT_framebuffer_multisample",
|
||||
"GL_EXT_framebuffer_object",
|
||||
"GL_EXT_framebuffer_sRGB",
|
||||
"GL_EXT_geometry_shader4",
|
||||
"GL_EXT_gpu_program_parameters",
|
||||
"GL_EXT_gpu_shader4",
|
||||
"GL_EXT_histogram",
|
||||
"GL_EXT_index_array_formats",
|
||||
"GL_EXT_index_func",
|
||||
"GL_EXT_index_material",
|
||||
"GL_EXT_index_texture",
|
||||
"GL_EXT_light_texture",
|
||||
"GL_EXT_misc_attribute",
|
||||
"GL_EXT_multi_draw_arrays",
|
||||
"GL_EXT_multisample",
|
||||
"GL_EXT_packed_depth_stencil",
|
||||
"GL_EXT_packed_float",
|
||||
"GL_EXT_packed_pixels",
|
||||
"GL_EXT_paletted_texture",
|
||||
"GL_EXT_pixel_buffer_object",
|
||||
"GL_EXT_pixel_transform",
|
||||
"GL_EXT_pixel_transform_color_table",
|
||||
"GL_EXT_point_parameters",
|
||||
"GL_EXT_polygon_offset",
|
||||
"GL_EXT_rescale_normal",
|
||||
"GL_EXT_secondary_color",
|
||||
"GL_EXT_separate_specular_color",
|
||||
"GL_EXT_shadow_funcs",
|
||||
"GL_EXT_shared_texture_palette",
|
||||
"GL_EXT_stencil_clear_tag",
|
||||
"GL_EXT_stencil_two_side",
|
||||
"GL_EXT_stencil_wrap",
|
||||
"GL_EXT_subtexture",
|
||||
"GL_EXT_texture",
|
||||
"GL_EXT_texture3D",
|
||||
"GL_EXT_texture_array",
|
||||
"GL_EXT_texture_buffer_object",
|
||||
"GL_EXT_texture_compression_latc",
|
||||
"GL_EXT_texture_compression_rgtc",
|
||||
"GL_EXT_texture_compression_s3tc",
|
||||
"GL_EXT_texture_cube_map",
|
||||
"GL_EXT_texture_env_add",
|
||||
"GL_EXT_texture_env_combine",
|
||||
"GL_EXT_texture_env_dot3",
|
||||
"GL_EXT_texture_filter_anisotropic",
|
||||
"GL_EXT_texture_integer",
|
||||
"GL_EXT_texture_lod_bias",
|
||||
"GL_EXT_texture_mirror_clamp",
|
||||
"GL_EXT_texture_object",
|
||||
"GL_EXT_texture_perturb_normal",
|
||||
"GL_EXT_texture_shared_exponent",
|
||||
"GL_EXT_texture_sRGB",
|
||||
"GL_EXT_timer_query",
|
||||
"GL_EXT_vertex_array",
|
||||
"GL_EXT_vertex_shader",
|
||||
"GL_EXT_vertex_weighting",
|
||||
"GL_FfdMaskSGIX",
|
||||
"GL_GREMEDY_string_marker",
|
||||
"GL_HP_convolution_border_modes",
|
||||
"GL_HP_image_transform",
|
||||
"GL_HP_occlusion_test",
|
||||
"GL_HP_texture_lighting",
|
||||
"GL_IBM_cull_vertex",
|
||||
"GL_IBM_multimode_draw_arrays",
|
||||
"GL_IBM_rasterpos_clip",
|
||||
"GL_IBM_texture_mirrored_repeat",
|
||||
"GL_IBM_vertex_array_lists",
|
||||
"GL_INGR_blend_func_separate",
|
||||
"GL_INGR_color_clamp",
|
||||
"GL_INGR_interlace_read",
|
||||
"GL_INGR_palette_buffer",
|
||||
"GL_INTEL_parallel_arrays",
|
||||
"GL_INTEL_texture_scissor",
|
||||
"GL_MESA_pack_invert",
|
||||
"GL_MESA_resize_buffers",
|
||||
"GL_MESA_window_pos",
|
||||
"GL_MESAX_texture_stack",
|
||||
"GL_MESA_ycbcr_texture",
|
||||
"GL_NV_blend_square",
|
||||
"GL_NV_copy_depth_to_color",
|
||||
"GL_NV_depth_buffer_float",
|
||||
"GL_NV_depth_clamp",
|
||||
"GL_NV_evaluators",
|
||||
"GL_NV_fence",
|
||||
"GL_NV_float_buffer",
|
||||
"GL_NV_fog_distance",
|
||||
"GL_NV_fragment_program",
|
||||
"GL_NV_fragment_program2",
|
||||
"GL_NV_fragment_program4",
|
||||
"GL_NV_fragment_program_option",
|
||||
"GL_NV_framebuffer_multisample_coverage",
|
||||
"GL_NV_geometry_program4",
|
||||
"GL_NV_geometry_shader4",
|
||||
"GL_NV_gpu_program4",
|
||||
"GL_NV_half_float",
|
||||
"GL_NV_light_max_exponent",
|
||||
"GL_NV_multisample_filter_hint",
|
||||
"GL_NV_occlusion_query",
|
||||
"GL_NV_packed_depth_stencil",
|
||||
"GL_NV_parameter_buffer_object",
|
||||
"GL_NV_pixel_data_range",
|
||||
"GL_NV_point_sprite",
|
||||
"GL_NV_primitive_restart",
|
||||
"GL_NV_register_combiners",
|
||||
"GL_NV_register_combiners2",
|
||||
"GL_NV_texgen_emboss",
|
||||
"GL_NV_texgen_reflection",
|
||||
"GL_NV_texture_compression_vtc",
|
||||
"GL_NV_texture_env_combine4",
|
||||
"GL_NV_texture_expand_normal",
|
||||
"GL_NV_texture_rectangle",
|
||||
"GL_NV_texture_shader",
|
||||
"GL_NV_texture_shader2",
|
||||
"GL_NV_texture_shader3",
|
||||
"GL_NV_transform_feedback",
|
||||
"GL_NV_vertex_array_range",
|
||||
"GL_NV_vertex_array_range2",
|
||||
"GL_NV_vertex_program",
|
||||
"GL_NV_vertex_program1_1",
|
||||
"GL_NV_vertex_program2",
|
||||
"GL_NV_vertex_program2_option",
|
||||
"GL_NV_vertex_program3",
|
||||
"GL_NV_vertex_program4",
|
||||
"GL_OES_read_format",
|
||||
"GL_OML_interlace",
|
||||
"GL_OML_resample",
|
||||
"GL_OML_subsample",
|
||||
"GL_PGI_misc_hints",
|
||||
"GL_PGI_vertex_hints",
|
||||
"GL_REND_screen_coordinates",
|
||||
"GL_S3_s3tc",
|
||||
"GL_SGI_color_matrix",
|
||||
"GL_SGI_color_table",
|
||||
"GL_SGI_depth_pass_instrument",
|
||||
"GL_SGIS_detail_texture",
|
||||
"GL_SGIS_fog_function",
|
||||
"GL_SGIS_generate_mipmap",
|
||||
"GL_SGIS_multisample",
|
||||
"GL_SGIS_pixel_texture",
|
||||
"GL_SGIS_point_line_texgen",
|
||||
"GL_SGIS_point_parameters",
|
||||
"GL_SGIS_sharpen_texture",
|
||||
"GL_SGIS_texture4D",
|
||||
"GL_SGIS_texture_border_clamp",
|
||||
"GL_SGIS_texture_color_mask",
|
||||
"GL_SGIS_texture_edge_clamp",
|
||||
"GL_SGIS_texture_filter4",
|
||||
"GL_SGIS_texture_lod",
|
||||
"GL_SGIS_texture_select",
|
||||
"GL_SGI_texture_color_table",
|
||||
"GL_SGIX_async",
|
||||
"GL_SGIX_async_histogram",
|
||||
"GL_SGIX_async_pixel",
|
||||
"GL_SGIX_blend_alpha_minmax",
|
||||
"GL_SGIX_calligraphic_fragment",
|
||||
"GL_SGIX_clipmap",
|
||||
"GL_SGIX_convolution_accuracy",
|
||||
"GL_SGIX_depth_pass_instrument",
|
||||
"GL_SGIX_depth_texture",
|
||||
"GL_SGIX_flush_raster",
|
||||
"GL_SGIX_fog_offset",
|
||||
"GL_SGIX_fog_scale",
|
||||
"GL_SGIX_fragment_lighting",
|
||||
"GL_SGIX_framezoom",
|
||||
"GL_SGIX_igloo_interface",
|
||||
"GL_SGIX_impact_pixel_texture",
|
||||
"GL_SGIX_instruments",
|
||||
"GL_SGIX_interlace",
|
||||
"GL_SGIX_ir_instrument1",
|
||||
"GL_SGIX_list_priority",
|
||||
"GL_SGIX_pixel_texture",
|
||||
"GL_SGIX_pixel_tiles",
|
||||
"GL_SGIX_polynomial_ffd",
|
||||
"GL_SGIX_reference_plane",
|
||||
"GL_SGIX_resample",
|
||||
"GL_SGIX_scalebias_hint",
|
||||
"GL_SGIX_shadow",
|
||||
"GL_SGIX_shadow_ambient",
|
||||
"GL_SGIX_sprite",
|
||||
"GL_SGIX_subsample",
|
||||
"GL_SGIX_tag_sample_buffer",
|
||||
"GL_SGIX_texture_add_env",
|
||||
"GL_SGIX_texture_coordinate_clamp",
|
||||
"GL_SGIX_texture_lod_bias",
|
||||
"GL_SGIX_texture_multi_buffer",
|
||||
"GL_SGIX_texture_scale_bias",
|
||||
"GL_SGIX_texture_select",
|
||||
"GL_SGIX_vertex_preclip",
|
||||
"GL_SGIX_ycrcb",
|
||||
"GL_SGIX_ycrcba",
|
||||
"GL_SGIX_ycrcb_subsample",
|
||||
"GL_SUN_convolution_border_modes",
|
||||
"GL_SUN_global_alpha",
|
||||
"GL_SUN_mesh_array",
|
||||
"GL_SUN_slice_accum",
|
||||
"GL_SUN_triangle_list",
|
||||
"GL_SUN_vertex",
|
||||
"GL_SUNX_constant_data",
|
||||
"GL_WIN_phong_shading",
|
||||
"GL_WIN_specular_fog"
|
||||
};
|
||||
|
||||
|
||||
class COpenGLExtensionHandler
|
||||
{
|
||||
enum EOpenGLFeatures {
|
||||
IRR_3DFX_multisample = 0,
|
||||
IRR_3DFX_tbuffer,
|
||||
IRR_3DFX_texture_compression_FXT1,
|
||||
IRR_APPLE_client_storage,
|
||||
IRR_APPLE_element_array,
|
||||
IRR_APPLE_fence,
|
||||
IRR_APPLE_flush_buffer_range,
|
||||
IRR_APPLE_specular_vector,
|
||||
IRR_APPLE_transform_hint,
|
||||
IRR_APPLE_vertex_array_object,
|
||||
IRR_APPLE_vertex_array_range,
|
||||
IRR_APPLE_ycbcr_422,
|
||||
IRR_ARB_color_buffer_float,
|
||||
IRR_ARB_depth_texture,
|
||||
IRR_ARB_draw_buffers,
|
||||
IRR_ARB_fragment_program,
|
||||
IRR_ARB_fragment_program_shadow,
|
||||
IRR_ARB_fragment_shader,
|
||||
IRR_ARB_half_float_pixel,
|
||||
IRR_ARB_imaging,
|
||||
IRR_ARB_matrix_palette,
|
||||
IRR_ARB_multisample,
|
||||
IRR_ARB_multitexture,
|
||||
IRR_ARB_occlusion_query,
|
||||
IRR_ARB_pixel_buffer_object,
|
||||
IRR_ARB_point_parameters,
|
||||
IRR_ARB_point_sprite,
|
||||
IRR_ARB_shader_objects,
|
||||
IRR_ARB_shading_language_100,
|
||||
IRR_ARB_shadow,
|
||||
IRR_ARB_shadow_ambient,
|
||||
IRR_ARB_texture_border_clamp,
|
||||
IRR_ARB_texture_compression,
|
||||
IRR_ARB_texture_cube_map,
|
||||
IRR_ARB_texture_env_add,
|
||||
IRR_ARB_texture_env_combine,
|
||||
IRR_ARB_texture_env_crossbar,
|
||||
IRR_ARB_texture_env_dot3,
|
||||
IRR_ARB_texture_float,
|
||||
IRR_ARB_texture_mirrored_repeat,
|
||||
IRR_ARB_texture_non_power_of_two,
|
||||
IRR_ARB_texture_rectangle,
|
||||
IRR_ARB_transpose_matrix,
|
||||
IRR_ARB_vertex_blend,
|
||||
IRR_ARB_vertex_buffer_object,
|
||||
IRR_ARB_vertex_program,
|
||||
IRR_ARB_vertex_shader,
|
||||
IRR_ARB_window_pos,
|
||||
IRR_ATI_draw_buffers,
|
||||
IRR_ATI_element_array,
|
||||
IRR_ATI_envmap_bumpmap,
|
||||
IRR_ATI_fragment_shader,
|
||||
IRR_ATI_map_object_buffer,
|
||||
IRR_ATI_pixel_format_float,
|
||||
IRR_ATI_pn_triangles,
|
||||
IRR_ATI_separate_stencil,
|
||||
IRR_ATI_text_fragment_shader,
|
||||
IRR_ATI_texture_env_combine3,
|
||||
IRR_ATI_texture_float,
|
||||
IRR_ATI_texture_mirror_once,
|
||||
IRR_ATI_vertex_array_object,
|
||||
IRR_ATI_vertex_attrib_array_object,
|
||||
IRR_ATI_vertex_streams,
|
||||
IRR_EXT_422_pixels,
|
||||
IRR_EXT_abgr,
|
||||
IRR_EXT_bgra,
|
||||
IRR_EXT_bindable_uniform,
|
||||
IRR_EXT_blend_color,
|
||||
IRR_EXT_blend_equation_separate,
|
||||
IRR_EXT_blend_func_separate,
|
||||
IRR_EXT_blend_logic_op,
|
||||
IRR_EXT_blend_minmax,
|
||||
IRR_EXT_blend_subtract,
|
||||
IRR_EXT_clip_volume_hint,
|
||||
IRR_EXT_cmyka,
|
||||
IRR_EXT_color_subtable,
|
||||
IRR_EXT_compiled_vertex_array,
|
||||
IRR_EXT_convolution,
|
||||
IRR_EXT_coordinate_frame,
|
||||
IRR_EXT_copy_texture,
|
||||
IRR_EXT_cull_vertex,
|
||||
IRR_EXT_depth_bounds_test,
|
||||
IRR_EXT_draw_buffers2,
|
||||
IRR_EXT_draw_instanced,
|
||||
IRR_EXT_draw_range_elements,
|
||||
IRR_EXT_fog_coord,
|
||||
IRR_EXT_framebuffer_blit,
|
||||
IRR_EXT_framebuffer_multisample,
|
||||
IRR_EXT_framebuffer_object,
|
||||
IRR_EXT_framebuffer_sRGB,
|
||||
IRR_EXT_geometry_shader4,
|
||||
IRR_EXT_gpu_program_parameters,
|
||||
IRR_EXT_gpu_shader4,
|
||||
IRR_EXT_histogram,
|
||||
IRR_EXT_index_array_formats,
|
||||
IRR_EXT_index_func,
|
||||
IRR_EXT_index_material,
|
||||
IRR_EXT_index_texture,
|
||||
IRR_EXT_light_texture,
|
||||
IRR_EXT_misc_attribute,
|
||||
IRR_EXT_multi_draw_arrays,
|
||||
IRR_EXT_multisample,
|
||||
IRR_EXT_packed_depth_stencil,
|
||||
IRR_EXT_packed_float,
|
||||
IRR_EXT_packed_pixels,
|
||||
IRR_EXT_paletted_texture,
|
||||
IRR_EXT_pixel_buffer_object,
|
||||
IRR_EXT_pixel_transform,
|
||||
IRR_EXT_pixel_transform_color_table,
|
||||
IRR_EXT_point_parameters,
|
||||
IRR_EXT_polygon_offset,
|
||||
IRR_EXT_rescale_normal,
|
||||
IRR_EXT_secondary_color,
|
||||
IRR_EXT_separate_specular_color,
|
||||
IRR_EXT_shadow_funcs,
|
||||
IRR_EXT_shared_texture_palette,
|
||||
IRR_EXT_stencil_clear_tag,
|
||||
IRR_EXT_stencil_two_side,
|
||||
IRR_EXT_stencil_wrap,
|
||||
IRR_EXT_subtexture,
|
||||
IRR_EXT_texture,
|
||||
IRR_EXT_texture3D,
|
||||
IRR_EXT_texture_array,
|
||||
IRR_EXT_texture_buffer_object,
|
||||
IRR_EXT_texture_compression_latc,
|
||||
IRR_EXT_texture_compression_rgtc,
|
||||
IRR_EXT_texture_compression_s3tc,
|
||||
IRR_EXT_texture_cube_map,
|
||||
IRR_EXT_texture_env_add,
|
||||
IRR_EXT_texture_env_combine,
|
||||
IRR_EXT_texture_env_dot3,
|
||||
IRR_EXT_texture_filter_anisotropic,
|
||||
IRR_EXT_texture_integer,
|
||||
IRR_EXT_texture_lod_bias,
|
||||
IRR_EXT_texture_mirror_clamp,
|
||||
IRR_EXT_texture_object,
|
||||
IRR_EXT_texture_perturb_normal,
|
||||
IRR_EXT_texture_shared_exponent,
|
||||
IRR_EXT_texture_sRGB,
|
||||
IRR_EXT_timer_query,
|
||||
IRR_EXT_vertex_array,
|
||||
IRR_EXT_vertex_shader,
|
||||
IRR_EXT_vertex_weighting,
|
||||
IRR_FfdMaskSGIX,
|
||||
IRR_GREMEDY_string_marker,
|
||||
IRR_HP_convolution_border_modes,
|
||||
IRR_HP_image_transform,
|
||||
IRR_HP_occlusion_test,
|
||||
IRR_HP_texture_lighting,
|
||||
IRR_IBM_cull_vertex,
|
||||
IRR_IBM_multimode_draw_arrays,
|
||||
IRR_IBM_rasterpos_clip,
|
||||
IRR_IBM_texture_mirrored_repeat,
|
||||
IRR_IBM_vertex_array_lists,
|
||||
IRR_INGR_blend_func_separate,
|
||||
IRR_INGR_color_clamp,
|
||||
IRR_INGR_interlace_read,
|
||||
IRR_INGR_palette_buffer,
|
||||
IRR_INTEL_parallel_arrays,
|
||||
IRR_INTEL_texture_scissor,
|
||||
IRR_MESA_pack_invert,
|
||||
IRR_MESA_resize_buffers,
|
||||
IRR_MESA_window_pos,
|
||||
IRR_MESAX_texture_stack,
|
||||
IRR_MESA_ycbcr_texture,
|
||||
IRR_NV_blend_square,
|
||||
IRR_NV_copy_depth_to_color,
|
||||
IRR_NV_depth_buffer_float,
|
||||
IRR_NV_depth_clamp,
|
||||
IRR_NV_evaluators,
|
||||
IRR_NV_fence,
|
||||
IRR_NV_float_buffer,
|
||||
IRR_NV_fog_distance,
|
||||
IRR_NV_fragment_program,
|
||||
IRR_NV_fragment_program2,
|
||||
IRR_NV_fragment_program4,
|
||||
IRR_NV_fragment_program_option,
|
||||
IRR_NV_framebuffer_multisample_coverage,
|
||||
IRR_NV_geometry_program4,
|
||||
IRR_NV_geometry_shader4,
|
||||
IRR_NV_gpu_program4,
|
||||
IRR_NV_half_float,
|
||||
IRR_NV_light_max_exponent,
|
||||
IRR_NV_multisample_filter_hint,
|
||||
IRR_NV_occlusion_query,
|
||||
IRR_NV_packed_depth_stencil,
|
||||
IRR_NV_parameter_buffer_object,
|
||||
IRR_NV_pixel_data_range,
|
||||
IRR_NV_point_sprite,
|
||||
IRR_NV_primitive_restart,
|
||||
IRR_NV_register_combiners,
|
||||
IRR_NV_register_combiners2,
|
||||
IRR_NV_texgen_emboss,
|
||||
IRR_NV_texgen_reflection,
|
||||
IRR_NV_texture_compression_vtc,
|
||||
IRR_NV_texture_env_combine4,
|
||||
IRR_NV_texture_expand_normal,
|
||||
IRR_NV_texture_rectangle,
|
||||
IRR_NV_texture_shader,
|
||||
IRR_NV_texture_shader2,
|
||||
IRR_NV_texture_shader3,
|
||||
IRR_NV_transform_feedback,
|
||||
IRR_NV_vertex_array_range,
|
||||
IRR_NV_vertex_array_range2,
|
||||
IRR_NV_vertex_program,
|
||||
IRR_NV_vertex_program1_1,
|
||||
IRR_NV_vertex_program2,
|
||||
IRR_NV_vertex_program2_option,
|
||||
IRR_NV_vertex_program3,
|
||||
IRR_NV_vertex_program4,
|
||||
IRR_OES_read_format,
|
||||
IRR_OML_interlace,
|
||||
IRR_OML_resample,
|
||||
IRR_OML_subsample,
|
||||
IRR_PGI_misc_hints,
|
||||
IRR_PGI_vertex_hints,
|
||||
IRR_REND_screen_coordinates,
|
||||
IRR_S3_s3tc,
|
||||
IRR_SGI_color_matrix,
|
||||
IRR_SGI_color_table,
|
||||
IRR_SGI_depth_pass_instrument,
|
||||
IRR_SGIS_detail_texture,
|
||||
IRR_SGIS_fog_function,
|
||||
IRR_SGIS_generate_mipmap,
|
||||
IRR_SGIS_multisample,
|
||||
IRR_SGIS_pixel_texture,
|
||||
IRR_SGIS_point_line_texgen,
|
||||
IRR_SGIS_point_parameters,
|
||||
IRR_SGIS_sharpen_texture,
|
||||
IRR_SGIS_texture4D,
|
||||
IRR_SGIS_texture_border_clamp,
|
||||
IRR_SGIS_texture_color_mask,
|
||||
IRR_SGIS_texture_edge_clamp,
|
||||
IRR_SGIS_texture_filter4,
|
||||
IRR_SGIS_texture_lod,
|
||||
IRR_SGIS_texture_select,
|
||||
IRR_SGI_texture_color_table,
|
||||
IRR_SGIX_async,
|
||||
IRR_SGIX_async_histogram,
|
||||
IRR_SGIX_async_pixel,
|
||||
IRR_SGIX_blend_alpha_minmax,
|
||||
IRR_SGIX_calligraphic_fragment,
|
||||
IRR_SGIX_clipmap,
|
||||
IRR_SGIX_convolution_accuracy,
|
||||
IRR_SGIX_depth_pass_instrument,
|
||||
IRR_SGIX_depth_texture,
|
||||
IRR_SGIX_flush_raster,
|
||||
IRR_SGIX_fog_offset,
|
||||
IRR_SGIX_fog_scale,
|
||||
IRR_SGIX_fragment_lighting,
|
||||
IRR_SGIX_framezoom,
|
||||
IRR_SGIX_igloo_interface,
|
||||
IRR_SGIX_impact_pixel_texture,
|
||||
IRR_SGIX_instruments,
|
||||
IRR_SGIX_interlace,
|
||||
IRR_SGIX_ir_instrument1,
|
||||
IRR_SGIX_list_priority,
|
||||
IRR_SGIX_pixel_texture,
|
||||
IRR_SGIX_pixel_tiles,
|
||||
IRR_SGIX_polynomial_ffd,
|
||||
IRR_SGIX_reference_plane,
|
||||
IRR_SGIX_resample,
|
||||
IRR_SGIX_scalebias_hint,
|
||||
IRR_SGIX_shadow,
|
||||
IRR_SGIX_shadow_ambient,
|
||||
IRR_SGIX_sprite,
|
||||
IRR_SGIX_subsample,
|
||||
IRR_SGIX_tag_sample_buffer,
|
||||
IRR_SGIX_texture_add_env,
|
||||
IRR_SGIX_texture_coordinate_clamp,
|
||||
IRR_SGIX_texture_lod_bias,
|
||||
IRR_SGIX_texture_multi_buffer,
|
||||
IRR_SGIX_texture_scale_bias,
|
||||
IRR_SGIX_texture_select,
|
||||
IRR_SGIX_vertex_preclip,
|
||||
IRR_SGIX_ycrcb,
|
||||
IRR_SGIX_ycrcba,
|
||||
IRR_SGIX_ycrcb_subsample,
|
||||
IRR_SUN_convolution_border_modes,
|
||||
IRR_SUN_global_alpha,
|
||||
IRR_SUN_mesh_array,
|
||||
IRR_SUN_slice_accum,
|
||||
IRR_SUN_triangle_list,
|
||||
IRR_SUN_vertex,
|
||||
IRR_SUNX_constant_data,
|
||||
IRR_WIN_phong_shading,
|
||||
IRR_WIN_specular_fog,
|
||||
IRR_OpenGL_Feature_Count
|
||||
};
|
||||
|
||||
public:
|
||||
// constructor
|
||||
COpenGLExtensionHandler();
|
||||
|
||||
// deferred initialization
|
||||
void initExtensions(bool stencilBuffer);
|
||||
|
||||
//! queries the features of the driver, returns true if feature is available
|
||||
bool queryFeature(E_VIDEO_DRIVER_FEATURE feature) const;
|
||||
|
||||
// show all features with availablity
|
||||
void dump() const;
|
||||
|
||||
// public access to the (loaded) extensions.
|
||||
// general functions
|
||||
void extGlActiveTextureARB(GLenum texture);
|
||||
void extGlClientActiveTextureARB(GLenum texture);
|
||||
void extGlPointParameterfARB (GLint loc, GLfloat f);
|
||||
void extGlPointParameterfvARB (GLint loc, const GLfloat *v);
|
||||
void extGlStencilFuncSeparate (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);
|
||||
void extGlStencilOpSeparate (GLenum face, GLenum fail, GLenum zfail, GLenum zpass);
|
||||
void extGlCompressedTexImage2D(GLenum target, GLint level,
|
||||
GLenum internalformat, GLsizei width, GLsizei height,
|
||||
GLint border, GLsizei imageSize, const void* data);
|
||||
|
||||
// shader programming
|
||||
void extGlGenProgramsARB(GLsizei n, GLuint *programs);
|
||||
void extGlBindProgramARB(GLenum target, GLuint program);
|
||||
void extGlProgramStringARB(GLenum target, GLenum format, GLsizei len, const GLvoid *string);
|
||||
void extGlDeleteProgramsARB(GLsizei n, const GLuint *programs);
|
||||
void extGlProgramLocalParameter4fvARB(GLenum, GLuint, const GLfloat *);
|
||||
GLhandleARB extGlCreateShaderObjectARB(GLenum shaderType);
|
||||
void extGlShaderSourceARB(GLhandleARB shader, int numOfStrings, const char **strings, int *lenOfStrings);
|
||||
void extGlCompileShaderARB(GLhandleARB shader);
|
||||
GLhandleARB extGlCreateProgramObjectARB(void);
|
||||
void extGlAttachObjectARB(GLhandleARB program, GLhandleARB shader);
|
||||
void extGlLinkProgramARB(GLhandleARB program);
|
||||
void extGlUseProgramObjectARB(GLhandleARB prog);
|
||||
void extGlDeleteObjectARB(GLhandleARB object);
|
||||
void extGlGetInfoLogARB(GLhandleARB object, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);
|
||||
void extGlGetObjectParameterivARB(GLhandleARB object, GLenum type, int *param);
|
||||
GLint extGlGetUniformLocationARB(GLhandleARB program, const char *name);
|
||||
void extGlUniform4fvARB(GLint location, GLsizei count, const GLfloat *v);
|
||||
void extGlUniform1ivARB (GLint loc, GLsizei count, const GLint *v);
|
||||
void extGlUniform1fvARB (GLint loc, GLsizei count, const GLfloat *v);
|
||||
void extGlUniform2fvARB (GLint loc, GLsizei count, const GLfloat *v);
|
||||
void extGlUniform3fvARB (GLint loc, GLsizei count, const GLfloat *v);
|
||||
void extGlUniformMatrix2fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
|
||||
void extGlUniformMatrix3fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
|
||||
void extGlUniformMatrix4fvARB (GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);
|
||||
void extGlGetActiveUniformARB (GLhandleARB program, GLuint index, GLsizei maxlength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);
|
||||
|
||||
// framebuffer objects
|
||||
void extGlBindFramebufferEXT (GLenum target, GLuint framebuffer);
|
||||
void extGlDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers);
|
||||
void extGlGenFramebuffersEXT (GLsizei n, GLuint *framebuffers);
|
||||
GLenum extGlCheckFramebufferStatusEXT (GLenum target);
|
||||
void extGlFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);
|
||||
void extGlBindRenderbufferEXT (GLenum target, GLuint renderbuffer);
|
||||
void extGlDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers);
|
||||
void extGlGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers);
|
||||
void extGlRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
|
||||
void extGlFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
|
||||
|
||||
// Some variables for properties
|
||||
bool StencilBuffer;
|
||||
bool MultiTextureExtension;
|
||||
bool MultiSamplingExtension;
|
||||
bool AnisotropyExtension;
|
||||
bool SeparateStencilExtension;
|
||||
bool TextureCompressionExtension;
|
||||
bool PackedDepthStencilExtension;
|
||||
bool SeparateSpecularColorExtension;
|
||||
|
||||
// Some non-boolean properties
|
||||
GLint MaxTextureUnits;
|
||||
GLint MaxLights;
|
||||
GLint MaxIndices;
|
||||
f32 MaxAnisotropy;
|
||||
|
||||
protected:
|
||||
// the global feature array
|
||||
bool FeatureAvailable[IRR_OpenGL_Feature_Count];
|
||||
|
||||
#if defined(_IRR_OPENGL_USE_EXTPOINTER_)
|
||||
PFNGLACTIVETEXTUREARBPROC pGlActiveTextureARB;
|
||||
PFNGLCLIENTACTIVETEXTUREARBPROC pGlClientActiveTextureARB;
|
||||
PFNGLGENPROGRAMSARBPROC pGlGenProgramsARB;
|
||||
PFNGLBINDPROGRAMARBPROC pGlBindProgramARB;
|
||||
PFNGLPROGRAMSTRINGARBPROC pGlProgramStringARB;
|
||||
PFNGLDELETEPROGRAMSNVPROC pGlDeleteProgramsARB;
|
||||
PFNGLPROGRAMLOCALPARAMETER4FVARBPROC pGlProgramLocalParameter4fvARB;
|
||||
PFNGLCREATESHADEROBJECTARBPROC pGlCreateShaderObjectARB;
|
||||
PFNGLSHADERSOURCEARBPROC pGlShaderSourceARB;
|
||||
PFNGLCOMPILESHADERARBPROC pGlCompileShaderARB;
|
||||
PFNGLCREATEPROGRAMOBJECTARBPROC pGlCreateProgramObjectARB;
|
||||
PFNGLATTACHOBJECTARBPROC pGlAttachObjectARB;
|
||||
PFNGLLINKPROGRAMARBPROC pGlLinkProgramARB;
|
||||
PFNGLUSEPROGRAMOBJECTARBPROC pGlUseProgramObjectARB;
|
||||
PFNGLDELETEOBJECTARBPROC pGlDeleteObjectARB;
|
||||
PFNGLGETINFOLOGARBPROC pGlGetInfoLogARB;
|
||||
PFNGLGETOBJECTPARAMETERIVARBPROC pGlGetObjectParameterivARB;
|
||||
PFNGLGETUNIFORMLOCATIONARBPROC pGlGetUniformLocationARB;
|
||||
PFNGLUNIFORM1IVARBPROC pGlUniform1ivARB;
|
||||
PFNGLUNIFORM1FVARBPROC pGlUniform1fvARB;
|
||||
PFNGLUNIFORM2FVARBPROC pGlUniform2fvARB;
|
||||
PFNGLUNIFORM3FVARBPROC pGlUniform3fvARB;
|
||||
PFNGLUNIFORM4FVARBPROC pGlUniform4fvARB;
|
||||
PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;
|
||||
PFNGLUNIFORMMATRIX3FVARBPROC pGlUniformMatrix3fvARB;
|
||||
PFNGLUNIFORMMATRIX4FVARBPROC pGlUniformMatrix4fvARB;
|
||||
PFNGLGETACTIVEUNIFORMARBPROC pGlGetActiveUniformARB;
|
||||
PFNGLPOINTPARAMETERFARBPROC pGlPointParameterfARB;
|
||||
PFNGLPOINTPARAMETERFVARBPROC pGlPointParameterfvARB;
|
||||
#ifdef GL_ATI_separate_stencil
|
||||
PFNGLSTENCILFUNCSEPARATEPROC pGlStencilFuncSeparate;
|
||||
PFNGLSTENCILOPSEPARATEPROC pGlStencilOpSeparate;
|
||||
PFNGLSTENCILFUNCSEPARATEATIPROC pGlStencilFuncSeparateATI;
|
||||
PFNGLSTENCILOPSEPARATEATIPROC pGlStencilOpSeparateATI;
|
||||
#endif
|
||||
#ifdef PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
PFNGLCOMPRESSEDTEXIMAGE2DPROC pGlCompressedTexImage2D;
|
||||
#endif // PFNGLCOMPRESSEDTEXIMAGE2DPROC
|
||||
#ifdef _IRR_WINDOWS_API_
|
||||
typedef BOOL (APIENTRY *PFNWGLSWAPINTERVALFARPROC)(int);
|
||||
PFNWGLSWAPINTERVALFARPROC wglSwapIntervalEXT;
|
||||
#elif defined(_IRR_LINUX_PLATFORM_) && defined(GLX_SGI_swap_control)
|
||||
PFNGLXSWAPINTERVALSGIPROC glxSwapIntervalSGI;
|
||||
#endif
|
||||
PFNGLBINDFRAMEBUFFEREXTPROC pGlBindFramebufferEXT;
|
||||
PFNGLDELETEFRAMEBUFFERSEXTPROC pGlDeleteFramebuffersEXT;
|
||||
PFNGLGENFRAMEBUFFERSEXTPROC pGlGenFramebuffersEXT;
|
||||
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC pGlCheckFramebufferStatusEXT;
|
||||
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC pGlFramebufferTexture2DEXT;
|
||||
PFNGLBINDRENDERBUFFEREXTPROC pGlBindRenderbufferEXT;
|
||||
PFNGLDELETERENDERBUFFERSEXTPROC pGlDeleteRenderbuffersEXT;
|
||||
PFNGLGENRENDERBUFFERSEXTPROC pGlGenRenderbuffersEXT;
|
||||
PFNGLRENDERBUFFERSTORAGEEXTPROC pGlRenderbufferStorageEXT;
|
||||
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC pGlFramebufferRenderbufferEXT;
|
||||
#endif
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -9,7 +9,7 @@ CppCompiler=-D__GNUWIN32__ -W -DWIN32 -DNDEBUG -D_WINDOWS -D_MBCS -D_USRDLL -DIR
|
||||
Includes=..\..\include;zlib
|
||||
Linker=-lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lglu32 -lopengl32_@@_
|
||||
Libs=
|
||||
UnitCount=579
|
||||
UnitCount=580
|
||||
Folders=doc,gui_impl,include,include/core,include/gui,include/io,include/scene,include/video,io_impl,other_impl,other_impl/extern,other_impl/extern/jpeglib,other_impl/extern/libpng,other_impl/extern/zlib,scene_impl,video_impl,"video_impl/Burning Video",video_impl/DirectX8,video_impl/DirectX9,video_impl/Null,video_impl/OpenGL,video_impl/Software
|
||||
ObjFiles=
|
||||
PrivateResource=
|
||||
@ -5837,3 +5837,13 @@ Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
[Unit580]
|
||||
FileName=COpenGLExtensionHandler.cpp
|
||||
Folder=video_impl/OpenGL
|
||||
Compile=1
|
||||
CompileCpp=1
|
||||
Link=1
|
||||
Priority=1000
|
||||
OverrideBuildCmd=0
|
||||
BuildCmd=
|
||||
|
||||
|
@ -983,6 +983,12 @@
|
||||
<File
|
||||
RelativePath=".\COpenGLTexture.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\COpenGLExtensionHandler.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\COpenGLExtensionHandler.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\glext.h">
|
||||
</File>
|
||||
|
@ -1168,6 +1168,14 @@
|
||||
RelativePath=".\COpenGLTexture.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\COpenGLExtensionHandler.cpp"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\COpenGLExtensionHandler.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\glext.h"
|
||||
>
|
||||
|
@ -53,7 +53,7 @@
|
||||
<Option target="default"/>
|
||||
</Unit>
|
||||
<Unit filename="..\..\include\EDriverTypes.h">
|
||||
<Option compilerVar="CPP"/>
|
||||
<Option compilerVar=""/>
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
<Option target="default"/>
|
||||
@ -1900,6 +1900,16 @@
|
||||
<Option link="0"/>
|
||||
<Option target="default"/>
|
||||
</Unit>
|
||||
<Unit filename="COpenGLExtensionHandler.cpp">
|
||||
<Option compilerVar="CPP"/>
|
||||
<Option target="default"/>
|
||||
</Unit>
|
||||
<Unit filename="COpenGLExtensionHandler.h">
|
||||
<Option compilerVar="CPP"/>
|
||||
<Option compile="0"/>
|
||||
<Option link="0"/>
|
||||
<Option target="default"/>
|
||||
</Unit>
|
||||
<Unit filename="CPakReader.cpp">
|
||||
<Option compilerVar="CPP"/>
|
||||
<Option target="default"/>
|
||||
|
@ -20,7 +20,7 @@ VERSION = 1.3.0
|
||||
|
||||
#List of object files, separated based on engine architecture
|
||||
IRROBJ = C3DSMeshFileLoader.o COgreMeshFileLoader.o COBJMeshFileLoader.o CAnimatedMeshMD2.o CAnimatedMeshMD3.o CMD3MeshFileLoader.o CAnimatedMeshMS3D.o CAnimatedMeshB3d.o CAnimatedMeshSceneNode.o CBillboardSceneNode.o CCameraFPSSceneNode.o CCameraMayaSceneNode.o CCameraSceneNode.o CColladaFileLoader.o CCSMLoader.o CDefaultMeshFormatLoader.o CDMFLoader.o CDummyTransformationSceneNode.o CEmptySceneNode.o CGeometryCreator.o CLightSceneNode.o CLMTSMeshFileLoader.o CMeshManipulator.o CMeshSceneNode.o CMetaTriangleSelector.o CMY3DMeshFileLoader.o COCTLoader.o COctTreeSceneNode.o COctTreeTriangleSelector.o CParticleBoxEmitter.o CParticleFadeOutAffector.o CParticleGravityAffector.o CParticlePointEmitter.o CParticleSystemSceneNode.o CQ3LevelMesh.o CSceneCollisionManager.o CSceneManager.o CSceneNodeAnimatorCollisionResponse.o CSceneNodeAnimatorDelete.o CSceneNodeAnimatorFlyCircle.o CSceneNodeAnimatorFlyStraight.o CSceneNodeAnimatorFollowSpline.o CSceneNodeAnimatorRotation.o CSceneNodeAnimatorTexture.o CShadowVolumeSceneNode.o CSkyBoxSceneNode.o CSkyDomeSceneNode.o CTerrainSceneNode.o CTerrainTriangleSelector.o CCubeSceneNode.o CSphereSceneNode.o CTextSceneNode.o CTriangleBBSelector.o CTriangleSelector.o CWaterSurfaceSceneNode.o CXAnimationPlayer.o CXFileReader.o CXMeshFileLoader.o CMeshCache.o CDefaultSceneNodeAnimatorFactory.o CDefaultSceneNodeFactory.o CQuake3ShaderSceneNode.o
|
||||
IRRVIDEOOBJ = COpenGLDriver.o COpenGLNormalMapRenderer.o COpenGLParallaxMapRenderer.o COpenGLShaderMaterialRenderer.o COpenGLTexture.o COpenGLSLMaterialRenderer.o CD3D8Driver.o CD3D8NormalMapRenderer.o CD3D8ParallaxMapRenderer.o CD3D8ShaderMaterialRenderer.o CD3D8Texture.o CColorConverter.o CFPSCounter.o CImage.o CImageLoaderBMP.o CImageLoaderJPG.o CImageLoaderPCX.o CImageLoaderPNG.o CImageLoaderPSD.o CImageLoaderTGA.o CImageWriterBMP.o CImageWriterJPG.o CImageWriterPCX.o CImageWriterPNG.o CImageWriterPPM.o CImageWriterPSD.o CImageWriterTGA.o CNullDriver.o CD3D9Driver.o CD3D9HLSLMaterialRenderer.o CD3D9NormalMapRenderer.o CD3D9ParallaxMapRenderer.o CD3D9ShaderMaterialRenderer.o CD3D9Texture.o CVideoModeList.o
|
||||
IRRVIDEOOBJ = COpenGLDriver.o COpenGLNormalMapRenderer.o COpenGLParallaxMapRenderer.o COpenGLShaderMaterialRenderer.o COpenGLTexture.o COpenGLSLMaterialRenderer.o COpenGLExtensionHandler.o CD3D8Driver.o CD3D8NormalMapRenderer.o CD3D8ParallaxMapRenderer.o CD3D8ShaderMaterialRenderer.o CD3D8Texture.o CColorConverter.o CFPSCounter.o CImage.o CImageLoaderBMP.o CImageLoaderJPG.o CImageLoaderPCX.o CImageLoaderPNG.o CImageLoaderPSD.o CImageLoaderTGA.o CImageWriterBMP.o CImageWriterJPG.o CImageWriterPCX.o CImageWriterPNG.o CImageWriterPPM.o CImageWriterPSD.o CImageWriterTGA.o CNullDriver.o CD3D9Driver.o CD3D9HLSLMaterialRenderer.o CD3D9NormalMapRenderer.o CD3D9ParallaxMapRenderer.o CD3D9ShaderMaterialRenderer.o CD3D9Texture.o CVideoModeList.o
|
||||
IRRSWRENDEROBJ = CSoftwareDriver.o CSoftwareTexture.o CTRFlat.o CTRFlatWire.o CTRGouraud.o CTRGouraudWire.o CTRTextureFlat.o CTRTextureFlatWire.o CTRTextureGouraud.o CTRTextureGouraudAdd.o CTRTextureGouraudNoZ.o CTRTextureGouraudWire.o CZBuffer.o CTRTextureGouraudVertexAlpha2.o CTRTextureGouraudNoZ2.o CTRTextureLightMap2_M2.o CTRTextureLightMap2_M4.o CTRTextureLightMap2_M1.o CSoftwareDriver2.o CSoftwareTexture2.o CTRTextureGouraud2.o CTRGouraud2.o CTRGouraudAlpha2.o CTRGouraudAlphaNoZ2.o CTRTextureDetailMap2.o CTRTextureGouraudAdd2.o CTRTextureGouraudAddNoZ2.o CTRTextureWire2.o CTRTextureLightMap2_Add.o CTRTextureLightMapGouraud2_M4.o IBurningShader.o CTRTextureBlend.o CTRTextureGouraudAlpha.o CTRTextureGouraudAlphaNoZ.o CDepthBuffer.o
|
||||
IRRIOOBJ = CFileList.o CFileSystem.o CLimitReadFile.o CMemoryReadFile.o CReadFile.o CWriteFile.o CXMLReader.o CXMLWriter.o CZipReader.o CPakReader.o irrXML.o CAttributes.o
|
||||
IRROTHEROBJ = CIrrDeviceSDL.o CIrrDeviceLinux.o CIrrDeviceStub.o CIrrDeviceWin32.o CLogger.o COSOperator.o Irrlicht.o os.o
|
||||
@ -42,7 +42,7 @@ CXXFLAGS += -g
|
||||
else
|
||||
CXXFLAGS += -fexpensive-optimizations -O3
|
||||
endif
|
||||
CFLAGS := -fexpensive-optimizations -O3 -DPNG_NO_MMX_CODE
|
||||
CFLAGS := -fexpensive-optimizations -O3 -DPNG_NO_MMX_CODE -DPNG_NO_MNG_FEATURES
|
||||
|
||||
#Linux specific options
|
||||
STATIC_LIB = libIrrlicht.a
|
||||
@ -51,7 +51,8 @@ IRRLICHT_DLL := ../../bin/Win32-gcc/Irrlicht.dll
|
||||
LIB_PATH = ../../lib/$(SYSTEM)
|
||||
INSTALL_DIR = /usr/local/lib
|
||||
staticlib sharedlib install: SYSTEM = Linux
|
||||
staticlib sharedlib : LDFLAGS = -L/usr/X11R6/lib --no-export-all-symbols --add-stdcall-alias -lGLU -lGL -lXxf86vm
|
||||
staticlib sharedlib : LDFLAGS = --no-export-all-symbols --add-stdcall-alias
|
||||
sharedlib : LDFLAGS += -L/usr/X11R6/lib -lGLU -lGL -lXxf86vm
|
||||
staticlib sharedlib : CXXINCS += -I/usr/X11R6/include
|
||||
|
||||
#Windows specific options
|
||||
|
Loading…
x
Reference in New Issue
Block a user