]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/OpenGL/ExtensionHandler.cpp
055738b91e66645f0a6c97972327b318e4530cb5
[irrlicht.git] / source / Irrlicht / OpenGL / ExtensionHandler.cpp
1 // Copyright (C) 2015 Patryk Nadrowski\r
2 // Copyright (C) 2009-2010 Amundis\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 "ExtensionHandler.h"\r
8 \r
9 #include "irrString.h"\r
10 #include "SMaterial.h"\r
11 #include "fast_atof.h"\r
12 #include <mt_opengl.h>\r
13 \r
14 namespace irr\r
15 {\r
16 namespace video\r
17 {\r
18         void COpenGL3ExtensionHandler::initExtensions()\r
19         {\r
20                 GLint major, minor;\r
21                 glGetIntegerv(GL_MAJOR_VERSION, &major);\r
22                 glGetIntegerv(GL_MINOR_VERSION, &minor);\r
23                 Version = 100 * major + 10 * minor;\r
24 \r
25                 GLint ext_count = 0;\r
26                 GL.GetIntegerv(GL_NUM_EXTENSIONS, &ext_count);\r
27                 for (int k = 0; k < ext_count; k++) {\r
28                         auto ext_name = (char *)GL.GetStringi(GL_EXTENSIONS, k);\r
29                         for (size_t j=0; j<IRR_OGLES_Feature_Count; ++j) {\r
30                                 if (!strcmp(getFeatureString(j), ext_name)) {\r
31                                         FeatureAvailable[j] = true;\r
32                                         break;\r
33                                 }\r
34                         }\r
35                 }\r
36 \r
37                 GLint val=0;\r
38                 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &val);\r
39                 Feature.MaxTextureUnits = static_cast<u8>(val);\r
40 \r
41         #ifdef GL_EXT_texture_filter_anisotropic\r
42                 if (FeatureAvailable[IRR_GL_EXT_texture_filter_anisotropic])\r
43                 {\r
44                         glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &val);\r
45                         MaxAnisotropy = static_cast<u8>(val);\r
46                 }\r
47         #endif\r
48         #ifdef GL_MAX_ELEMENTS_INDICES\r
49                 glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &val);\r
50                 MaxIndices=val;\r
51         #endif\r
52                 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &val);\r
53                 MaxTextureSize=static_cast<u32>(val);\r
54         #ifdef GL_EXT_texture_lod_bias\r
55                 if (FeatureAvailable[IRR_GL_EXT_texture_lod_bias])\r
56                         glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &MaxTextureLODBias);\r
57         #endif\r
58                 glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, DimAliasedLine);\r
59                 glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, DimAliasedPoint);\r
60 \r
61                 Feature.MaxTextureUnits = core::min_(Feature.MaxTextureUnits, static_cast<u8>(MATERIAL_MAX_TEXTURES));\r
62                 Feature.ColorAttachment = 1;\r
63         }\r
64 \r
65 } // end namespace video\r
66 } // end namespace irr\r