1 // Copyright (C) 2023 Vitaliy Lobachevskiy
\r
2 // Copyright (C) 2015 Patryk Nadrowski
\r
3 // Copyright (C) 2009-2010 Amundis
\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
9 #include "EDriverFeatures.h"
\r
10 #include "irrTypes.h"
\r
15 #include "COGLESCoreExtensionHandler.h"
\r
22 class COpenGL3ExtensionHandler : public COGLESCoreExtensionHandler
\r
25 COpenGL3ExtensionHandler() : COGLESCoreExtensionHandler() {}
\r
27 void initExtensions();
\r
29 bool queryFeature(video::E_VIDEO_DRIVER_FEATURE feature) const
\r
33 case EVDF_RENDER_TO_TARGET:
\r
34 case EVDF_HARDWARE_TL:
\r
35 case EVDF_MULTITEXTURE:
\r
36 case EVDF_BILINEAR_FILTER:
\r
38 case EVDF_MIP_MAP_AUTO_UPDATE:
\r
39 case EVDF_VERTEX_SHADER_1_1:
\r
40 case EVDF_PIXEL_SHADER_1_1:
\r
41 case EVDF_PIXEL_SHADER_1_2:
\r
42 case EVDF_PIXEL_SHADER_2_0:
\r
43 case EVDF_VERTEX_SHADER_2_0:
\r
45 case EVDF_TEXTURE_NSQUARE:
\r
46 case EVDF_TEXTURE_NPOT:
\r
47 case EVDF_FRAMEBUFFER_OBJECT:
\r
48 case EVDF_VERTEX_BUFFER_OBJECT:
\r
49 case EVDF_COLOR_MASK:
\r
50 case EVDF_ALPHA_TO_COVERAGE:
\r
51 case EVDF_POLYGON_OFFSET:
\r
52 case EVDF_BLEND_OPERATIONS:
\r
53 case EVDF_BLEND_SEPARATE:
\r
54 case EVDF_TEXTURE_MATRIX:
\r
55 case EVDF_TEXTURE_CUBEMAP:
\r
57 case EVDF_ARB_VERTEX_PROGRAM_1:
\r
58 case EVDF_ARB_FRAGMENT_PROGRAM_1:
\r
59 case EVDF_GEOMETRY_SHADER:
\r
60 case EVDF_MULTIPLE_RENDER_TARGETS:
\r
61 case EVDF_MRT_BLEND:
\r
62 case EVDF_MRT_COLOR_MASK:
\r
63 case EVDF_MRT_BLEND_FUNC:
\r
64 case EVDF_OCCLUSION_QUERY:
\r
66 case EVDF_TEXTURE_COMPRESSED_DXT:
\r
67 return false; // NV Tegra need improvements here
\r
68 case EVDF_TEXTURE_COMPRESSED_PVRTC:
\r
69 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc];
\r
70 case EVDF_TEXTURE_COMPRESSED_PVRTC2:
\r
71 return FeatureAvailable[IRR_GL_IMG_texture_compression_pvrtc2];
\r
72 case EVDF_TEXTURE_COMPRESSED_ETC1:
\r
73 return FeatureAvailable[IRR_GL_OES_compressed_ETC1_RGB8_texture];
\r
74 case EVDF_TEXTURE_COMPRESSED_ETC2:
\r
76 case EVDF_STENCIL_BUFFER:
\r
77 return StencilBuffer;
\r
83 inline void irrGlActiveTexture(GLenum texture)
\r
85 glActiveTexture(texture);
\r
88 inline void irrGlCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border,
\r
89 GLsizei imageSize, const void* data)
\r
91 glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
\r
94 inline void irrGlCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height,
\r
95 GLenum format, GLsizei imageSize, const void* data)
\r
97 glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
\r
100 inline void irrGlUseProgram(GLuint prog)
\r
102 glUseProgram(prog);
\r
105 inline void irrGlBindFramebuffer(GLenum target, GLuint framebuffer)
\r
107 glBindFramebuffer(target, framebuffer);
\r
110 inline void irrGlDeleteFramebuffers(GLsizei n, const GLuint *framebuffers)
\r
112 glDeleteFramebuffers(n, framebuffers);
\r
115 inline void irrGlGenFramebuffers(GLsizei n, GLuint *framebuffers)
\r
117 glGenFramebuffers(n, framebuffers);
\r
120 inline GLenum irrGlCheckFramebufferStatus(GLenum target)
\r
122 return glCheckFramebufferStatus(target);
\r
125 inline void irrGlFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
\r
127 glFramebufferTexture2D(target, attachment, textarget, texture, level);
\r
130 inline void irrGlGenerateMipmap(GLenum target)
\r
132 glGenerateMipmap(target);
\r
135 inline void irrGlActiveStencilFace(GLenum face)
\r
139 inline void irrGlDrawBuffer(GLenum mode)
\r
143 inline void irrGlDrawBuffers(GLsizei n, const GLenum *bufs)
\r
147 inline void irrGlBlendFuncSeparate(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha)
\r
149 glBlendFuncSeparate(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha);
\r
152 inline void irrGlBlendEquation(GLenum mode)
\r
154 glBlendEquation(mode);
\r
157 inline void irrGlEnableIndexed(GLenum target, GLuint index)
\r
161 inline void irrGlDisableIndexed(GLenum target, GLuint index)
\r
165 inline void irrGlColorMaskIndexed(GLuint buf, GLboolean r, GLboolean g, GLboolean b, GLboolean a)
\r
169 inline void irrGlBlendFuncIndexed(GLuint buf, GLenum src, GLenum dst)
\r
173 inline void irrGlBlendFuncSeparateIndexed(GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha)
\r
177 inline void irrGlBlendEquationIndexed(GLuint buf, GLenum mode)
\r
181 inline void irrGlBlendEquationSeparateIndexed(GLuint buf, GLenum modeRGB, GLenum modeAlpha)
\r