diff options
author | David Walter Seikel | 2013-01-13 18:54:10 +1000 |
---|---|---|
committer | David Walter Seikel | 2013-01-13 18:54:10 +1000 |
commit | 959831f4ef5a3e797f576c3de08cd65032c997ad (patch) | |
tree | e7351908be5995f0b325b2ebeaa02d5a34b82583 /libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.cpp | |
parent | Add info about changes to Irrlicht. (diff) | |
download | SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.zip SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.gz SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.bz2 SledjHamr-959831f4ef5a3e797f576c3de08cd65032c997ad.tar.xz |
Remove damned ancient DOS line endings from Irrlicht. Hopefully I did not go overboard.
Diffstat (limited to '')
-rw-r--r-- | libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.cpp | 1608 |
1 files changed, 804 insertions, 804 deletions
diff --git a/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.cpp b/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.cpp index ae64ffd..01d2930 100644 --- a/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.cpp +++ b/libraries/irrlicht-1.8/source/Irrlicht/COpenGLExtensionHandler.cpp | |||
@@ -1,804 +1,804 @@ | |||
1 | // Copyright (C) 2002-2012 Nikolaus Gebhardt | 1 | // Copyright (C) 2002-2012 Nikolaus Gebhardt |
2 | // This file is part of the "Irrlicht Engine". | 2 | // This file is part of the "Irrlicht Engine". |
3 | // For conditions of distribution and use, see copyright notice in irrlicht.h | 3 | // For conditions of distribution and use, see copyright notice in irrlicht.h |
4 | 4 | ||
5 | #include "IrrCompileConfig.h" | 5 | #include "IrrCompileConfig.h" |
6 | 6 | ||
7 | #ifdef _IRR_COMPILE_WITH_OPENGL_ | 7 | #ifdef _IRR_COMPILE_WITH_OPENGL_ |
8 | 8 | ||
9 | #include "COpenGLExtensionHandler.h" | 9 | #include "COpenGLExtensionHandler.h" |
10 | #include "irrString.h" | 10 | #include "irrString.h" |
11 | #include "SMaterial.h" // for MATERIAL_MAX_TEXTURES | 11 | #include "SMaterial.h" // for MATERIAL_MAX_TEXTURES |
12 | #include "fast_atof.h" | 12 | #include "fast_atof.h" |
13 | 13 | ||
14 | namespace irr | 14 | namespace irr |
15 | { | 15 | { |
16 | namespace video | 16 | namespace video |
17 | { | 17 | { |
18 | 18 | ||
19 | COpenGLExtensionHandler::COpenGLExtensionHandler() : | 19 | COpenGLExtensionHandler::COpenGLExtensionHandler() : |
20 | StencilBuffer(false), MultiTextureExtension(false), | 20 | StencilBuffer(false), MultiTextureExtension(false), |
21 | TextureCompressionExtension(false), | 21 | TextureCompressionExtension(false), |
22 | MaxSupportedTextures(1), MaxTextureUnits(1), MaxLights(1), | 22 | MaxSupportedTextures(1), MaxTextureUnits(1), MaxLights(1), |
23 | MaxAnisotropy(1), MaxUserClipPlanes(0), MaxAuxBuffers(0), | 23 | MaxAnisotropy(1), MaxUserClipPlanes(0), MaxAuxBuffers(0), |
24 | MaxMultipleRenderTargets(1), MaxIndices(65535), | 24 | MaxMultipleRenderTargets(1), MaxIndices(65535), |
25 | MaxTextureSize(1), MaxGeometryVerticesOut(0), | 25 | MaxTextureSize(1), MaxGeometryVerticesOut(0), |
26 | MaxTextureLODBias(0.f), Version(0), ShaderLanguageVersion(0), | 26 | MaxTextureLODBias(0.f), Version(0), ShaderLanguageVersion(0), |
27 | OcclusionQuerySupport(false) | 27 | OcclusionQuerySupport(false) |
28 | #ifdef _IRR_OPENGL_USE_EXTPOINTER_ | 28 | #ifdef _IRR_OPENGL_USE_EXTPOINTER_ |
29 | ,pGlActiveTextureARB(0), pGlClientActiveTextureARB(0), | 29 | ,pGlActiveTextureARB(0), pGlClientActiveTextureARB(0), |
30 | pGlGenProgramsARB(0), pGlGenProgramsNV(0), | 30 | pGlGenProgramsARB(0), pGlGenProgramsNV(0), |
31 | pGlBindProgramARB(0), pGlBindProgramNV(0), | 31 | pGlBindProgramARB(0), pGlBindProgramNV(0), |
32 | pGlDeleteProgramsARB(0), pGlDeleteProgramsNV(0), | 32 | pGlDeleteProgramsARB(0), pGlDeleteProgramsNV(0), |
33 | pGlProgramStringARB(0), pGlLoadProgramNV(0), | 33 | pGlProgramStringARB(0), pGlLoadProgramNV(0), |
34 | pGlProgramLocalParameter4fvARB(0), | 34 | pGlProgramLocalParameter4fvARB(0), |
35 | pGlCreateShaderObjectARB(0), pGlShaderSourceARB(0), | 35 | pGlCreateShaderObjectARB(0), pGlShaderSourceARB(0), |
36 | pGlCompileShaderARB(0), pGlCreateProgramObjectARB(0), pGlAttachObjectARB(0), | 36 | pGlCompileShaderARB(0), pGlCreateProgramObjectARB(0), pGlAttachObjectARB(0), |
37 | pGlLinkProgramARB(0), pGlUseProgramObjectARB(0), pGlDeleteObjectARB(0), | 37 | pGlLinkProgramARB(0), pGlUseProgramObjectARB(0), pGlDeleteObjectARB(0), |
38 | pGlCreateProgram(0), pGlUseProgram(0), | 38 | pGlCreateProgram(0), pGlUseProgram(0), |
39 | pGlDeleteProgram(0), pGlDeleteShader(0), | 39 | pGlDeleteProgram(0), pGlDeleteShader(0), |
40 | pGlGetAttachedObjectsARB(0), pGlGetAttachedShaders(0), | 40 | pGlGetAttachedObjectsARB(0), pGlGetAttachedShaders(0), |
41 | pGlCreateShader(0), pGlShaderSource(0), pGlCompileShader(0), | 41 | pGlCreateShader(0), pGlShaderSource(0), pGlCompileShader(0), |
42 | pGlAttachShader(0), pGlLinkProgram(0), | 42 | pGlAttachShader(0), pGlLinkProgram(0), |
43 | pGlGetInfoLogARB(0), pGlGetShaderInfoLog(0), pGlGetProgramInfoLog(0), | 43 | pGlGetInfoLogARB(0), pGlGetShaderInfoLog(0), pGlGetProgramInfoLog(0), |
44 | pGlGetObjectParameterivARB(0), pGlGetShaderiv(0), pGlGetProgramiv(0), | 44 | pGlGetObjectParameterivARB(0), pGlGetShaderiv(0), pGlGetProgramiv(0), |
45 | pGlGetUniformLocationARB(0), pGlGetUniformLocation(0), | 45 | pGlGetUniformLocationARB(0), pGlGetUniformLocation(0), |
46 | pGlUniform1fvARB(0), pGlUniform2fvARB(0), pGlUniform3fvARB(0), pGlUniform4fvARB(0), | 46 | pGlUniform1fvARB(0), pGlUniform2fvARB(0), pGlUniform3fvARB(0), pGlUniform4fvARB(0), |
47 | pGlUniform1ivARB(0), pGlUniform2ivARB(0), pGlUniform3ivARB(0), pGlUniform4ivARB(0), | 47 | pGlUniform1ivARB(0), pGlUniform2ivARB(0), pGlUniform3ivARB(0), pGlUniform4ivARB(0), |
48 | pGlUniformMatrix2fvARB(0), pGlUniformMatrix3fvARB(0), pGlUniformMatrix4fvARB(0), | 48 | pGlUniformMatrix2fvARB(0), pGlUniformMatrix3fvARB(0), pGlUniformMatrix4fvARB(0), |
49 | pGlGetActiveUniformARB(0), pGlGetActiveUniform(0), | 49 | pGlGetActiveUniformARB(0), pGlGetActiveUniform(0), |
50 | pGlPointParameterfARB(0), pGlPointParameterfvARB(0), | 50 | pGlPointParameterfARB(0), pGlPointParameterfvARB(0), |
51 | pGlStencilFuncSeparate(0), pGlStencilOpSeparate(0), | 51 | pGlStencilFuncSeparate(0), pGlStencilOpSeparate(0), |
52 | pGlStencilFuncSeparateATI(0), pGlStencilOpSeparateATI(0), | 52 | pGlStencilFuncSeparateATI(0), pGlStencilOpSeparateATI(0), |
53 | pGlCompressedTexImage2D(0), | 53 | pGlCompressedTexImage2D(0), |
54 | // ARB framebuffer object | 54 | // ARB framebuffer object |
55 | pGlBindFramebuffer(0), pGlDeleteFramebuffers(0), pGlGenFramebuffers(0), | 55 | pGlBindFramebuffer(0), pGlDeleteFramebuffers(0), pGlGenFramebuffers(0), |
56 | pGlCheckFramebufferStatus(0), pGlFramebufferTexture2D(0), | 56 | pGlCheckFramebufferStatus(0), pGlFramebufferTexture2D(0), |
57 | pGlBindRenderbuffer(0), pGlDeleteRenderbuffers(0), pGlGenRenderbuffers(0), | 57 | pGlBindRenderbuffer(0), pGlDeleteRenderbuffers(0), pGlGenRenderbuffers(0), |
58 | pGlRenderbufferStorage(0), pGlFramebufferRenderbuffer(0), pGlGenerateMipmap(0), | 58 | pGlRenderbufferStorage(0), pGlFramebufferRenderbuffer(0), pGlGenerateMipmap(0), |
59 | // EXT framebuffer object | 59 | // EXT framebuffer object |
60 | pGlBindFramebufferEXT(0), pGlDeleteFramebuffersEXT(0), pGlGenFramebuffersEXT(0), | 60 | pGlBindFramebufferEXT(0), pGlDeleteFramebuffersEXT(0), pGlGenFramebuffersEXT(0), |
61 | pGlCheckFramebufferStatusEXT(0), pGlFramebufferTexture2DEXT(0), | 61 | pGlCheckFramebufferStatusEXT(0), pGlFramebufferTexture2DEXT(0), |
62 | pGlBindRenderbufferEXT(0), pGlDeleteRenderbuffersEXT(0), pGlGenRenderbuffersEXT(0), | 62 | pGlBindRenderbufferEXT(0), pGlDeleteRenderbuffersEXT(0), pGlGenRenderbuffersEXT(0), |
63 | pGlRenderbufferStorageEXT(0), pGlFramebufferRenderbufferEXT(0), pGlGenerateMipmapEXT(0), | 63 | pGlRenderbufferStorageEXT(0), pGlFramebufferRenderbufferEXT(0), pGlGenerateMipmapEXT(0), |
64 | // MRTs | 64 | // MRTs |
65 | pGlDrawBuffersARB(0), pGlDrawBuffersATI(0), | 65 | pGlDrawBuffersARB(0), pGlDrawBuffersATI(0), |
66 | pGlGenBuffersARB(0), pGlBindBufferARB(0), pGlBufferDataARB(0), pGlDeleteBuffersARB(0), | 66 | pGlGenBuffersARB(0), pGlBindBufferARB(0), pGlBufferDataARB(0), pGlDeleteBuffersARB(0), |
67 | pGlBufferSubDataARB(0), pGlGetBufferSubDataARB(0), pGlMapBufferARB(0), pGlUnmapBufferARB(0), | 67 | pGlBufferSubDataARB(0), pGlGetBufferSubDataARB(0), pGlMapBufferARB(0), pGlUnmapBufferARB(0), |
68 | pGlIsBufferARB(0), pGlGetBufferParameterivARB(0), pGlGetBufferPointervARB(0), | 68 | pGlIsBufferARB(0), pGlGetBufferParameterivARB(0), pGlGetBufferPointervARB(0), |
69 | pGlProvokingVertexARB(0), pGlProvokingVertexEXT(0), | 69 | pGlProvokingVertexARB(0), pGlProvokingVertexEXT(0), |
70 | pGlColorMaskIndexedEXT(0), pGlEnableIndexedEXT(0), pGlDisableIndexedEXT(0), | 70 | pGlColorMaskIndexedEXT(0), pGlEnableIndexedEXT(0), pGlDisableIndexedEXT(0), |
71 | pGlBlendFuncIndexedAMD(0), pGlBlendFunciARB(0), | 71 | pGlBlendFuncIndexedAMD(0), pGlBlendFunciARB(0), |
72 | pGlBlendEquationIndexedAMD(0), pGlBlendEquationiARB(0), | 72 | pGlBlendEquationIndexedAMD(0), pGlBlendEquationiARB(0), |
73 | pGlProgramParameteriARB(0), pGlProgramParameteriEXT(0), | 73 | pGlProgramParameteriARB(0), pGlProgramParameteriEXT(0), |
74 | pGlGenQueriesARB(0), pGlDeleteQueriesARB(0), pGlIsQueryARB(0), | 74 | pGlGenQueriesARB(0), pGlDeleteQueriesARB(0), pGlIsQueryARB(0), |
75 | pGlBeginQueryARB(0), pGlEndQueryARB(0), pGlGetQueryivARB(0), | 75 | pGlBeginQueryARB(0), pGlEndQueryARB(0), pGlGetQueryivARB(0), |
76 | pGlGetQueryObjectivARB(0), pGlGetQueryObjectuivARB(0), | 76 | pGlGetQueryObjectivARB(0), pGlGetQueryObjectuivARB(0), |
77 | pGlGenOcclusionQueriesNV(0), pGlDeleteOcclusionQueriesNV(0), | 77 | pGlGenOcclusionQueriesNV(0), pGlDeleteOcclusionQueriesNV(0), |
78 | pGlIsOcclusionQueryNV(0), pGlBeginOcclusionQueryNV(0), | 78 | pGlIsOcclusionQueryNV(0), pGlBeginOcclusionQueryNV(0), |
79 | pGlEndOcclusionQueryNV(0), pGlGetOcclusionQueryivNV(0), | 79 | pGlEndOcclusionQueryNV(0), pGlGetOcclusionQueryivNV(0), |
80 | pGlGetOcclusionQueryuivNV(0), | 80 | pGlGetOcclusionQueryuivNV(0), |
81 | pGlBlendEquationEXT(0), pGlBlendEquation(0) | 81 | pGlBlendEquationEXT(0), pGlBlendEquation(0) |
82 | #if defined(GLX_SGI_swap_control) | 82 | #if defined(GLX_SGI_swap_control) |
83 | ,pGlxSwapIntervalSGI(0) | 83 | ,pGlxSwapIntervalSGI(0) |
84 | #endif | 84 | #endif |
85 | #if defined(GLX_EXT_swap_control) | 85 | #if defined(GLX_EXT_swap_control) |
86 | ,pGlxSwapIntervalEXT(0) | 86 | ,pGlxSwapIntervalEXT(0) |
87 | #endif | 87 | #endif |
88 | #if defined(WGL_EXT_swap_control) | 88 | #if defined(WGL_EXT_swap_control) |
89 | ,pWglSwapIntervalEXT(0) | 89 | ,pWglSwapIntervalEXT(0) |
90 | #endif | 90 | #endif |
91 | #if defined(GLX_MESA_swap_control) | 91 | #if defined(GLX_MESA_swap_control) |
92 | ,pGlxSwapIntervalMESA(0) | 92 | ,pGlxSwapIntervalMESA(0) |
93 | #endif | 93 | #endif |
94 | #endif // _IRR_OPENGL_USE_EXTPOINTER_ | 94 | #endif // _IRR_OPENGL_USE_EXTPOINTER_ |
95 | { | 95 | { |
96 | for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i) | 96 | for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i) |
97 | FeatureAvailable[i]=false; | 97 | FeatureAvailable[i]=false; |
98 | DimAliasedLine[0]=1.f; | 98 | DimAliasedLine[0]=1.f; |
99 | DimAliasedLine[1]=1.f; | 99 | DimAliasedLine[1]=1.f; |
100 | DimAliasedPoint[0]=1.f; | 100 | DimAliasedPoint[0]=1.f; |
101 | DimAliasedPoint[1]=1.f; | 101 | DimAliasedPoint[1]=1.f; |
102 | DimSmoothedLine[0]=1.f; | 102 | DimSmoothedLine[0]=1.f; |
103 | DimSmoothedLine[1]=1.f; | 103 | DimSmoothedLine[1]=1.f; |
104 | DimSmoothedPoint[0]=1.f; | 104 | DimSmoothedPoint[0]=1.f; |
105 | DimSmoothedPoint[1]=1.f; | 105 | DimSmoothedPoint[1]=1.f; |
106 | } | 106 | } |
107 | 107 | ||
108 | 108 | ||
109 | void COpenGLExtensionHandler::dump() const | 109 | void COpenGLExtensionHandler::dump() const |
110 | { | 110 | { |
111 | for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i) | 111 | for (u32 i=0; i<IRR_OpenGL_Feature_Count; ++i) |
112 | os::Printer::log(OpenGLFeatureStrings[i], FeatureAvailable[i]?" true":" false"); | 112 | os::Printer::log(OpenGLFeatureStrings[i], FeatureAvailable[i]?" true":" false"); |
113 | } | 113 | } |
114 | 114 | ||
115 | 115 | ||
116 | void COpenGLExtensionHandler::dumpFramebufferFormats() const | 116 | void COpenGLExtensionHandler::dumpFramebufferFormats() const |
117 | { | 117 | { |
118 | #ifdef _IRR_WINDOWS_API_ | 118 | #ifdef _IRR_WINDOWS_API_ |
119 | HDC hdc=wglGetCurrentDC(); | 119 | HDC hdc=wglGetCurrentDC(); |
120 | core::stringc wglExtensions; | 120 | core::stringc wglExtensions; |
121 | #ifdef WGL_ARB_extensions_string | 121 | #ifdef WGL_ARB_extensions_string |
122 | PFNWGLGETEXTENSIONSSTRINGARBPROC irrGetExtensionsString = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB"); | 122 | PFNWGLGETEXTENSIONSSTRINGARBPROC irrGetExtensionsString = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB"); |
123 | if (irrGetExtensionsString) | 123 | if (irrGetExtensionsString) |
124 | wglExtensions = irrGetExtensionsString(hdc); | 124 | wglExtensions = irrGetExtensionsString(hdc); |
125 | #elif defined(WGL_EXT_extensions_string) | 125 | #elif defined(WGL_EXT_extensions_string) |
126 | PFNWGLGETEXTENSIONSSTRINGEXTPROC irrGetExtensionsString = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT"); | 126 | PFNWGLGETEXTENSIONSSTRINGEXTPROC irrGetExtensionsString = (PFNWGLGETEXTENSIONSSTRINGEXTPROC)wglGetProcAddress("wglGetExtensionsStringEXT"); |
127 | if (irrGetExtensionsString) | 127 | if (irrGetExtensionsString) |
128 | wglExtensions = irrGetExtensionsString(hdc); | 128 | wglExtensions = irrGetExtensionsString(hdc); |
129 | #endif | 129 | #endif |
130 | const bool pixel_format_supported = (wglExtensions.find("WGL_ARB_pixel_format") != -1); | 130 | const bool pixel_format_supported = (wglExtensions.find("WGL_ARB_pixel_format") != -1); |
131 | const bool multi_sample_supported = ((wglExtensions.find("WGL_ARB_multisample") != -1) || | 131 | const bool multi_sample_supported = ((wglExtensions.find("WGL_ARB_multisample") != -1) || |
132 | (wglExtensions.find("WGL_EXT_multisample") != -1) || (wglExtensions.find("WGL_3DFX_multisample") != -1) ); | 132 | (wglExtensions.find("WGL_EXT_multisample") != -1) || (wglExtensions.find("WGL_3DFX_multisample") != -1) ); |
133 | #ifdef _DEBUG | 133 | #ifdef _DEBUG |
134 | os::Printer::log("WGL_extensions", wglExtensions); | 134 | os::Printer::log("WGL_extensions", wglExtensions); |
135 | #endif | 135 | #endif |
136 | 136 | ||
137 | #ifdef WGL_ARB_pixel_format | 137 | #ifdef WGL_ARB_pixel_format |
138 | PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormat_ARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB"); | 138 | PFNWGLCHOOSEPIXELFORMATARBPROC wglChoosePixelFormat_ARB = (PFNWGLCHOOSEPIXELFORMATARBPROC)wglGetProcAddress("wglChoosePixelFormatARB"); |
139 | if (pixel_format_supported && wglChoosePixelFormat_ARB) | 139 | if (pixel_format_supported && wglChoosePixelFormat_ARB) |
140 | { | 140 | { |
141 | // This value determines the number of samples used for antialiasing | 141 | // This value determines the number of samples used for antialiasing |
142 | // My experience is that 8 does not show a big | 142 | // My experience is that 8 does not show a big |
143 | // improvement over 4, but 4 shows a big improvement | 143 | // improvement over 4, but 4 shows a big improvement |
144 | // over 2. | 144 | // over 2. |
145 | 145 | ||
146 | PFNWGLGETPIXELFORMATATTRIBIVARBPROC wglGetPixelFormatAttribiv_ARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)wglGetProcAddress("wglGetPixelFormatAttribivARB"); | 146 | PFNWGLGETPIXELFORMATATTRIBIVARBPROC wglGetPixelFormatAttribiv_ARB = (PFNWGLGETPIXELFORMATATTRIBIVARBPROC)wglGetProcAddress("wglGetPixelFormatAttribivARB"); |
147 | if (wglGetPixelFormatAttribiv_ARB) | 147 | if (wglGetPixelFormatAttribiv_ARB) |
148 | { | 148 | { |
149 | int vals[128]; | 149 | int vals[128]; |
150 | int atts[] = { | 150 | int atts[] = { |
151 | WGL_NUMBER_PIXEL_FORMATS_ARB, | 151 | WGL_NUMBER_PIXEL_FORMATS_ARB, |
152 | WGL_DRAW_TO_BITMAP_ARB, | 152 | WGL_DRAW_TO_BITMAP_ARB, |
153 | WGL_ACCELERATION_ARB, | 153 | WGL_ACCELERATION_ARB, |
154 | WGL_NEED_PALETTE_ARB, | 154 | WGL_NEED_PALETTE_ARB, |
155 | WGL_NEED_SYSTEM_PALETTE_ARB, | 155 | WGL_NEED_SYSTEM_PALETTE_ARB, |
156 | WGL_SWAP_LAYER_BUFFERS_ARB, | 156 | WGL_SWAP_LAYER_BUFFERS_ARB, |
157 | WGL_SWAP_METHOD_ARB, | 157 | WGL_SWAP_METHOD_ARB, |
158 | WGL_NUMBER_OVERLAYS_ARB, | 158 | WGL_NUMBER_OVERLAYS_ARB, |
159 | WGL_NUMBER_UNDERLAYS_ARB, | 159 | WGL_NUMBER_UNDERLAYS_ARB, |
160 | WGL_TRANSPARENT_ARB, | 160 | WGL_TRANSPARENT_ARB, |
161 | WGL_TRANSPARENT_RED_VALUE_ARB, | 161 | WGL_TRANSPARENT_RED_VALUE_ARB, |
162 | WGL_TRANSPARENT_GREEN_VALUE_ARB, | 162 | WGL_TRANSPARENT_GREEN_VALUE_ARB, |
163 | WGL_TRANSPARENT_BLUE_VALUE_ARB, | 163 | WGL_TRANSPARENT_BLUE_VALUE_ARB, |
164 | WGL_TRANSPARENT_ALPHA_VALUE_ARB, | 164 | WGL_TRANSPARENT_ALPHA_VALUE_ARB, |
165 | WGL_TRANSPARENT_INDEX_VALUE_ARB, | 165 | WGL_TRANSPARENT_INDEX_VALUE_ARB, |
166 | WGL_SHARE_DEPTH_ARB, | 166 | WGL_SHARE_DEPTH_ARB, |
167 | WGL_SHARE_STENCIL_ARB, | 167 | WGL_SHARE_STENCIL_ARB, |
168 | WGL_SHARE_ACCUM_ARB, | 168 | WGL_SHARE_ACCUM_ARB, |
169 | WGL_SUPPORT_GDI_ARB, | 169 | WGL_SUPPORT_GDI_ARB, |
170 | WGL_SUPPORT_OPENGL_ARB, | 170 | WGL_SUPPORT_OPENGL_ARB, |
171 | WGL_DOUBLE_BUFFER_ARB, | 171 | WGL_DOUBLE_BUFFER_ARB, |
172 | WGL_STEREO_ARB, | 172 | WGL_STEREO_ARB, |
173 | WGL_PIXEL_TYPE_ARB, | 173 | WGL_PIXEL_TYPE_ARB, |
174 | WGL_COLOR_BITS_ARB, | 174 | WGL_COLOR_BITS_ARB, |
175 | WGL_RED_BITS_ARB, | 175 | WGL_RED_BITS_ARB, |
176 | WGL_RED_SHIFT_ARB, | 176 | WGL_RED_SHIFT_ARB, |
177 | WGL_GREEN_BITS_ARB, | 177 | WGL_GREEN_BITS_ARB, |
178 | WGL_GREEN_SHIFT_ARB, | 178 | WGL_GREEN_SHIFT_ARB, |
179 | WGL_BLUE_BITS_ARB, | 179 | WGL_BLUE_BITS_ARB, |
180 | WGL_BLUE_SHIFT_ARB, | 180 | WGL_BLUE_SHIFT_ARB, |
181 | WGL_ALPHA_BITS_ARB, | 181 | WGL_ALPHA_BITS_ARB, |
182 | WGL_ALPHA_SHIFT_ARB, | 182 | WGL_ALPHA_SHIFT_ARB, |
183 | WGL_ACCUM_BITS_ARB, | 183 | WGL_ACCUM_BITS_ARB, |
184 | WGL_ACCUM_RED_BITS_ARB, | 184 | WGL_ACCUM_RED_BITS_ARB, |
185 | WGL_ACCUM_GREEN_BITS_ARB, | 185 | WGL_ACCUM_GREEN_BITS_ARB, |
186 | WGL_ACCUM_BLUE_BITS_ARB, | 186 | WGL_ACCUM_BLUE_BITS_ARB, |
187 | WGL_ACCUM_ALPHA_BITS_ARB, | 187 | WGL_ACCUM_ALPHA_BITS_ARB, |
188 | WGL_DEPTH_BITS_ARB, | 188 | WGL_DEPTH_BITS_ARB, |
189 | WGL_STENCIL_BITS_ARB, | 189 | WGL_STENCIL_BITS_ARB, |
190 | WGL_AUX_BUFFERS_ARB | 190 | WGL_AUX_BUFFERS_ARB |
191 | #ifdef WGL_ARB_render_texture | 191 | #ifdef WGL_ARB_render_texture |
192 | ,WGL_BIND_TO_TEXTURE_RGB_ARB //40 | 192 | ,WGL_BIND_TO_TEXTURE_RGB_ARB //40 |
193 | ,WGL_BIND_TO_TEXTURE_RGBA_ARB | 193 | ,WGL_BIND_TO_TEXTURE_RGBA_ARB |
194 | #endif | 194 | #endif |
195 | #ifdef WGL_ARB_pbuffer | 195 | #ifdef WGL_ARB_pbuffer |
196 | ,WGL_DRAW_TO_PBUFFER_ARB //42 | 196 | ,WGL_DRAW_TO_PBUFFER_ARB //42 |
197 | ,WGL_MAX_PBUFFER_PIXELS_ARB | 197 | ,WGL_MAX_PBUFFER_PIXELS_ARB |
198 | ,WGL_MAX_PBUFFER_WIDTH_ARB | 198 | ,WGL_MAX_PBUFFER_WIDTH_ARB |
199 | ,WGL_MAX_PBUFFER_HEIGHT_ARB | 199 | ,WGL_MAX_PBUFFER_HEIGHT_ARB |
200 | #endif | 200 | #endif |
201 | #ifdef WGL_ARB_framebuffer_sRGB | 201 | #ifdef WGL_ARB_framebuffer_sRGB |
202 | ,WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB //46 | 202 | ,WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB //46 |
203 | #endif | 203 | #endif |
204 | #ifdef WGL_ARB_multisample | 204 | #ifdef WGL_ARB_multisample |
205 | ,WGL_SAMPLES_ARB //47 | 205 | ,WGL_SAMPLES_ARB //47 |
206 | ,WGL_SAMPLE_BUFFERS_ARB | 206 | ,WGL_SAMPLE_BUFFERS_ARB |
207 | #endif | 207 | #endif |
208 | #ifdef WGL_EXT_depth_float | 208 | #ifdef WGL_EXT_depth_float |
209 | ,WGL_DEPTH_FLOAT_EXT //49 | 209 | ,WGL_DEPTH_FLOAT_EXT //49 |
210 | #endif | 210 | #endif |
211 | ,0,0,0,0 | 211 | ,0,0,0,0 |
212 | }; | 212 | }; |
213 | size_t nums = sizeof(atts)/sizeof(int); | 213 | size_t nums = sizeof(atts)/sizeof(int); |
214 | const bool depth_float_supported= (wglExtensions.find("WGL_EXT_depth_float") != -1); | 214 | const bool depth_float_supported= (wglExtensions.find("WGL_EXT_depth_float") != -1); |
215 | if (!depth_float_supported) | 215 | if (!depth_float_supported) |
216 | { | 216 | { |
217 | memmove(&atts[49], &atts[50], (nums-50)*sizeof(int)); | 217 | memmove(&atts[49], &atts[50], (nums-50)*sizeof(int)); |
218 | nums -= 1; | 218 | nums -= 1; |
219 | } | 219 | } |
220 | if (!multi_sample_supported) | 220 | if (!multi_sample_supported) |
221 | { | 221 | { |
222 | memmove(&atts[47], &atts[49], (nums-49)*sizeof(int)); | 222 | memmove(&atts[47], &atts[49], (nums-49)*sizeof(int)); |
223 | nums -= 2; | 223 | nums -= 2; |
224 | } | 224 | } |
225 | const bool framebuffer_sRGB_supported= (wglExtensions.find("WGL_ARB_framebuffer_sRGB") != -1); | 225 | const bool framebuffer_sRGB_supported= (wglExtensions.find("WGL_ARB_framebuffer_sRGB") != -1); |
226 | if (!framebuffer_sRGB_supported) | 226 | if (!framebuffer_sRGB_supported) |
227 | { | 227 | { |
228 | memmove(&atts[46], &atts[47], (nums-47)*sizeof(int)); | 228 | memmove(&atts[46], &atts[47], (nums-47)*sizeof(int)); |
229 | nums -= 1; | 229 | nums -= 1; |
230 | } | 230 | } |
231 | const bool pbuffer_supported = (wglExtensions.find("WGL_ARB_pbuffer") != -1); | 231 | const bool pbuffer_supported = (wglExtensions.find("WGL_ARB_pbuffer") != -1); |
232 | if (!pbuffer_supported) | 232 | if (!pbuffer_supported) |
233 | { | 233 | { |
234 | memmove(&atts[42], &atts[46], (nums-46)*sizeof(int)); | 234 | memmove(&atts[42], &atts[46], (nums-46)*sizeof(int)); |
235 | nums -= 4; | 235 | nums -= 4; |
236 | } | 236 | } |
237 | const bool render_texture_supported = (wglExtensions.find("WGL_ARB_render_texture") != -1); | 237 | const bool render_texture_supported = (wglExtensions.find("WGL_ARB_render_texture") != -1); |
238 | if (!render_texture_supported) | 238 | if (!render_texture_supported) |
239 | { | 239 | { |
240 | memmove(&atts[40], &atts[42], (nums-42)*sizeof(int)); | 240 | memmove(&atts[40], &atts[42], (nums-42)*sizeof(int)); |
241 | nums -= 2; | 241 | nums -= 2; |
242 | } | 242 | } |
243 | wglGetPixelFormatAttribiv_ARB(hdc,0,0,1,atts,vals); | 243 | wglGetPixelFormatAttribiv_ARB(hdc,0,0,1,atts,vals); |
244 | const int count = vals[0]; | 244 | const int count = vals[0]; |
245 | atts[0]=WGL_DRAW_TO_WINDOW_ARB; | 245 | atts[0]=WGL_DRAW_TO_WINDOW_ARB; |
246 | for (int i=1; i<count; ++i) | 246 | for (int i=1; i<count; ++i) |
247 | { | 247 | { |
248 | memset(vals,0,sizeof(vals)); | 248 | memset(vals,0,sizeof(vals)); |
249 | #define tmplog(x,y) os::Printer::log(x, core::stringc(y).c_str()) | 249 | #define tmplog(x,y) os::Printer::log(x, core::stringc(y).c_str()) |
250 | const BOOL res = wglGetPixelFormatAttribiv_ARB(hdc,i,0,nums,atts,vals); | 250 | const BOOL res = wglGetPixelFormatAttribiv_ARB(hdc,i,0,nums,atts,vals); |
251 | if (FALSE==res) | 251 | if (FALSE==res) |
252 | continue; | 252 | continue; |
253 | tmplog("Pixel format ",i); | 253 | tmplog("Pixel format ",i); |
254 | u32 j=0; | 254 | u32 j=0; |
255 | tmplog("Draw to window " , vals[j]); | 255 | tmplog("Draw to window " , vals[j]); |
256 | tmplog("Draw to bitmap " , vals[++j]); | 256 | tmplog("Draw to bitmap " , vals[++j]); |
257 | ++j; | 257 | ++j; |
258 | tmplog("Acceleration " , (vals[j]==WGL_NO_ACCELERATION_ARB?"No": | 258 | tmplog("Acceleration " , (vals[j]==WGL_NO_ACCELERATION_ARB?"No": |
259 | vals[j]==WGL_GENERIC_ACCELERATION_ARB?"Generic":vals[j]==WGL_FULL_ACCELERATION_ARB?"Full":"ERROR")); | 259 | vals[j]==WGL_GENERIC_ACCELERATION_ARB?"Generic":vals[j]==WGL_FULL_ACCELERATION_ARB?"Full":"ERROR")); |
260 | tmplog("Need palette " , vals[++j]); | 260 | tmplog("Need palette " , vals[++j]); |
261 | tmplog("Need system palette " , vals[++j]); | 261 | tmplog("Need system palette " , vals[++j]); |
262 | tmplog("Swap layer buffers " , vals[++j]); | 262 | tmplog("Swap layer buffers " , vals[++j]); |
263 | ++j; | 263 | ++j; |
264 | tmplog("Swap method " , (vals[j]==WGL_SWAP_EXCHANGE_ARB?"Exchange": | 264 | tmplog("Swap method " , (vals[j]==WGL_SWAP_EXCHANGE_ARB?"Exchange": |
265 | vals[j]==WGL_SWAP_COPY_ARB?"Copy":vals[j]==WGL_SWAP_UNDEFINED_ARB?"Undefined":"ERROR")); | 265 | vals[j]==WGL_SWAP_COPY_ARB?"Copy":vals[j]==WGL_SWAP_UNDEFINED_ARB?"Undefined":"ERROR")); |
266 | tmplog("Number of overlays " , vals[++j]); | 266 | tmplog("Number of overlays " , vals[++j]); |
267 | tmplog("Number of underlays " , vals[++j]); | 267 | tmplog("Number of underlays " , vals[++j]); |
268 | tmplog("Transparent " , vals[++j]); | 268 | tmplog("Transparent " , vals[++j]); |
269 | tmplog("Transparent red value " , vals[++j]); | 269 | tmplog("Transparent red value " , vals[++j]); |
270 | tmplog("Transparent green value " , vals[++j]); | 270 | tmplog("Transparent green value " , vals[++j]); |
271 | tmplog("Transparent blue value " , vals[++j]); | 271 | tmplog("Transparent blue value " , vals[++j]); |
272 | tmplog("Transparent alpha value " , vals[++j]); | 272 | tmplog("Transparent alpha value " , vals[++j]); |
273 | tmplog("Transparent index value " , vals[++j]); | 273 | tmplog("Transparent index value " , vals[++j]); |
274 | tmplog("Share depth " , vals[++j]); | 274 | tmplog("Share depth " , vals[++j]); |
275 | tmplog("Share stencil " , vals[++j]); | 275 | tmplog("Share stencil " , vals[++j]); |
276 | tmplog("Share accum " , vals[++j]); | 276 | tmplog("Share accum " , vals[++j]); |
277 | tmplog("Support GDI " , vals[++j]); | 277 | tmplog("Support GDI " , vals[++j]); |
278 | tmplog("Support OpenGL " , vals[++j]); | 278 | tmplog("Support OpenGL " , vals[++j]); |
279 | tmplog("Double Buffer " , vals[++j]); | 279 | tmplog("Double Buffer " , vals[++j]); |
280 | tmplog("Stereo Buffer " , vals[++j]); | 280 | tmplog("Stereo Buffer " , vals[++j]); |
281 | tmplog("Pixel type " , vals[++j]); | 281 | tmplog("Pixel type " , vals[++j]); |
282 | tmplog("Color bits" , vals[++j]); | 282 | tmplog("Color bits" , vals[++j]); |
283 | tmplog("Red bits " , vals[++j]); | 283 | tmplog("Red bits " , vals[++j]); |
284 | tmplog("Red shift " , vals[++j]); | 284 | tmplog("Red shift " , vals[++j]); |
285 | tmplog("Green bits " , vals[++j]); | 285 | tmplog("Green bits " , vals[++j]); |
286 | tmplog("Green shift " , vals[++j]); | 286 | tmplog("Green shift " , vals[++j]); |
287 | tmplog("Blue bits " , vals[++j]); | 287 | tmplog("Blue bits " , vals[++j]); |
288 | tmplog("Blue shift " , vals[++j]); | 288 | tmplog("Blue shift " , vals[++j]); |
289 | tmplog("Alpha bits " , vals[++j]); | 289 | tmplog("Alpha bits " , vals[++j]); |
290 | tmplog("Alpha Shift " , vals[++j]); | 290 | tmplog("Alpha Shift " , vals[++j]); |
291 | tmplog("Accum bits " , vals[++j]); | 291 | tmplog("Accum bits " , vals[++j]); |
292 | tmplog("Accum red bits " , vals[++j]); | 292 | tmplog("Accum red bits " , vals[++j]); |
293 | tmplog("Accum green bits " , vals[++j]); | 293 | tmplog("Accum green bits " , vals[++j]); |
294 | tmplog("Accum blue bits " , vals[++j]); | 294 | tmplog("Accum blue bits " , vals[++j]); |
295 | tmplog("Accum alpha bits " , vals[++j]); | 295 | tmplog("Accum alpha bits " , vals[++j]); |
296 | tmplog("Depth bits " , vals[++j]); | 296 | tmplog("Depth bits " , vals[++j]); |
297 | tmplog("Stencil bits " , vals[++j]); | 297 | tmplog("Stencil bits " , vals[++j]); |
298 | tmplog("Aux buffers " , vals[++j]); | 298 | tmplog("Aux buffers " , vals[++j]); |
299 | if (render_texture_supported) | 299 | if (render_texture_supported) |
300 | { | 300 | { |
301 | tmplog("Bind to texture RGB" , vals[++j]); | 301 | tmplog("Bind to texture RGB" , vals[++j]); |
302 | tmplog("Bind to texture RGBA" , vals[++j]); | 302 | tmplog("Bind to texture RGBA" , vals[++j]); |
303 | } | 303 | } |
304 | if (pbuffer_supported) | 304 | if (pbuffer_supported) |
305 | { | 305 | { |
306 | tmplog("Draw to pbuffer" , vals[++j]); | 306 | tmplog("Draw to pbuffer" , vals[++j]); |
307 | tmplog("Max pbuffer pixels " , vals[++j]); | 307 | tmplog("Max pbuffer pixels " , vals[++j]); |
308 | tmplog("Max pbuffer width" , vals[++j]); | 308 | tmplog("Max pbuffer width" , vals[++j]); |
309 | tmplog("Max pbuffer height" , vals[++j]); | 309 | tmplog("Max pbuffer height" , vals[++j]); |
310 | } | 310 | } |
311 | if (framebuffer_sRGB_supported) | 311 | if (framebuffer_sRGB_supported) |
312 | tmplog("Framebuffer sRBG capable" , vals[++j]); | 312 | tmplog("Framebuffer sRBG capable" , vals[++j]); |
313 | if (multi_sample_supported) | 313 | if (multi_sample_supported) |
314 | { | 314 | { |
315 | tmplog("Samples " , vals[++j]); | 315 | tmplog("Samples " , vals[++j]); |
316 | tmplog("Sample buffers " , vals[++j]); | 316 | tmplog("Sample buffers " , vals[++j]); |
317 | } | 317 | } |
318 | if (depth_float_supported) | 318 | if (depth_float_supported) |
319 | tmplog("Depth float" , vals[++j]); | 319 | tmplog("Depth float" , vals[++j]); |
320 | #undef tmplog | 320 | #undef tmplog |
321 | } | 321 | } |
322 | } | 322 | } |
323 | } | 323 | } |
324 | #endif | 324 | #endif |
325 | #elif defined(IRR_LINUX_DEVICE) | 325 | #elif defined(IRR_LINUX_DEVICE) |
326 | #endif | 326 | #endif |
327 | } | 327 | } |
328 | 328 | ||
329 | 329 | ||
330 | void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) | 330 | void COpenGLExtensionHandler::initExtensions(bool stencilBuffer) |
331 | { | 331 | { |
332 | const f32 ogl_ver = core::fast_atof(reinterpret_cast<const c8*>(glGetString(GL_VERSION))); | 332 | const f32 ogl_ver = core::fast_atof(reinterpret_cast<const c8*>(glGetString(GL_VERSION))); |
333 | Version = static_cast<u16>(core::floor32(ogl_ver)*100+core::round32(core::fract(ogl_ver)*10.0f)); | 333 | Version = static_cast<u16>(core::floor32(ogl_ver)*100+core::round32(core::fract(ogl_ver)*10.0f)); |
334 | if ( Version >= 102) | 334 | if ( Version >= 102) |
335 | os::Printer::log("OpenGL driver version is 1.2 or better.", ELL_INFORMATION); | 335 | os::Printer::log("OpenGL driver version is 1.2 or better.", ELL_INFORMATION); |
336 | else | 336 | else |
337 | os::Printer::log("OpenGL driver version is not 1.2 or better.", ELL_WARNING); | 337 | os::Printer::log("OpenGL driver version is not 1.2 or better.", ELL_WARNING); |
338 | 338 | ||
339 | { | 339 | { |
340 | const char* t = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)); | 340 | const char* t = reinterpret_cast<const char*>(glGetString(GL_EXTENSIONS)); |
341 | size_t len = 0; | 341 | size_t len = 0; |
342 | c8 *str = 0; | 342 | c8 *str = 0; |
343 | if (t) | 343 | if (t) |
344 | { | 344 | { |
345 | len = strlen(t); | 345 | len = strlen(t); |
346 | str = new c8[len+1]; | 346 | str = new c8[len+1]; |
347 | } | 347 | } |
348 | c8* p = str; | 348 | c8* p = str; |
349 | 349 | ||
350 | for (size_t i=0; i<len; ++i) | 350 | for (size_t i=0; i<len; ++i) |
351 | { | 351 | { |
352 | str[i] = static_cast<char>(t[i]); | 352 | str[i] = static_cast<char>(t[i]); |
353 | 353 | ||
354 | if (str[i] == ' ') | 354 | if (str[i] == ' ') |
355 | { | 355 | { |
356 | str[i] = 0; | 356 | str[i] = 0; |
357 | for (u32 j=0; j<IRR_OpenGL_Feature_Count; ++j) | 357 | for (u32 j=0; j<IRR_OpenGL_Feature_Count; ++j) |
358 | { | 358 | { |
359 | if (!strcmp(OpenGLFeatureStrings[j], p)) | 359 | if (!strcmp(OpenGLFeatureStrings[j], p)) |
360 | { | 360 | { |
361 | FeatureAvailable[j] = true; | 361 | FeatureAvailable[j] = true; |
362 | break; | 362 | break; |
363 | } | 363 | } |
364 | } | 364 | } |
365 | 365 | ||
366 | p = p + strlen(p) + 1; | 366 | p = p + strlen(p) + 1; |
367 | } | 367 | } |
368 | } | 368 | } |
369 | 369 | ||
370 | delete [] str; | 370 | delete [] str; |
371 | } | 371 | } |
372 | 372 | ||
373 | MultiTextureExtension = FeatureAvailable[IRR_ARB_multitexture]; | 373 | MultiTextureExtension = FeatureAvailable[IRR_ARB_multitexture]; |
374 | TextureCompressionExtension = FeatureAvailable[IRR_ARB_texture_compression]; | 374 | TextureCompressionExtension = FeatureAvailable[IRR_ARB_texture_compression]; |
375 | StencilBuffer=stencilBuffer; | 375 | StencilBuffer=stencilBuffer; |
376 | 376 | ||
377 | #ifdef _IRR_OPENGL_USE_EXTPOINTER_ | 377 | #ifdef _IRR_OPENGL_USE_EXTPOINTER_ |
378 | #ifdef _IRR_WINDOWS_API_ | 378 | #ifdef _IRR_WINDOWS_API_ |
379 | #define IRR_OGL_LOAD_EXTENSION(x) wglGetProcAddress(reinterpret_cast<const char*>(x)) | 379 | #define IRR_OGL_LOAD_EXTENSION(x) wglGetProcAddress(reinterpret_cast<const char*>(x)) |
380 | #elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && !defined(_IRR_COMPILE_WITH_X11_DEVICE_) | 380 | #elif defined(_IRR_COMPILE_WITH_SDL_DEVICE_) && !defined(_IRR_COMPILE_WITH_X11_DEVICE_) |
381 | #define IRR_OGL_LOAD_EXTENSION(x) SDL_GL_GetProcAddress(reinterpret_cast<const char*>(x)) | 381 | #define IRR_OGL_LOAD_EXTENSION(x) SDL_GL_GetProcAddress(reinterpret_cast<const char*>(x)) |
382 | #else | 382 | #else |
383 | // Accessing the correct function is quite complex | 383 | // Accessing the correct function is quite complex |
384 | // All libraries should support the ARB version, however | 384 | // All libraries should support the ARB version, however |
385 | // since GLX 1.4 the non-ARB version is the official one | 385 | // since GLX 1.4 the non-ARB version is the official one |
386 | // So we have to check the runtime environment and | 386 | // So we have to check the runtime environment and |
387 | // choose the proper symbol | 387 | // choose the proper symbol |
388 | // In case you still have problems please enable the | 388 | // In case you still have problems please enable the |
389 | // next line by uncommenting it | 389 | // next line by uncommenting it |
390 | // #define _IRR_GETPROCADDRESS_WORKAROUND_ | 390 | // #define _IRR_GETPROCADDRESS_WORKAROUND_ |
391 | 391 | ||
392 | #ifndef _IRR_GETPROCADDRESS_WORKAROUND_ | 392 | #ifndef _IRR_GETPROCADDRESS_WORKAROUND_ |
393 | __GLXextFuncPtr (*IRR_OGL_LOAD_EXTENSION_FUNCP)(const GLubyte*)=0; | 393 | __GLXextFuncPtr (*IRR_OGL_LOAD_EXTENSION_FUNCP)(const GLubyte*)=0; |
394 | #ifdef GLX_VERSION_1_4 | 394 | #ifdef GLX_VERSION_1_4 |
395 | int major=0,minor=0; | 395 | int major=0,minor=0; |
396 | if (glXGetCurrentDisplay()) | 396 | if (glXGetCurrentDisplay()) |
397 | glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); | 397 | glXQueryVersion(glXGetCurrentDisplay(), &major, &minor); |
398 | if ((major>1) || (minor>3)) | 398 | if ((major>1) || (minor>3)) |
399 | IRR_OGL_LOAD_EXTENSION_FUNCP=glXGetProcAddress; | 399 | IRR_OGL_LOAD_EXTENSION_FUNCP=glXGetProcAddress; |
400 | else | 400 | else |
401 | #endif | 401 | #endif |
402 | IRR_OGL_LOAD_EXTENSION_FUNCP=glXGetProcAddressARB; | 402 | IRR_OGL_LOAD_EXTENSION_FUNCP=glXGetProcAddressARB; |
403 | #define IRR_OGL_LOAD_EXTENSION(X) IRR_OGL_LOAD_EXTENSION_FUNCP(reinterpret_cast<const GLubyte*>(X)) | 403 | #define IRR_OGL_LOAD_EXTENSION(X) IRR_OGL_LOAD_EXTENSION_FUNCP(reinterpret_cast<const GLubyte*>(X)) |
404 | #else | 404 | #else |
405 | #define IRR_OGL_LOAD_EXTENSION(X) glXGetProcAddressARB(reinterpret_cast<const GLubyte*>(X)) | 405 | #define IRR_OGL_LOAD_EXTENSION(X) glXGetProcAddressARB(reinterpret_cast<const GLubyte*>(X)) |
406 | #endif // workaround | 406 | #endif // workaround |
407 | #endif // Windows, SDL, or Linux | 407 | #endif // Windows, SDL, or Linux |
408 | 408 | ||
409 | // get multitexturing function pointers | 409 | // get multitexturing function pointers |
410 | pGlActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) IRR_OGL_LOAD_EXTENSION("glActiveTextureARB"); | 410 | pGlActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) IRR_OGL_LOAD_EXTENSION("glActiveTextureARB"); |
411 | pGlClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) IRR_OGL_LOAD_EXTENSION("glClientActiveTextureARB"); | 411 | pGlClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC) IRR_OGL_LOAD_EXTENSION("glClientActiveTextureARB"); |
412 | 412 | ||
413 | // get fragment and vertex program function pointers | 413 | // get fragment and vertex program function pointers |
414 | pGlGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) IRR_OGL_LOAD_EXTENSION("glGenProgramsARB"); | 414 | pGlGenProgramsARB = (PFNGLGENPROGRAMSARBPROC) IRR_OGL_LOAD_EXTENSION("glGenProgramsARB"); |
415 | pGlGenProgramsNV = (PFNGLGENPROGRAMSNVPROC) IRR_OGL_LOAD_EXTENSION("glGenProgramsNV"); | 415 | pGlGenProgramsNV = (PFNGLGENPROGRAMSNVPROC) IRR_OGL_LOAD_EXTENSION("glGenProgramsNV"); |
416 | pGlBindProgramARB = (PFNGLBINDPROGRAMARBPROC) IRR_OGL_LOAD_EXTENSION("glBindProgramARB"); | 416 | pGlBindProgramARB = (PFNGLBINDPROGRAMARBPROC) IRR_OGL_LOAD_EXTENSION("glBindProgramARB"); |
417 | pGlBindProgramNV = (PFNGLBINDPROGRAMNVPROC) IRR_OGL_LOAD_EXTENSION("glBindProgramNV"); | 417 | pGlBindProgramNV = (PFNGLBINDPROGRAMNVPROC) IRR_OGL_LOAD_EXTENSION("glBindProgramNV"); |
418 | pGlProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) IRR_OGL_LOAD_EXTENSION("glProgramStringARB"); | 418 | pGlProgramStringARB = (PFNGLPROGRAMSTRINGARBPROC) IRR_OGL_LOAD_EXTENSION("glProgramStringARB"); |
419 | pGlLoadProgramNV = (PFNGLLOADPROGRAMNVPROC) IRR_OGL_LOAD_EXTENSION("glLoadProgramNV"); | 419 | pGlLoadProgramNV = (PFNGLLOADPROGRAMNVPROC) IRR_OGL_LOAD_EXTENSION("glLoadProgramNV"); |
420 | pGlDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteProgramsARB"); | 420 | pGlDeleteProgramsARB = (PFNGLDELETEPROGRAMSARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteProgramsARB"); |
421 | pGlDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC) IRR_OGL_LOAD_EXTENSION("glDeleteProgramsNV"); | 421 | pGlDeleteProgramsNV = (PFNGLDELETEPROGRAMSNVPROC) IRR_OGL_LOAD_EXTENSION("glDeleteProgramsNV"); |
422 | pGlProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) IRR_OGL_LOAD_EXTENSION("glProgramLocalParameter4fvARB"); | 422 | pGlProgramLocalParameter4fvARB = (PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) IRR_OGL_LOAD_EXTENSION("glProgramLocalParameter4fvARB"); |
423 | pGlCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glCreateShaderObjectARB"); | 423 | pGlCreateShaderObjectARB = (PFNGLCREATESHADEROBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glCreateShaderObjectARB"); |
424 | pGlCreateShader = (PFNGLCREATESHADERPROC) IRR_OGL_LOAD_EXTENSION("glCreateShader"); | 424 | pGlCreateShader = (PFNGLCREATESHADERPROC) IRR_OGL_LOAD_EXTENSION("glCreateShader"); |
425 | pGlShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) IRR_OGL_LOAD_EXTENSION("glShaderSourceARB"); | 425 | pGlShaderSourceARB = (PFNGLSHADERSOURCEARBPROC) IRR_OGL_LOAD_EXTENSION("glShaderSourceARB"); |
426 | pGlShaderSource = (PFNGLSHADERSOURCEPROC) IRR_OGL_LOAD_EXTENSION("glShaderSource"); | 426 | pGlShaderSource = (PFNGLSHADERSOURCEPROC) IRR_OGL_LOAD_EXTENSION("glShaderSource"); |
427 | pGlCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) IRR_OGL_LOAD_EXTENSION("glCompileShaderARB"); | 427 | pGlCompileShaderARB = (PFNGLCOMPILESHADERARBPROC) IRR_OGL_LOAD_EXTENSION("glCompileShaderARB"); |
428 | pGlCompileShader = (PFNGLCOMPILESHADERPROC) IRR_OGL_LOAD_EXTENSION("glCompileShader"); | 428 | pGlCompileShader = (PFNGLCOMPILESHADERPROC) IRR_OGL_LOAD_EXTENSION("glCompileShader"); |
429 | pGlCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glCreateProgramObjectARB"); | 429 | pGlCreateProgramObjectARB = (PFNGLCREATEPROGRAMOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glCreateProgramObjectARB"); |
430 | pGlCreateProgram = (PFNGLCREATEPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glCreateProgram"); | 430 | pGlCreateProgram = (PFNGLCREATEPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glCreateProgram"); |
431 | pGlAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glAttachObjectARB"); | 431 | pGlAttachObjectARB = (PFNGLATTACHOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glAttachObjectARB"); |
432 | pGlAttachShader = (PFNGLATTACHSHADERPROC) IRR_OGL_LOAD_EXTENSION("glAttachShader"); | 432 | pGlAttachShader = (PFNGLATTACHSHADERPROC) IRR_OGL_LOAD_EXTENSION("glAttachShader"); |
433 | pGlLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) IRR_OGL_LOAD_EXTENSION("glLinkProgramARB"); | 433 | pGlLinkProgramARB = (PFNGLLINKPROGRAMARBPROC) IRR_OGL_LOAD_EXTENSION("glLinkProgramARB"); |
434 | pGlLinkProgram = (PFNGLLINKPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glLinkProgram"); | 434 | pGlLinkProgram = (PFNGLLINKPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glLinkProgram"); |
435 | pGlUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glUseProgramObjectARB"); | 435 | pGlUseProgramObjectARB = (PFNGLUSEPROGRAMOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glUseProgramObjectARB"); |
436 | pGlUseProgram = (PFNGLUSEPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glUseProgram"); | 436 | pGlUseProgram = (PFNGLUSEPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glUseProgram"); |
437 | pGlDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteObjectARB"); | 437 | pGlDeleteObjectARB = (PFNGLDELETEOBJECTARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteObjectARB"); |
438 | pGlDeleteProgram = (PFNGLDELETEPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glDeleteProgram"); | 438 | pGlDeleteProgram = (PFNGLDELETEPROGRAMPROC) IRR_OGL_LOAD_EXTENSION("glDeleteProgram"); |
439 | pGlDeleteShader = (PFNGLDELETESHADERPROC) IRR_OGL_LOAD_EXTENSION("glDeleteShader"); | 439 | pGlDeleteShader = (PFNGLDELETESHADERPROC) IRR_OGL_LOAD_EXTENSION("glDeleteShader"); |
440 | pGlGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC) IRR_OGL_LOAD_EXTENSION("glGetAttachedShaders"); | 440 | pGlGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC) IRR_OGL_LOAD_EXTENSION("glGetAttachedShaders"); |
441 | pGlGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC) IRR_OGL_LOAD_EXTENSION("glGetAttachedObjectsARB"); | 441 | pGlGetAttachedObjectsARB = (PFNGLGETATTACHEDOBJECTSARBPROC) IRR_OGL_LOAD_EXTENSION("glGetAttachedObjectsARB"); |
442 | pGlGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) IRR_OGL_LOAD_EXTENSION("glGetInfoLogARB"); | 442 | pGlGetInfoLogARB = (PFNGLGETINFOLOGARBPROC) IRR_OGL_LOAD_EXTENSION("glGetInfoLogARB"); |
443 | pGlGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) IRR_OGL_LOAD_EXTENSION("glGetShaderInfoLog"); | 443 | pGlGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC) IRR_OGL_LOAD_EXTENSION("glGetShaderInfoLog"); |
444 | pGlGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) IRR_OGL_LOAD_EXTENSION("glGetProgramInfoLog"); | 444 | pGlGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC) IRR_OGL_LOAD_EXTENSION("glGetProgramInfoLog"); |
445 | pGlGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetObjectParameterivARB"); | 445 | pGlGetObjectParameterivARB = (PFNGLGETOBJECTPARAMETERIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetObjectParameterivARB"); |
446 | pGlGetShaderiv = (PFNGLGETSHADERIVPROC) IRR_OGL_LOAD_EXTENSION("glGetShaderiv"); | 446 | pGlGetShaderiv = (PFNGLGETSHADERIVPROC) IRR_OGL_LOAD_EXTENSION("glGetShaderiv"); |
447 | pGlGetProgramiv = (PFNGLGETPROGRAMIVPROC) IRR_OGL_LOAD_EXTENSION("glGetProgramiv"); | 447 | pGlGetProgramiv = (PFNGLGETPROGRAMIVPROC) IRR_OGL_LOAD_EXTENSION("glGetProgramiv"); |
448 | pGlGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) IRR_OGL_LOAD_EXTENSION("glGetUniformLocationARB"); | 448 | pGlGetUniformLocationARB = (PFNGLGETUNIFORMLOCATIONARBPROC) IRR_OGL_LOAD_EXTENSION("glGetUniformLocationARB"); |
449 | pGlGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) IRR_OGL_LOAD_EXTENSION("glGetUniformLocation"); | 449 | pGlGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC) IRR_OGL_LOAD_EXTENSION("glGetUniformLocation"); |
450 | pGlUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform1fvARB"); | 450 | pGlUniform1fvARB = (PFNGLUNIFORM1FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform1fvARB"); |
451 | pGlUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform2fvARB"); | 451 | pGlUniform2fvARB = (PFNGLUNIFORM2FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform2fvARB"); |
452 | pGlUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform3fvARB"); | 452 | pGlUniform3fvARB = (PFNGLUNIFORM3FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform3fvARB"); |
453 | pGlUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform4fvARB"); | 453 | pGlUniform4fvARB = (PFNGLUNIFORM4FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform4fvARB"); |
454 | pGlUniform1ivARB = (PFNGLUNIFORM1IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform1ivARB"); | 454 | pGlUniform1ivARB = (PFNGLUNIFORM1IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform1ivARB"); |
455 | pGlUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform2ivARB"); | 455 | pGlUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform2ivARB"); |
456 | pGlUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform3ivARB"); | 456 | pGlUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform3ivARB"); |
457 | pGlUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform4ivARB"); | 457 | pGlUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform4ivARB"); |
458 | pGlUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix2fvARB"); | 458 | pGlUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix2fvARB"); |
459 | pGlUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix3fvARB"); | 459 | pGlUniformMatrix3fvARB = (PFNGLUNIFORMMATRIX3FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix3fvARB"); |
460 | pGlUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix4fvARB"); | 460 | pGlUniformMatrix4fvARB = (PFNGLUNIFORMMATRIX4FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix4fvARB"); |
461 | pGlGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) IRR_OGL_LOAD_EXTENSION("glGetActiveUniformARB"); | 461 | pGlGetActiveUniformARB = (PFNGLGETACTIVEUNIFORMARBPROC) IRR_OGL_LOAD_EXTENSION("glGetActiveUniformARB"); |
462 | pGlGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) IRR_OGL_LOAD_EXTENSION("glGetActiveUniform"); | 462 | pGlGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC) IRR_OGL_LOAD_EXTENSION("glGetActiveUniform"); |
463 | 463 | ||
464 | // get point parameter extension | 464 | // get point parameter extension |
465 | pGlPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC) IRR_OGL_LOAD_EXTENSION("glPointParameterfARB"); | 465 | pGlPointParameterfARB = (PFNGLPOINTPARAMETERFARBPROC) IRR_OGL_LOAD_EXTENSION("glPointParameterfARB"); |
466 | pGlPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC) IRR_OGL_LOAD_EXTENSION("glPointParameterfvARB"); | 466 | pGlPointParameterfvARB = (PFNGLPOINTPARAMETERFVARBPROC) IRR_OGL_LOAD_EXTENSION("glPointParameterfvARB"); |
467 | 467 | ||
468 | // get stencil extension | 468 | // get stencil extension |
469 | pGlStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC) IRR_OGL_LOAD_EXTENSION("glStencilFuncSeparate"); | 469 | pGlStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC) IRR_OGL_LOAD_EXTENSION("glStencilFuncSeparate"); |
470 | pGlStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC) IRR_OGL_LOAD_EXTENSION("glStencilOpSeparate"); | 470 | pGlStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC) IRR_OGL_LOAD_EXTENSION("glStencilOpSeparate"); |
471 | pGlStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC) IRR_OGL_LOAD_EXTENSION("glStencilFuncSeparateATI"); | 471 | pGlStencilFuncSeparateATI = (PFNGLSTENCILFUNCSEPARATEATIPROC) IRR_OGL_LOAD_EXTENSION("glStencilFuncSeparateATI"); |
472 | pGlStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC) IRR_OGL_LOAD_EXTENSION("glStencilOpSeparateATI"); | 472 | pGlStencilOpSeparateATI = (PFNGLSTENCILOPSEPARATEATIPROC) IRR_OGL_LOAD_EXTENSION("glStencilOpSeparateATI"); |
473 | 473 | ||
474 | // compressed textures | 474 | // compressed textures |
475 | pGlCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) IRR_OGL_LOAD_EXTENSION("glCompressedTexImage2D"); | 475 | pGlCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC) IRR_OGL_LOAD_EXTENSION("glCompressedTexImage2D"); |
476 | 476 | ||
477 | // ARB FrameBufferObjects | 477 | // ARB FrameBufferObjects |
478 | pGlBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glBindFramebuffer"); | 478 | pGlBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glBindFramebuffer"); |
479 | pGlDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffers"); | 479 | pGlDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffers"); |
480 | pGlGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glGenFramebuffers"); | 480 | pGlGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glGenFramebuffers"); |
481 | pGlCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatus"); | 481 | pGlCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC) IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatus"); |
482 | pGlFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2D"); | 482 | pGlFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2D"); |
483 | pGlBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glBindRenderbuffer"); | 483 | pGlBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glBindRenderbuffer"); |
484 | pGlDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glDeleteRenderbuffers"); | 484 | pGlDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glDeleteRenderbuffers"); |
485 | pGlGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glGenRenderbuffers"); | 485 | pGlGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glGenRenderbuffers"); |
486 | pGlRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) IRR_OGL_LOAD_EXTENSION("glRenderbufferStorage"); | 486 | pGlRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC) IRR_OGL_LOAD_EXTENSION("glRenderbufferStorage"); |
487 | pGlFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferRenderbuffer"); | 487 | pGlFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferRenderbuffer"); |
488 | pGlGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) IRR_OGL_LOAD_EXTENSION("glGenerateMipmap"); | 488 | pGlGenerateMipmap = (PFNGLGENERATEMIPMAPPROC) IRR_OGL_LOAD_EXTENSION("glGenerateMipmap"); |
489 | 489 | ||
490 | // EXT FrameBufferObjects | 490 | // EXT FrameBufferObjects |
491 | pGlBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glBindFramebufferEXT"); | 491 | pGlBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glBindFramebufferEXT"); |
492 | pGlDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffersEXT"); | 492 | pGlDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glDeleteFramebuffersEXT"); |
493 | pGlGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenFramebuffersEXT"); | 493 | pGlGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenFramebuffersEXT"); |
494 | pGlCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatusEXT"); | 494 | pGlCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) IRR_OGL_LOAD_EXTENSION("glCheckFramebufferStatusEXT"); |
495 | pGlFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2DEXT"); | 495 | pGlFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferTexture2DEXT"); |
496 | pGlBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glBindRenderbufferEXT"); | 496 | pGlBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glBindRenderbufferEXT"); |
497 | pGlDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glDeleteRenderbuffersEXT"); | 497 | pGlDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glDeleteRenderbuffersEXT"); |
498 | pGlGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenRenderbuffersEXT"); | 498 | pGlGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenRenderbuffersEXT"); |
499 | pGlRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) IRR_OGL_LOAD_EXTENSION("glRenderbufferStorageEXT"); | 499 | pGlRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC) IRR_OGL_LOAD_EXTENSION("glRenderbufferStorageEXT"); |
500 | pGlFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferRenderbufferEXT"); | 500 | pGlFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) IRR_OGL_LOAD_EXTENSION("glFramebufferRenderbufferEXT"); |
501 | pGlGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenerateMipmapEXT"); | 501 | pGlGenerateMipmapEXT = (PFNGLGENERATEMIPMAPEXTPROC) IRR_OGL_LOAD_EXTENSION("glGenerateMipmapEXT"); |
502 | pGlDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC) IRR_OGL_LOAD_EXTENSION("glDrawBuffersARB"); | 502 | pGlDrawBuffersARB = (PFNGLDRAWBUFFERSARBPROC) IRR_OGL_LOAD_EXTENSION("glDrawBuffersARB"); |
503 | pGlDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC) IRR_OGL_LOAD_EXTENSION("glDrawBuffersATI"); | 503 | pGlDrawBuffersATI = (PFNGLDRAWBUFFERSATIPROC) IRR_OGL_LOAD_EXTENSION("glDrawBuffersATI"); |
504 | 504 | ||
505 | // get vertex buffer extension | 505 | // get vertex buffer extension |
506 | pGlGenBuffersARB = (PFNGLGENBUFFERSARBPROC) IRR_OGL_LOAD_EXTENSION("glGenBuffersARB"); | 506 | pGlGenBuffersARB = (PFNGLGENBUFFERSARBPROC) IRR_OGL_LOAD_EXTENSION("glGenBuffersARB"); |
507 | pGlBindBufferARB = (PFNGLBINDBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glBindBufferARB"); | 507 | pGlBindBufferARB = (PFNGLBINDBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glBindBufferARB"); |
508 | pGlBufferDataARB = (PFNGLBUFFERDATAARBPROC) IRR_OGL_LOAD_EXTENSION("glBufferDataARB"); | 508 | pGlBufferDataARB = (PFNGLBUFFERDATAARBPROC) IRR_OGL_LOAD_EXTENSION("glBufferDataARB"); |
509 | pGlDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteBuffersARB"); | 509 | pGlDeleteBuffersARB = (PFNGLDELETEBUFFERSARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteBuffersARB"); |
510 | pGlBufferSubDataARB= (PFNGLBUFFERSUBDATAARBPROC) IRR_OGL_LOAD_EXTENSION("glBufferSubDataARB"); | 510 | pGlBufferSubDataARB= (PFNGLBUFFERSUBDATAARBPROC) IRR_OGL_LOAD_EXTENSION("glBufferSubDataARB"); |
511 | pGlGetBufferSubDataARB= (PFNGLGETBUFFERSUBDATAARBPROC)IRR_OGL_LOAD_EXTENSION("glGetBufferSubDataARB"); | 511 | pGlGetBufferSubDataARB= (PFNGLGETBUFFERSUBDATAARBPROC)IRR_OGL_LOAD_EXTENSION("glGetBufferSubDataARB"); |
512 | pGlMapBufferARB= (PFNGLMAPBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glMapBufferARB"); | 512 | pGlMapBufferARB= (PFNGLMAPBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glMapBufferARB"); |
513 | pGlUnmapBufferARB= (PFNGLUNMAPBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glUnmapBufferARB"); | 513 | pGlUnmapBufferARB= (PFNGLUNMAPBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glUnmapBufferARB"); |
514 | pGlIsBufferARB= (PFNGLISBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glIsBufferARB"); | 514 | pGlIsBufferARB= (PFNGLISBUFFERARBPROC) IRR_OGL_LOAD_EXTENSION("glIsBufferARB"); |
515 | pGlGetBufferParameterivARB= (PFNGLGETBUFFERPARAMETERIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetBufferParameterivARB"); | 515 | pGlGetBufferParameterivARB= (PFNGLGETBUFFERPARAMETERIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetBufferParameterivARB"); |
516 | pGlGetBufferPointervARB= (PFNGLGETBUFFERPOINTERVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetBufferPointervARB"); | 516 | pGlGetBufferPointervARB= (PFNGLGETBUFFERPOINTERVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetBufferPointervARB"); |
517 | pGlProvokingVertexARB= (PFNGLPROVOKINGVERTEXPROC) IRR_OGL_LOAD_EXTENSION("glProvokingVertex"); | 517 | pGlProvokingVertexARB= (PFNGLPROVOKINGVERTEXPROC) IRR_OGL_LOAD_EXTENSION("glProvokingVertex"); |
518 | pGlProvokingVertexEXT= (PFNGLPROVOKINGVERTEXEXTPROC) IRR_OGL_LOAD_EXTENSION("glProvokingVertexEXT"); | 518 | pGlProvokingVertexEXT= (PFNGLPROVOKINGVERTEXEXTPROC) IRR_OGL_LOAD_EXTENSION("glProvokingVertexEXT"); |
519 | pGlColorMaskIndexedEXT= (PFNGLCOLORMASKINDEXEDEXTPROC) IRR_OGL_LOAD_EXTENSION("glColorMaskIndexedEXT"); | 519 | pGlColorMaskIndexedEXT= (PFNGLCOLORMASKINDEXEDEXTPROC) IRR_OGL_LOAD_EXTENSION("glColorMaskIndexedEXT"); |
520 | pGlEnableIndexedEXT= (PFNGLENABLEINDEXEDEXTPROC) IRR_OGL_LOAD_EXTENSION("glEnableIndexedEXT"); | 520 | pGlEnableIndexedEXT= (PFNGLENABLEINDEXEDEXTPROC) IRR_OGL_LOAD_EXTENSION("glEnableIndexedEXT"); |
521 | pGlDisableIndexedEXT= (PFNGLDISABLEINDEXEDEXTPROC) IRR_OGL_LOAD_EXTENSION("glDisableIndexedEXT"); | 521 | pGlDisableIndexedEXT= (PFNGLDISABLEINDEXEDEXTPROC) IRR_OGL_LOAD_EXTENSION("glDisableIndexedEXT"); |
522 | pGlBlendFuncIndexedAMD= (PFNGLBLENDFUNCINDEXEDAMDPROC) IRR_OGL_LOAD_EXTENSION("glBlendFuncIndexedAMD"); | 522 | pGlBlendFuncIndexedAMD= (PFNGLBLENDFUNCINDEXEDAMDPROC) IRR_OGL_LOAD_EXTENSION("glBlendFuncIndexedAMD"); |
523 | pGlBlendFunciARB= (PFNGLBLENDFUNCIPROC) IRR_OGL_LOAD_EXTENSION("glBlendFunciARB"); | 523 | pGlBlendFunciARB= (PFNGLBLENDFUNCIPROC) IRR_OGL_LOAD_EXTENSION("glBlendFunciARB"); |
524 | pGlBlendEquationIndexedAMD= (PFNGLBLENDEQUATIONINDEXEDAMDPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquationIndexedAMD"); | 524 | pGlBlendEquationIndexedAMD= (PFNGLBLENDEQUATIONINDEXEDAMDPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquationIndexedAMD"); |
525 | pGlBlendEquationiARB= (PFNGLBLENDEQUATIONIPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquationiARB"); | 525 | pGlBlendEquationiARB= (PFNGLBLENDEQUATIONIPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquationiARB"); |
526 | pGlProgramParameteriARB= (PFNGLPROGRAMPARAMETERIARBPROC) IRR_OGL_LOAD_EXTENSION("glProgramParameteriARB"); | 526 | pGlProgramParameteriARB= (PFNGLPROGRAMPARAMETERIARBPROC) IRR_OGL_LOAD_EXTENSION("glProgramParameteriARB"); |
527 | pGlProgramParameteriEXT= (PFNGLPROGRAMPARAMETERIEXTPROC) IRR_OGL_LOAD_EXTENSION("glProgramParameteriEXT"); | 527 | pGlProgramParameteriEXT= (PFNGLPROGRAMPARAMETERIEXTPROC) IRR_OGL_LOAD_EXTENSION("glProgramParameteriEXT"); |
528 | 528 | ||
529 | // occlusion query | 529 | // occlusion query |
530 | pGlGenQueriesARB = (PFNGLGENQUERIESARBPROC) IRR_OGL_LOAD_EXTENSION("glGenQueriesARB"); | 530 | pGlGenQueriesARB = (PFNGLGENQUERIESARBPROC) IRR_OGL_LOAD_EXTENSION("glGenQueriesARB"); |
531 | pGlDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteQueriesARB"); | 531 | pGlDeleteQueriesARB = (PFNGLDELETEQUERIESARBPROC) IRR_OGL_LOAD_EXTENSION("glDeleteQueriesARB"); |
532 | pGlIsQueryARB = (PFNGLISQUERYARBPROC) IRR_OGL_LOAD_EXTENSION("glIsQueryARB"); | 532 | pGlIsQueryARB = (PFNGLISQUERYARBPROC) IRR_OGL_LOAD_EXTENSION("glIsQueryARB"); |
533 | pGlBeginQueryARB = (PFNGLBEGINQUERYARBPROC) IRR_OGL_LOAD_EXTENSION("glBeginQueryARB"); | 533 | pGlBeginQueryARB = (PFNGLBEGINQUERYARBPROC) IRR_OGL_LOAD_EXTENSION("glBeginQueryARB"); |
534 | pGlEndQueryARB = (PFNGLENDQUERYARBPROC) IRR_OGL_LOAD_EXTENSION("glEndQueryARB"); | 534 | pGlEndQueryARB = (PFNGLENDQUERYARBPROC) IRR_OGL_LOAD_EXTENSION("glEndQueryARB"); |
535 | pGlGetQueryivARB = (PFNGLGETQUERYIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetQueryivARB"); | 535 | pGlGetQueryivARB = (PFNGLGETQUERYIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetQueryivARB"); |
536 | pGlGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetQueryObjectivARB"); | 536 | pGlGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetQueryObjectivARB"); |
537 | pGlGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetQueryObjectuivARB"); | 537 | pGlGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC) IRR_OGL_LOAD_EXTENSION("glGetQueryObjectuivARB"); |
538 | pGlGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC) IRR_OGL_LOAD_EXTENSION("glGenOcclusionQueriesNV"); | 538 | pGlGenOcclusionQueriesNV = (PFNGLGENOCCLUSIONQUERIESNVPROC) IRR_OGL_LOAD_EXTENSION("glGenOcclusionQueriesNV"); |
539 | pGlDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC) IRR_OGL_LOAD_EXTENSION("glDeleteOcclusionQueriesNV"); | 539 | pGlDeleteOcclusionQueriesNV = (PFNGLDELETEOCCLUSIONQUERIESNVPROC) IRR_OGL_LOAD_EXTENSION("glDeleteOcclusionQueriesNV"); |
540 | pGlIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC) IRR_OGL_LOAD_EXTENSION("glIsOcclusionQueryNV"); | 540 | pGlIsOcclusionQueryNV = (PFNGLISOCCLUSIONQUERYNVPROC) IRR_OGL_LOAD_EXTENSION("glIsOcclusionQueryNV"); |
541 | pGlBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC) IRR_OGL_LOAD_EXTENSION("glBeginOcclusionQueryNV"); | 541 | pGlBeginOcclusionQueryNV = (PFNGLBEGINOCCLUSIONQUERYNVPROC) IRR_OGL_LOAD_EXTENSION("glBeginOcclusionQueryNV"); |
542 | pGlEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC) IRR_OGL_LOAD_EXTENSION("glEndOcclusionQueryNV"); | 542 | pGlEndOcclusionQueryNV = (PFNGLENDOCCLUSIONQUERYNVPROC) IRR_OGL_LOAD_EXTENSION("glEndOcclusionQueryNV"); |
543 | pGlGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC) IRR_OGL_LOAD_EXTENSION("glGetOcclusionQueryivNV"); | 543 | pGlGetOcclusionQueryivNV = (PFNGLGETOCCLUSIONQUERYIVNVPROC) IRR_OGL_LOAD_EXTENSION("glGetOcclusionQueryivNV"); |
544 | pGlGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC) IRR_OGL_LOAD_EXTENSION("glGetOcclusionQueryuivNV"); | 544 | pGlGetOcclusionQueryuivNV = (PFNGLGETOCCLUSIONQUERYUIVNVPROC) IRR_OGL_LOAD_EXTENSION("glGetOcclusionQueryuivNV"); |
545 | 545 | ||
546 | // blend equation | 546 | // blend equation |
547 | pGlBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquationEXT"); | 547 | pGlBlendEquationEXT = (PFNGLBLENDEQUATIONEXTPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquationEXT"); |
548 | pGlBlendEquation = (PFNGLBLENDEQUATIONPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquation"); | 548 | pGlBlendEquation = (PFNGLBLENDEQUATIONPROC) IRR_OGL_LOAD_EXTENSION("glBlendEquation"); |
549 | 549 | ||
550 | // get vsync extension | 550 | // get vsync extension |
551 | #if defined(WGL_EXT_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) | 551 | #if defined(WGL_EXT_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) |
552 | pWglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) IRR_OGL_LOAD_EXTENSION("wglSwapIntervalEXT"); | 552 | pWglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC) IRR_OGL_LOAD_EXTENSION("wglSwapIntervalEXT"); |
553 | #endif | 553 | #endif |
554 | #if defined(GLX_SGI_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) | 554 | #if defined(GLX_SGI_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) |
555 | pGlxSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)IRR_OGL_LOAD_EXTENSION("glXSwapIntervalSGI"); | 555 | pGlxSwapIntervalSGI = (PFNGLXSWAPINTERVALSGIPROC)IRR_OGL_LOAD_EXTENSION("glXSwapIntervalSGI"); |
556 | #endif | 556 | #endif |
557 | #if defined(GLX_EXT_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) | 557 | #if defined(GLX_EXT_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) |
558 | pGlxSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)IRR_OGL_LOAD_EXTENSION("glXSwapIntervalEXT"); | 558 | pGlxSwapIntervalEXT = (PFNGLXSWAPINTERVALEXTPROC)IRR_OGL_LOAD_EXTENSION("glXSwapIntervalEXT"); |
559 | #endif | 559 | #endif |
560 | #if defined(GLX_MESA_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) | 560 | #if defined(GLX_MESA_swap_control) && !defined(_IRR_COMPILE_WITH_SDL_DEVICE_) |
561 | pGlxSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC)IRR_OGL_LOAD_EXTENSION("glXSwapIntervalMESA"); | 561 | pGlxSwapIntervalMESA = (PFNGLXSWAPINTERVALMESAPROC)IRR_OGL_LOAD_EXTENSION("glXSwapIntervalMESA"); |
562 | #endif | 562 | #endif |
563 | #endif // use extension pointer | 563 | #endif // use extension pointer |
564 | 564 | ||
565 | GLint num=0; | 565 | GLint num=0; |
566 | // set some properties | 566 | // set some properties |
567 | #if defined(GL_ARB_multitexture) || defined(GL_VERSION_1_3) | 567 | #if defined(GL_ARB_multitexture) || defined(GL_VERSION_1_3) |
568 | if (Version>102 || FeatureAvailable[IRR_ARB_multitexture]) | 568 | if (Version>102 || FeatureAvailable[IRR_ARB_multitexture]) |
569 | { | 569 | { |
570 | #if defined(GL_MAX_TEXTURE_UNITS) | 570 | #if defined(GL_MAX_TEXTURE_UNITS) |
571 | glGetIntegerv(GL_MAX_TEXTURE_UNITS, &num); | 571 | glGetIntegerv(GL_MAX_TEXTURE_UNITS, &num); |
572 | #elif defined(GL_MAX_TEXTURE_UNITS_ARB) | 572 | #elif defined(GL_MAX_TEXTURE_UNITS_ARB) |
573 | glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &num); | 573 | glGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &num); |
574 | #endif | 574 | #endif |
575 | MaxSupportedTextures=static_cast<u8>(num); | 575 | MaxSupportedTextures=static_cast<u8>(num); |
576 | } | 576 | } |
577 | #endif | 577 | #endif |
578 | #if defined(GL_ARB_vertex_shader) || defined(GL_VERSION_2_0) | 578 | #if defined(GL_ARB_vertex_shader) || defined(GL_VERSION_2_0) |
579 | if (Version>=200 || FeatureAvailable[IRR_ARB_vertex_shader]) | 579 | if (Version>=200 || FeatureAvailable[IRR_ARB_vertex_shader]) |
580 | { | 580 | { |
581 | num=0; | 581 | num=0; |
582 | #if defined(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS) | 582 | #if defined(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS) |
583 | glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &num); | 583 | glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &num); |
584 | #elif defined(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB) | 584 | #elif defined(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB) |
585 | glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &num); | 585 | glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB, &num); |
586 | #endif | 586 | #endif |
587 | MaxSupportedTextures=core::max_(MaxSupportedTextures,static_cast<u8>(num)); | 587 | MaxSupportedTextures=core::max_(MaxSupportedTextures,static_cast<u8>(num)); |
588 | } | 588 | } |
589 | #endif | 589 | #endif |
590 | glGetIntegerv(GL_MAX_LIGHTS, &num); | 590 | glGetIntegerv(GL_MAX_LIGHTS, &num); |
591 | MaxLights=static_cast<u8>(num); | 591 | MaxLights=static_cast<u8>(num); |
592 | #ifdef GL_EXT_texture_filter_anisotropic | 592 | #ifdef GL_EXT_texture_filter_anisotropic |
593 | if (FeatureAvailable[IRR_EXT_texture_filter_anisotropic]) | 593 | if (FeatureAvailable[IRR_EXT_texture_filter_anisotropic]) |
594 | { | 594 | { |
595 | glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &num); | 595 | glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &num); |
596 | MaxAnisotropy=static_cast<u8>(num); | 596 | MaxAnisotropy=static_cast<u8>(num); |
597 | } | 597 | } |
598 | #endif | 598 | #endif |
599 | #ifdef GL_VERSION_1_2 | 599 | #ifdef GL_VERSION_1_2 |
600 | if (Version>101) | 600 | if (Version>101) |
601 | { | 601 | { |
602 | glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &num); | 602 | glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &num); |
603 | MaxIndices=num; | 603 | MaxIndices=num; |
604 | } | 604 | } |
605 | #endif | 605 | #endif |
606 | glGetIntegerv(GL_MAX_TEXTURE_SIZE, &num); | 606 | glGetIntegerv(GL_MAX_TEXTURE_SIZE, &num); |
607 | MaxTextureSize=static_cast<u32>(num); | 607 | MaxTextureSize=static_cast<u32>(num); |
608 | if (queryFeature(EVDF_GEOMETRY_SHADER)) | 608 | if (queryFeature(EVDF_GEOMETRY_SHADER)) |
609 | { | 609 | { |
610 | #if defined(GL_ARB_geometry_shader4) || defined(GL_EXT_geometry_shader4) || defined(GL_NV_geometry_shader4) | 610 | #if defined(GL_ARB_geometry_shader4) || defined(GL_EXT_geometry_shader4) || defined(GL_NV_geometry_shader4) |
611 | glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT, &num); | 611 | glGetIntegerv(GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT, &num); |
612 | MaxGeometryVerticesOut=static_cast<u32>(num); | 612 | MaxGeometryVerticesOut=static_cast<u32>(num); |
613 | #elif defined(GL_NV_geometry_program4) | 613 | #elif defined(GL_NV_geometry_program4) |
614 | extGlGetProgramiv(GEOMETRY_PROGRAM_NV, GL_MAX_PROGRAM_OUTPUT_VERTICES_NV, &num); | 614 | extGlGetProgramiv(GEOMETRY_PROGRAM_NV, GL_MAX_PROGRAM_OUTPUT_VERTICES_NV, &num); |
615 | MaxGeometryVerticesOut=static_cast<u32>(num); | 615 | MaxGeometryVerticesOut=static_cast<u32>(num); |
616 | #endif | 616 | #endif |
617 | } | 617 | } |
618 | #ifdef GL_EXT_texture_lod_bias | 618 | #ifdef GL_EXT_texture_lod_bias |
619 | if (FeatureAvailable[IRR_EXT_texture_lod_bias]) | 619 | if (FeatureAvailable[IRR_EXT_texture_lod_bias]) |
620 | glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &MaxTextureLODBias); | 620 | glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &MaxTextureLODBias); |
621 | #endif | 621 | #endif |
622 | glGetIntegerv(GL_MAX_CLIP_PLANES, &num); | 622 | glGetIntegerv(GL_MAX_CLIP_PLANES, &num); |
623 | MaxUserClipPlanes=static_cast<u8>(num); | 623 | MaxUserClipPlanes=static_cast<u8>(num); |
624 | glGetIntegerv(GL_AUX_BUFFERS, &num); | 624 | glGetIntegerv(GL_AUX_BUFFERS, &num); |
625 | MaxAuxBuffers=static_cast<u8>(num); | 625 | MaxAuxBuffers=static_cast<u8>(num); |
626 | #ifdef GL_ARB_draw_buffers | 626 | #ifdef GL_ARB_draw_buffers |
627 | if (FeatureAvailable[IRR_ARB_draw_buffers]) | 627 | if (FeatureAvailable[IRR_ARB_draw_buffers]) |
628 | { | 628 | { |
629 | glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &num); | 629 | glGetIntegerv(GL_MAX_DRAW_BUFFERS_ARB, &num); |
630 | MaxMultipleRenderTargets = static_cast<u8>(num); | 630 | MaxMultipleRenderTargets = static_cast<u8>(num); |
631 | } | 631 | } |
632 | #endif | 632 | #endif |
633 | #if defined(GL_ATI_draw_buffers) | 633 | #if defined(GL_ATI_draw_buffers) |
634 | #ifdef GL_ARB_draw_buffers | 634 | #ifdef GL_ARB_draw_buffers |
635 | else | 635 | else |
636 | #endif | 636 | #endif |
637 | if (FeatureAvailable[IRR_ATI_draw_buffers]) | 637 | if (FeatureAvailable[IRR_ATI_draw_buffers]) |
638 | { | 638 | { |
639 | glGetIntegerv(GL_MAX_DRAW_BUFFERS_ATI, &num); | 639 | glGetIntegerv(GL_MAX_DRAW_BUFFERS_ATI, &num); |
640 | MaxMultipleRenderTargets = static_cast<u8>(num); | 640 | MaxMultipleRenderTargets = static_cast<u8>(num); |
641 | } | 641 | } |
642 | #endif | 642 | #endif |
643 | glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, DimAliasedLine); | 643 | glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, DimAliasedLine); |
644 | glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, DimAliasedPoint); | 644 | glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, DimAliasedPoint); |
645 | glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, DimSmoothedLine); | 645 | glGetFloatv(GL_SMOOTH_LINE_WIDTH_RANGE, DimSmoothedLine); |
646 | glGetFloatv(GL_SMOOTH_POINT_SIZE_RANGE, DimSmoothedPoint); | 646 | glGetFloatv(GL_SMOOTH_POINT_SIZE_RANGE, DimSmoothedPoint); |
647 | #if defined(GL_ARB_shading_language_100) || defined (GL_VERSION_2_0) | 647 | #if defined(GL_ARB_shading_language_100) || defined (GL_VERSION_2_0) |
648 | if (FeatureAvailable[IRR_ARB_shading_language_100] || Version>=200) | 648 | if (FeatureAvailable[IRR_ARB_shading_language_100] || Version>=200) |
649 | { | 649 | { |
650 | glGetError(); // clean error buffer | 650 | glGetError(); // clean error buffer |
651 | #ifdef GL_SHADING_LANGUAGE_VERSION | 651 | #ifdef GL_SHADING_LANGUAGE_VERSION |
652 | const GLubyte* shaderVersion = glGetString(GL_SHADING_LANGUAGE_VERSION); | 652 | const GLubyte* shaderVersion = glGetString(GL_SHADING_LANGUAGE_VERSION); |
653 | #else | 653 | #else |
654 | const GLubyte* shaderVersion = glGetString(GL_SHADING_LANGUAGE_VERSION_ARB); | 654 | const GLubyte* shaderVersion = glGetString(GL_SHADING_LANGUAGE_VERSION_ARB); |
655 | #endif | 655 | #endif |
656 | if (glGetError() == GL_INVALID_ENUM) | 656 | if (glGetError() == GL_INVALID_ENUM) |
657 | ShaderLanguageVersion = 100; | 657 | ShaderLanguageVersion = 100; |
658 | else | 658 | else |
659 | { | 659 | { |
660 | const f32 sl_ver = core::fast_atof(reinterpret_cast<const c8*>(shaderVersion)); | 660 | const f32 sl_ver = core::fast_atof(reinterpret_cast<const c8*>(shaderVersion)); |
661 | ShaderLanguageVersion = static_cast<u16>(core::floor32(sl_ver)*100+core::round32(core::fract(sl_ver)*10.0f)); | 661 | ShaderLanguageVersion = static_cast<u16>(core::floor32(sl_ver)*100+core::round32(core::fract(sl_ver)*10.0f)); |
662 | } | 662 | } |
663 | } | 663 | } |
664 | #endif | 664 | #endif |
665 | 665 | ||
666 | #ifdef _IRR_OPENGL_USE_EXTPOINTER_ | 666 | #ifdef _IRR_OPENGL_USE_EXTPOINTER_ |
667 | if (!pGlActiveTextureARB || !pGlClientActiveTextureARB) | 667 | if (!pGlActiveTextureARB || !pGlClientActiveTextureARB) |
668 | { | 668 | { |
669 | MultiTextureExtension = false; | 669 | MultiTextureExtension = false; |
670 | os::Printer::log("Failed to load OpenGL's multitexture extension, proceeding without.", ELL_WARNING); | 670 | os::Printer::log("Failed to load OpenGL's multitexture extension, proceeding without.", ELL_WARNING); |
671 | } | 671 | } |
672 | else | 672 | else |
673 | #endif | 673 | #endif |
674 | MaxTextureUnits = core::min_(MaxSupportedTextures, static_cast<u8>(MATERIAL_MAX_TEXTURES)); | 674 | MaxTextureUnits = core::min_(MaxSupportedTextures, static_cast<u8>(MATERIAL_MAX_TEXTURES)); |
675 | if (MaxTextureUnits < 2) | 675 | if (MaxTextureUnits < 2) |
676 | { | 676 | { |
677 | MultiTextureExtension = false; | 677 | MultiTextureExtension = false; |
678 | os::Printer::log("Warning: OpenGL device only has one texture unit. Disabling multitexturing.", ELL_WARNING); | 678 | os::Printer::log("Warning: OpenGL device only has one texture unit. Disabling multitexturing.", ELL_WARNING); |
679 | } | 679 | } |
680 | 680 | ||
681 | #ifdef GL_ARB_occlusion_query | 681 | #ifdef GL_ARB_occlusion_query |
682 | if (FeatureAvailable[IRR_ARB_occlusion_query]) | 682 | if (FeatureAvailable[IRR_ARB_occlusion_query]) |
683 | { | 683 | { |
684 | extGlGetQueryiv(GL_SAMPLES_PASSED_ARB,GL_QUERY_COUNTER_BITS_ARB, | 684 | extGlGetQueryiv(GL_SAMPLES_PASSED_ARB,GL_QUERY_COUNTER_BITS_ARB, |
685 | &num); | 685 | &num); |
686 | OcclusionQuerySupport=(num>0); | 686 | OcclusionQuerySupport=(num>0); |
687 | } | 687 | } |
688 | else | 688 | else |
689 | #endif | 689 | #endif |
690 | #ifdef GL_NV_occlusion_query | 690 | #ifdef GL_NV_occlusion_query |
691 | if (FeatureAvailable[IRR_NV_occlusion_query]) | 691 | if (FeatureAvailable[IRR_NV_occlusion_query]) |
692 | { | 692 | { |
693 | glGetIntegerv(GL_PIXEL_COUNTER_BITS_NV, &num); | 693 | glGetIntegerv(GL_PIXEL_COUNTER_BITS_NV, &num); |
694 | OcclusionQuerySupport=(num>0); | 694 | OcclusionQuerySupport=(num>0); |
695 | } | 695 | } |
696 | else | 696 | else |
697 | #endif | 697 | #endif |
698 | OcclusionQuerySupport=false; | 698 | OcclusionQuerySupport=false; |
699 | 699 | ||
700 | #ifdef _DEBUG | 700 | #ifdef _DEBUG |
701 | if (FeatureAvailable[IRR_NVX_gpu_memory_info]) | 701 | if (FeatureAvailable[IRR_NVX_gpu_memory_info]) |
702 | { | 702 | { |
703 | // undocumented flags, so use the RAW values | 703 | // undocumented flags, so use the RAW values |
704 | GLint val; | 704 | GLint val; |
705 | glGetIntegerv(0x9047, &val); | 705 | glGetIntegerv(0x9047, &val); |
706 | os::Printer::log("Dedicated video memory (kB)", core::stringc(val)); | 706 | os::Printer::log("Dedicated video memory (kB)", core::stringc(val)); |
707 | glGetIntegerv(0x9048, &val); | 707 | glGetIntegerv(0x9048, &val); |
708 | os::Printer::log("Total video memory (kB)", core::stringc(val)); | 708 | os::Printer::log("Total video memory (kB)", core::stringc(val)); |
709 | glGetIntegerv(0x9049, &val); | 709 | glGetIntegerv(0x9049, &val); |
710 | os::Printer::log("Available video memory (kB)", core::stringc(val)); | 710 | os::Printer::log("Available video memory (kB)", core::stringc(val)); |
711 | } | 711 | } |
712 | #ifdef GL_ATI_meminfo | 712 | #ifdef GL_ATI_meminfo |
713 | if (FeatureAvailable[IRR_ATI_meminfo]) | 713 | if (FeatureAvailable[IRR_ATI_meminfo]) |
714 | { | 714 | { |
715 | GLint val[4]; | 715 | GLint val[4]; |
716 | glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, val); | 716 | glGetIntegerv(GL_TEXTURE_FREE_MEMORY_ATI, val); |
717 | os::Printer::log("Free texture memory (kB)", core::stringc(val[0])); | 717 | os::Printer::log("Free texture memory (kB)", core::stringc(val[0])); |
718 | glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, val); | 718 | glGetIntegerv(GL_VBO_FREE_MEMORY_ATI, val); |
719 | os::Printer::log("Free VBO memory (kB)", core::stringc(val[0])); | 719 | os::Printer::log("Free VBO memory (kB)", core::stringc(val[0])); |
720 | glGetIntegerv(GL_RENDERBUFFER_FREE_MEMORY_ATI, val); | 720 | glGetIntegerv(GL_RENDERBUFFER_FREE_MEMORY_ATI, val); |
721 | os::Printer::log("Free render buffer memory (kB)", core::stringc(val[0])); | 721 | os::Printer::log("Free render buffer memory (kB)", core::stringc(val[0])); |
722 | } | 722 | } |
723 | #endif | 723 | #endif |
724 | #endif | 724 | #endif |
725 | } | 725 | } |
726 | 726 | ||
727 | bool COpenGLExtensionHandler::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const | 727 | bool COpenGLExtensionHandler::queryFeature(E_VIDEO_DRIVER_FEATURE feature) const |
728 | { | 728 | { |
729 | switch (feature) | 729 | switch (feature) |
730 | { | 730 | { |
731 | case EVDF_RENDER_TO_TARGET: | 731 | case EVDF_RENDER_TO_TARGET: |
732 | return true; | 732 | return true; |
733 | case EVDF_HARDWARE_TL: | 733 | case EVDF_HARDWARE_TL: |
734 | return true; // we cannot tell other things | 734 | return true; // we cannot tell other things |
735 | case EVDF_MULTITEXTURE: | 735 | case EVDF_MULTITEXTURE: |
736 | return MultiTextureExtension; | 736 | return MultiTextureExtension; |
737 | case EVDF_BILINEAR_FILTER: | 737 | case EVDF_BILINEAR_FILTER: |
738 | return true; | 738 | return true; |
739 | case EVDF_MIP_MAP: | 739 | case EVDF_MIP_MAP: |
740 | return true; | 740 | return true; |
741 | case EVDF_MIP_MAP_AUTO_UPDATE: | 741 | case EVDF_MIP_MAP_AUTO_UPDATE: |
742 | return FeatureAvailable[IRR_SGIS_generate_mipmap] || FeatureAvailable[IRR_EXT_framebuffer_object] || FeatureAvailable[IRR_ARB_framebuffer_object]; | 742 | return FeatureAvailable[IRR_SGIS_generate_mipmap] || FeatureAvailable[IRR_EXT_framebuffer_object] || FeatureAvailable[IRR_ARB_framebuffer_object]; |
743 | case EVDF_STENCIL_BUFFER: | 743 | case EVDF_STENCIL_BUFFER: |
744 | return StencilBuffer; | 744 | return StencilBuffer; |
745 | case EVDF_VERTEX_SHADER_1_1: | 745 | case EVDF_VERTEX_SHADER_1_1: |
746 | case EVDF_ARB_VERTEX_PROGRAM_1: | 746 | case EVDF_ARB_VERTEX_PROGRAM_1: |
747 | return FeatureAvailable[IRR_ARB_vertex_program] || FeatureAvailable[IRR_NV_vertex_program1_1]; | 747 | return FeatureAvailable[IRR_ARB_vertex_program] || FeatureAvailable[IRR_NV_vertex_program1_1]; |
748 | case EVDF_PIXEL_SHADER_1_1: | 748 | case EVDF_PIXEL_SHADER_1_1: |
749 | case EVDF_PIXEL_SHADER_1_2: | 749 | case EVDF_PIXEL_SHADER_1_2: |
750 | case EVDF_ARB_FRAGMENT_PROGRAM_1: | 750 | case EVDF_ARB_FRAGMENT_PROGRAM_1: |
751 | return FeatureAvailable[IRR_ARB_fragment_program] || FeatureAvailable[IRR_NV_fragment_program]; | 751 | return FeatureAvailable[IRR_ARB_fragment_program] || FeatureAvailable[IRR_NV_fragment_program]; |
752 | case EVDF_PIXEL_SHADER_2_0: | 752 | case EVDF_PIXEL_SHADER_2_0: |
753 | case EVDF_VERTEX_SHADER_2_0: | 753 | case EVDF_VERTEX_SHADER_2_0: |
754 | case EVDF_ARB_GLSL: | 754 | case EVDF_ARB_GLSL: |
755 | return (FeatureAvailable[IRR_ARB_shading_language_100]||Version>=200); | 755 | return (FeatureAvailable[IRR_ARB_shading_language_100]||Version>=200); |
756 | case EVDF_TEXTURE_NSQUARE: | 756 | case EVDF_TEXTURE_NSQUARE: |
757 | return true; // non-square is always supported | 757 | return true; // non-square is always supported |
758 | case EVDF_TEXTURE_NPOT: | 758 | case EVDF_TEXTURE_NPOT: |
759 | // Some ATI cards seem to have only SW support in OpenGL 2.0 | 759 | // Some ATI cards seem to have only SW support in OpenGL 2.0 |
760 | // drivers if the extension is not exposed, so we skip this | 760 | // drivers if the extension is not exposed, so we skip this |
761 | // extra test for now! | 761 | // extra test for now! |
762 | // return (FeatureAvailable[IRR_ARB_texture_non_power_of_two]||Version>=200); | 762 | // return (FeatureAvailable[IRR_ARB_texture_non_power_of_two]||Version>=200); |
763 | return (FeatureAvailable[IRR_ARB_texture_non_power_of_two]); | 763 | return (FeatureAvailable[IRR_ARB_texture_non_power_of_two]); |
764 | case EVDF_FRAMEBUFFER_OBJECT: | 764 | case EVDF_FRAMEBUFFER_OBJECT: |
765 | return FeatureAvailable[IRR_EXT_framebuffer_object] || FeatureAvailable[IRR_ARB_framebuffer_object]; | 765 | return FeatureAvailable[IRR_EXT_framebuffer_object] || FeatureAvailable[IRR_ARB_framebuffer_object]; |
766 | case EVDF_VERTEX_BUFFER_OBJECT: | 766 | case EVDF_VERTEX_BUFFER_OBJECT: |
767 | return FeatureAvailable[IRR_ARB_vertex_buffer_object]; | 767 | return FeatureAvailable[IRR_ARB_vertex_buffer_object]; |
768 | case EVDF_COLOR_MASK: | 768 | case EVDF_COLOR_MASK: |
769 | return true; | 769 | return true; |
770 | case EVDF_ALPHA_TO_COVERAGE: | 770 | case EVDF_ALPHA_TO_COVERAGE: |
771 | return FeatureAvailable[IRR_ARB_multisample]; | 771 | return FeatureAvailable[IRR_ARB_multisample]; |
772 | case EVDF_GEOMETRY_SHADER: | 772 | case EVDF_GEOMETRY_SHADER: |
773 | return FeatureAvailable[IRR_ARB_geometry_shader4] || FeatureAvailable[IRR_EXT_geometry_shader4] || FeatureAvailable[IRR_NV_geometry_program4] || FeatureAvailable[IRR_NV_geometry_shader4]; | 773 | return FeatureAvailable[IRR_ARB_geometry_shader4] || FeatureAvailable[IRR_EXT_geometry_shader4] || FeatureAvailable[IRR_NV_geometry_program4] || FeatureAvailable[IRR_NV_geometry_shader4]; |
774 | case EVDF_MULTIPLE_RENDER_TARGETS: | 774 | case EVDF_MULTIPLE_RENDER_TARGETS: |
775 | return FeatureAvailable[IRR_ARB_draw_buffers] || FeatureAvailable[IRR_ATI_draw_buffers]; | 775 | return FeatureAvailable[IRR_ARB_draw_buffers] || FeatureAvailable[IRR_ATI_draw_buffers]; |
776 | case EVDF_MRT_BLEND: | 776 | case EVDF_MRT_BLEND: |
777 | case EVDF_MRT_COLOR_MASK: | 777 | case EVDF_MRT_COLOR_MASK: |
778 | return FeatureAvailable[IRR_EXT_draw_buffers2]; | 778 | return FeatureAvailable[IRR_EXT_draw_buffers2]; |
779 | case EVDF_MRT_BLEND_FUNC: | 779 | case EVDF_MRT_BLEND_FUNC: |
780 | return FeatureAvailable[IRR_ARB_draw_buffers_blend] || FeatureAvailable[IRR_AMD_draw_buffers_blend]; | 780 | return FeatureAvailable[IRR_ARB_draw_buffers_blend] || FeatureAvailable[IRR_AMD_draw_buffers_blend]; |
781 | case EVDF_OCCLUSION_QUERY: | 781 | case EVDF_OCCLUSION_QUERY: |
782 | return FeatureAvailable[IRR_ARB_occlusion_query] && OcclusionQuerySupport; | 782 | return FeatureAvailable[IRR_ARB_occlusion_query] && OcclusionQuerySupport; |
783 | case EVDF_POLYGON_OFFSET: | 783 | case EVDF_POLYGON_OFFSET: |
784 | // both features supported with OpenGL 1.1 | 784 | // both features supported with OpenGL 1.1 |
785 | return Version>=110; | 785 | return Version>=110; |
786 | case EVDF_BLEND_OPERATIONS: | 786 | case EVDF_BLEND_OPERATIONS: |
787 | return (Version>=120) || FeatureAvailable[IRR_EXT_blend_minmax] || | 787 | return (Version>=120) || FeatureAvailable[IRR_EXT_blend_minmax] || |
788 | FeatureAvailable[IRR_EXT_blend_subtract] || FeatureAvailable[IRR_EXT_blend_logic_op]; | 788 | FeatureAvailable[IRR_EXT_blend_subtract] || FeatureAvailable[IRR_EXT_blend_logic_op]; |
789 | case EVDF_TEXTURE_MATRIX: | 789 | case EVDF_TEXTURE_MATRIX: |
790 | #ifdef _IRR_COMPILE_WITH_CG_ | 790 | #ifdef _IRR_COMPILE_WITH_CG_ |
791 | // available iff. define is present | 791 | // available iff. define is present |
792 | case EVDF_CG: | 792 | case EVDF_CG: |
793 | #endif | 793 | #endif |
794 | return true; | 794 | return true; |
795 | default: | 795 | default: |
796 | return false; | 796 | return false; |
797 | }; | 797 | }; |
798 | } | 798 | } |
799 | 799 | ||
800 | 800 | ||
801 | } | 801 | } |
802 | } | 802 | } |
803 | 803 | ||
804 | #endif | 804 | #endif |