diff options
author | sfan5 <sfan5@live.de> | 2023-04-06 11:20:03 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2023-04-06 11:20:03 +0200 |
commit | 3a074e4124fa483fb3188b57d89e199f6d04b568 (patch) | |
tree | df7609b25b8a7020ca13cf6d869a862d9fab80de /source/Irrlicht/OpenGL/ExtensionHandler.cpp | |
parent | 58a96b7d2399ede5e953518b784ecffd4751b765 (diff) | |
parent | 70ee4b05aa4a78809552e6bc6c3ff7cfe6c012af (diff) | |
download | irrlicht-3a074e4124fa483fb3188b57d89e199f6d04b568.tar.xz |
Merge branch 'opengl3' of https://github.com/numberZero/irrlicht
Diffstat (limited to 'source/Irrlicht/OpenGL/ExtensionHandler.cpp')
-rw-r--r-- | source/Irrlicht/OpenGL/ExtensionHandler.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/source/Irrlicht/OpenGL/ExtensionHandler.cpp b/source/Irrlicht/OpenGL/ExtensionHandler.cpp new file mode 100644 index 0000000..b9cb75a --- /dev/null +++ b/source/Irrlicht/OpenGL/ExtensionHandler.cpp @@ -0,0 +1,66 @@ +// Copyright (C) 2015 Patryk Nadrowski +// Copyright (C) 2009-2010 Amundis +// 2017 modified by Michael Zeilfelder (unifying extension handlers) +// This file is part of the "Irrlicht Engine". +// For conditions of distribution and use, see copyright notice in Irrlicht.h + +#include "ExtensionHandler.h" + +#include "irrString.h" +#include "SMaterial.h" +#include "fast_atof.h" +#include <mt_opengl.h> + +namespace irr +{ +namespace video +{ + void COpenGL3ExtensionHandler::initExtensions() + { + GLint major, minor; + glGetIntegerv(GL_MAJOR_VERSION, &major); + glGetIntegerv(GL_MINOR_VERSION, &minor); + Version = 100 * major + 10 * minor; + + GLint ext_count = 0; + GL.GetIntegerv(GL_NUM_EXTENSIONS, &ext_count); + for (int k = 0; k < ext_count; k++) { + auto ext_name = (char *)GL.GetStringi(GL_EXTENSIONS, k); + for (size_t j=0; j<IRR_OGLES_Feature_Count; ++j) { + if (!strcmp(getFeatureString(j), ext_name)) { + FeatureAvailable[j] = true; + break; + } + } + } + + GLint val=0; + glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &val); + Feature.MaxTextureUnits = static_cast<u8>(val); + + #ifdef GL_EXT_texture_filter_anisotropic + if (FeatureAvailable[IRR_GL_EXT_texture_filter_anisotropic]) + { + glGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &val); + MaxAnisotropy = static_cast<u8>(val); + } + #endif + #ifdef GL_MAX_ELEMENTS_INDICES + glGetIntegerv(GL_MAX_ELEMENTS_INDICES, &val); + MaxIndices=val; + #endif + glGetIntegerv(GL_MAX_TEXTURE_SIZE, &val); + MaxTextureSize=static_cast<u32>(val); + #ifdef GL_EXT_texture_lod_bias + if (FeatureAvailable[IRR_GL_EXT_texture_lod_bias]) + glGetFloatv(GL_MAX_TEXTURE_LOD_BIAS_EXT, &MaxTextureLODBias); + #endif + glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, DimAliasedLine); + glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE, DimAliasedPoint); + + Feature.MaxTextureUnits = core::min_(Feature.MaxTextureUnits, static_cast<u8>(MATERIAL_MAX_TEXTURES)); + Feature.ColorAttachment = 1; + } + +} // end namespace video +} // end namespace irr |