]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/COGLESExtensionHandler.cpp
4badf221e9b7923008f1a8944545e83f93782cc0
[irrlicht.git] / source / Irrlicht / COGLESExtensionHandler.cpp
1 // Copyright (C) 2008 Christian Stehno\r
2 // Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt\r
3 // 2017 modified by Michael Zeilfelder (unifying extension handlers)\r
4 // This file is part of the "Irrlicht Engine".\r
5 // For conditions of distribution and use, see copyright notice in Irrlicht.h\r
6 \r
7 #include "COGLESExtensionHandler.h"\r
8 \r
9 #ifdef _IRR_COMPILE_WITH_OGLES1_\r
10 \r
11 #include "irrString.h"\r
12 #include "SMaterial.h"\r
13 #include "fast_atof.h"\r
14 \r
15 #if defined(_IRR_OGLES1_USE_EXTPOINTER_)\r
16 #if defined(_IRR_COMPILE_WITH_ANDROID_DEVICE_) || defined(_IRR_COMPILE_WITH_FB_DEVICE_) || defined(_IRR_COMPILE_WITH_WINDOWS_DEVICE_)\r
17 #include <EGL/egl.h>\r
18 #else\r
19 #include <GLES/egl.h>\r
20 #endif\r
21 #endif\r
22 \r
23 namespace irr\r
24 {\r
25 namespace video\r
26 {\r
27 \r
28         COGLES1ExtensionHandler::COGLES1ExtensionHandler() : COGLESCoreExtensionHandler(),\r
29                 MaxUserClipPlanes(0), MaxLights(0)\r
30 #if defined(_IRR_OGLES1_USE_EXTPOINTER_)\r
31                 , pGlBlendEquationOES(0), pGlBlendFuncSeparateOES(0),\r
32                 pGlBindFramebufferOES(0), pGlDeleteFramebuffersOES(0),\r
33                 pGlGenFramebuffersOES(0), pGlCheckFramebufferStatusOES(0),\r
34                 pGlFramebufferTexture2DOES(0), pGlGenerateMipmapOES(0)\r
35 #endif\r
36         {\r
37         }\r
38 \r
39         void COGLES1ExtensionHandler::initExtensions()\r
40         {\r
41                 getGLVersion();\r
42 \r
43                 if (Version >= 100)\r
44                         os::Printer::log("OpenGL ES driver version is 1.1.", ELL_INFORMATION);\r
45                 else\r
46                         os::Printer::log("OpenGL ES driver version is 1.0.", ELL_WARNING);\r
47 \r
48                 getGLExtensions();\r
49 \r
50                 GLint val = 0;\r
51 \r
52                 if (Version > 100 || FeatureAvailable[IRR_GL_IMG_user_clip_plane])\r
53                 {\r
54                         glGetIntegerv(GL_MAX_CLIP_PLANES, &val);\r
55                         MaxUserClipPlanes = static_cast<u8>(val);\r
56                 }\r
57 \r
58                 glGetIntegerv(GL_MAX_LIGHTS, &val);\r
59                 MaxLights = static_cast<u8>(val);\r
60 \r
61                 glGetIntegerv(GL_MAX_TEXTURE_UNITS, &val);\r
62                 Feature.MaxTextureUnits = static_cast<u8>(val);\r
63 \r
64 #ifdef GL_EXT_texture_filter_anisotropic\r
65                 if (FeatureAvailable[IRR_GL_EXT_texture_filter_anisotropic])\r
66                 {\r
67                         glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &val);\r
68                         MaxAnisotropy = static_cast<u8>(val);\r
69                 }\r
70 #endif\r
71 #ifdef GL_MAX_ELEMENTS_INDICES\r
72                 glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &val);\r
73                 MaxIndices = val;\r
74 #endif\r
75                 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &val);\r
76                 MaxTextureSize = static_cast<u32>(val);\r
77 #ifdef GL_EXT_texture_lod_bias\r
78                 if (FeatureAvailable[IRR_GL_EXT_texture_lod_bias])\r
79                         glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &MaxTextureLODBias);\r
80 #endif\r
81                 glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, DimAliasedLine);\r
82                 glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, DimAliasedPoint);\r
83 \r
84                 Feature.MaxTextureUnits = core::min_(Feature.MaxTextureUnits, static_cast<u8>(MATERIAL_MAX_TEXTURES));\r
85                 Feature.MaxTextureUnits = core::min_(Feature.MaxTextureUnits, static_cast<u8>(MATERIAL_MAX_TEXTURES_USED));\r
86                 Feature.ColorAttachment = 1;\r
87 \r
88 #if defined(_IRR_OGLES1_USE_EXTPOINTER_)\r
89                 pGlBlendEquationOES = (PFNGLBLENDEQUATIONOESPROC)eglGetProcAddress("glBlendEquationOES");\r
90                 pGlBlendFuncSeparateOES = (PFNGLBLENDFUNCSEPARATEOESPROC)eglGetProcAddress("glBlendFuncSeparateOES");\r
91                 pGlBindFramebufferOES = (PFNGLBINDFRAMEBUFFEROESPROC)eglGetProcAddress("glBindFramebufferOES");\r
92                 pGlDeleteFramebuffersOES = (PFNGLDELETEFRAMEBUFFERSOESPROC)eglGetProcAddress("glDeleteFramebuffersOES");\r
93                 pGlGenFramebuffersOES = (PFNGLGENFRAMEBUFFERSOESPROC)eglGetProcAddress("glGenFramebuffersOES");\r
94                 pGlCheckFramebufferStatusOES = (PFNGLCHECKFRAMEBUFFERSTATUSOESPROC)eglGetProcAddress("glCheckFramebufferStatusOES");\r
95                 pGlFramebufferTexture2DOES = (PFNGLFRAMEBUFFERTEXTURE2DOESPROC)eglGetProcAddress("glFramebufferTexture2DOES");\r
96                 pGlGenerateMipmapOES = (PFNGLGENERATEMIPMAPOESPROC)eglGetProcAddress("glGenerateMipmapOES");\r
97 #endif\r
98         }\r
99 \r
100 } // end namespace video\r
101 } // end namespace irr\r
102 \r
103 \r
104 #endif // _IRR_COMPILE_WITH_OGLES2_\r