1 #ifndef DALI_INTERNAL_GL_IMPLEMENTATION_H
2 #define DALI_INTERNAL_GL_IMPLEMENTATION_H
5 * Copyright (c) 2022 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <GLES2/gl2.h>
23 #include <GLES2/gl2ext.h>
24 #include <dali/devel-api/threading/conditional-wait.h>
25 #include <dali/integration-api/gl-abstraction.h>
26 #include <dali/internal/graphics/common/egl-include.h>
27 #include <dali/public-api/common/vector-wrapper.h>
33 #include <dali/internal/graphics/gles/gl-extensions-support.h>
34 #include <dali/internal/graphics/gles/gles-abstraction.h>
35 #include <dali/internal/graphics/gles/gles2-implementation.h>
36 #include <dali/internal/graphics/gles/gles3-implementation.h>
46 static constexpr int32_t INITIAL_GLES_VERSION = 30;
47 static constexpr int32_t GLES_VERSION_SUPPORT_BLEND_EQUATION_ADVANCED = 32;
48 static constexpr const char* LEGACY_SHADING_LANGUAGE_VERSION = "100";
50 static constexpr const char* DEFAULT_SAMPLER_TYPE = "sampler2D";
52 static constexpr const char* FRAGMENT_SHADER_ADVANCED_BLEND_EQUATION_PREFIX =
53 "#ifdef GL_KHR_blend_equation_advanced\n"
54 "#extension GL_KHR_blend_equation_advanced : enable\n"
57 "#if defined(GL_KHR_blend_equation_advanced) || __VERSION__>=320\n"
58 " layout(blend_support_all_equations) out;\n"
61 static constexpr const char* FRAGMENT_SHADER_OUTPUT_COLOR_STRING =
62 "out mediump vec4 fragColor;\n";
64 static constexpr const char* OES_EGL_IMAGE_EXTERNAL_STRING = "#extension GL_OES_EGL_image_external:require\n";
66 static constexpr const char* OES_EGL_IMAGE_EXTERNAL_STRING_ESSL3 = "#extension GL_OES_EGL_image_external_essl3:require\n";
71 * GlImplementation is a concrete implementation for GlAbstraction.
72 * The class provides an OpenGL-ES 2.0 or 3.0 implementation.
73 * The class is provided when creating the Integration::Core object.
75 class GlImplementation : public Dali::Integration::GlAbstraction
79 : mGlExtensionSupportedCacheList(),
80 mContextCreatedWaitCondition(),
82 mMaxTextureSamples(0),
83 mVertexShaderPrefix(""),
84 mGlesVersion(INITIAL_GLES_VERSION),
85 mShadingLanguageVersion(100),
86 mShadingLanguageVersionCached(false),
87 mIsSurfacelessContextSupported(false),
88 mIsContextCreated(false)
90 mImpl.reset(new Gles3Implementation());
93 virtual ~GlImplementation()
97 void PreRender() override
99 /* Do nothing in main implementation */
102 void PostRender() override
104 /* Do nothing in main implementation */
107 void ContextCreated()
109 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &mMaxTextureSize);
111 // Only change gles version for the device that support above gles 3.0.
112 if(mGlesVersion >= INITIAL_GLES_VERSION)
114 GLint majorVersion, minorVersion;
115 glGetIntegerv(GL_MAJOR_VERSION, &majorVersion);
116 glGetIntegerv(GL_MINOR_VERSION, &minorVersion);
117 mGlesVersion = majorVersion * 10 + minorVersion;
120 if(mGlesVersion >= GLES_VERSION_SUPPORT_BLEND_EQUATION_ADVANCED)
122 SetIsAdvancedBlendEquationSupported(true);
125 if(mGlExtensionSupportedCacheList.NeedFullCheck())
127 // fully check gl extensions if we miss some extension supported
128 mGlExtensionSupportedCacheList.EnsureGlExtensionSupportedCheck();
131 if(IsMultisampledRenderToTextureSupported())
133 glGetIntegerv(GL_MAX_SAMPLES_EXT, &mMaxTextureSamples);
136 if(!mShadingLanguageVersionCached)
138 std::istringstream shadingLanguageVersionStream(reinterpret_cast<const char*>(glGetString(GL_SHADING_LANGUAGE_VERSION)));
140 uint32_t tokenCount = 0;
141 while(std::getline(shadingLanguageVersionStream, token, ' '))
143 if(tokenCount == 3 && token == "ES")
145 std::getline(shadingLanguageVersionStream, token, '.');
146 mShadingLanguageVersion = std::atoi(token.c_str());
147 mShadingLanguageVersion *= 100;
148 std::getline(shadingLanguageVersionStream, token, '.');
149 mShadingLanguageVersion += std::atoi(token.c_str());
157 ConditionalWait::ScopedLock lock(mContextCreatedWaitCondition);
158 mIsContextCreated = true;
159 mContextCreatedWaitCondition.Notify(lock);
163 void SetGlesVersion(const int32_t glesVersion)
165 if(mGlesVersion / 10 != glesVersion / 10)
167 mGlesVersion = glesVersion;
168 if(mGlesVersion >= 30)
170 mImpl.reset(new Gles3Implementation());
174 mImpl.reset(new Gles2Implementation());
179 void SetIsSurfacelessContextSupported(const bool isSupported)
181 mIsSurfacelessContextSupported = isSupported;
184 bool IsSurfacelessContextSupported() const override
186 return mIsSurfacelessContextSupported;
189 void SetIsAdvancedBlendEquationSupported(const bool isSupported)
191 mGlExtensionSupportedCacheList.SetSupported(GlExtensionCache::GlExtensionCheckerType::BLEND_EQUATION_ADVANCED, isSupported);
194 bool IsAdvancedBlendEquationSupported()
196 ConditionalWait::ScopedLock lock(mContextCreatedWaitCondition);
198 const auto type = GlExtensionCache::GlExtensionCheckerType::BLEND_EQUATION_ADVANCED;
199 if(!mIsContextCreated && !mGlExtensionSupportedCacheList.GetCached(type))
201 mContextCreatedWaitCondition.Wait(lock);
203 return mGlExtensionSupportedCacheList.GetSupported(type);
206 void SetIsMultisampledRenderToTextureSupported(const bool isSupported)
208 mGlExtensionSupportedCacheList.SetSupported(GlExtensionCache::GlExtensionCheckerType::MULTISAMPLED_RENDER_TO_TEXTURE, isSupported);
211 bool IsMultisampledRenderToTextureSupported()
213 ConditionalWait::ScopedLock lock(mContextCreatedWaitCondition);
215 const auto type = GlExtensionCache::GlExtensionCheckerType::MULTISAMPLED_RENDER_TO_TEXTURE;
216 if(!mIsContextCreated && !mGlExtensionSupportedCacheList.GetCached(type))
218 mContextCreatedWaitCondition.Wait(lock);
220 return mGlExtensionSupportedCacheList.GetSupported(type);
223 bool IsBlendEquationSupported(DevelBlendEquation::Type blendEquation)
225 switch(blendEquation)
227 case DevelBlendEquation::ADD:
228 case DevelBlendEquation::SUBTRACT:
229 case DevelBlendEquation::REVERSE_SUBTRACT:
233 case DevelBlendEquation::MIN:
234 case DevelBlendEquation::MAX:
236 return (GetGlesVersion() >= 30);
238 case DevelBlendEquation::MULTIPLY:
239 case DevelBlendEquation::SCREEN:
240 case DevelBlendEquation::OVERLAY:
241 case DevelBlendEquation::DARKEN:
242 case DevelBlendEquation::LIGHTEN:
243 case DevelBlendEquation::COLOR_DODGE:
244 case DevelBlendEquation::COLOR_BURN:
245 case DevelBlendEquation::HARD_LIGHT:
246 case DevelBlendEquation::SOFT_LIGHT:
247 case DevelBlendEquation::DIFFERENCE:
248 case DevelBlendEquation::EXCLUSION:
249 case DevelBlendEquation::HUE:
250 case DevelBlendEquation::SATURATION:
251 case DevelBlendEquation::COLOR:
252 case DevelBlendEquation::LUMINOSITY:
254 return IsAdvancedBlendEquationSupported();
266 std::string GetShaderVersionPrefix()
268 if(mShaderVersionPrefix == "")
270 mShaderVersionPrefix = "#version " + std::to_string(GetShadingLanguageVersion());
271 if(GetShadingLanguageVersion() < 300)
273 mShaderVersionPrefix += "\n";
277 mShaderVersionPrefix += " es\n";
280 return mShaderVersionPrefix;
283 std::string GetVertexShaderPrefix()
285 if(mVertexShaderPrefix == "")
287 mVertexShaderPrefix = GetShaderVersionPrefix();
289 if(GetShadingLanguageVersion() < 300)
291 mVertexShaderPrefix += "#define INPUT attribute\n";
292 mVertexShaderPrefix += "#define OUTPUT varying\n";
296 mVertexShaderPrefix += "#define INPUT in\n";
297 mVertexShaderPrefix += "#define OUTPUT out\n";
300 return mVertexShaderPrefix;
303 std::string GetFragmentShaderPrefix()
305 if(mFragmentShaderPrefix == "")
307 mFragmentShaderPrefix = GetShaderVersionPrefix();
309 if(GetShadingLanguageVersion() < 300)
311 mFragmentShaderPrefix += "#define INPUT varying\n";
312 mFragmentShaderPrefix += "#define OUT_COLOR gl_FragColor\n";
313 mFragmentShaderPrefix += "#define TEXTURE texture2D\n";
317 mFragmentShaderPrefix += "#define INPUT in\n";
318 mFragmentShaderPrefix += "#define OUT_COLOR fragColor\n";
319 mFragmentShaderPrefix += "#define TEXTURE texture\n";
321 if(IsAdvancedBlendEquationSupported())
323 mFragmentShaderPrefix += FRAGMENT_SHADER_ADVANCED_BLEND_EQUATION_PREFIX;
326 mFragmentShaderPrefix += FRAGMENT_SHADER_OUTPUT_COLOR_STRING;
329 return mFragmentShaderPrefix;
332 bool TextureRequiresConverting(const GLenum imageGlFormat, const GLenum textureGlFormat, const bool isSubImage) const override
334 bool convert = ((imageGlFormat == GL_RGB) && (textureGlFormat == GL_RGBA));
335 if(mGlesVersion >= 30)
337 // Don't convert manually from RGB to RGBA if GLES >= 3.0 and a sub-image is uploaded.
338 convert = (convert && !isSubImage);
343 int GetMaxTextureSize()
345 ConditionalWait::ScopedLock lock(mContextCreatedWaitCondition);
346 if(!mIsContextCreated)
348 mContextCreatedWaitCondition.Wait(lock);
350 return mMaxTextureSize;
353 int GetMaxTextureSamples()
355 ConditionalWait::ScopedLock lock(mContextCreatedWaitCondition);
356 if(!mIsContextCreated)
358 mContextCreatedWaitCondition.Wait(lock);
360 return mMaxTextureSamples;
365 ConditionalWait::ScopedLock lock(mContextCreatedWaitCondition);
366 if(!mIsContextCreated)
368 mContextCreatedWaitCondition.Wait(lock);
373 void SetShadingLanguageVersion(int shadingLanguageVersion)
375 mShadingLanguageVersion = shadingLanguageVersion;
376 mShadingLanguageVersionCached = true;
379 int GetShadingLanguageVersion()
381 ConditionalWait::ScopedLock lock(mContextCreatedWaitCondition);
382 if(!mIsContextCreated && !mShadingLanguageVersionCached)
384 mContextCreatedWaitCondition.Wait(lock);
386 return mShadingLanguageVersion;
389 bool ApplyNativeFragmentShader(std::string& shader, const char* customSamplerType)
391 bool modified = false;
392 std::string versionString = "#version";
393 size_t versionPosition = shader.find(versionString);
394 if(versionPosition != std::string::npos)
396 std::string extensionString;
397 size_t shadingLanguageVersionPosition = shader.find_first_not_of(" \t", versionPosition + versionString.length());
398 if(shadingLanguageVersionPosition != std::string::npos &&
399 shader.substr(shadingLanguageVersionPosition, 3) == LEGACY_SHADING_LANGUAGE_VERSION)
401 extensionString = OES_EGL_IMAGE_EXTERNAL_STRING;
405 extensionString = OES_EGL_IMAGE_EXTERNAL_STRING_ESSL3;
408 if(shader.find(extensionString) == std::string::npos)
411 size_t extensionPosition = shader.find_first_of("\n", versionPosition) + 1;
412 shader.insert(extensionPosition, extensionString);
417 if(shader.find(OES_EGL_IMAGE_EXTERNAL_STRING) == std::string::npos)
420 shader = OES_EGL_IMAGE_EXTERNAL_STRING + shader;
424 if(shader.find(customSamplerType) == std::string::npos)
426 size_t pos = shader.find(DEFAULT_SAMPLER_TYPE);
427 if(pos != std::string::npos)
430 shader.replace(pos, strlen(DEFAULT_SAMPLER_TYPE), customSamplerType);
439 void ActiveTexture(GLenum texture) override
441 glActiveTexture(texture);
444 void AttachShader(GLuint program, GLuint shader) override
446 glAttachShader(program, shader);
449 void BindAttribLocation(GLuint program, GLuint index, const char* name) override
451 glBindAttribLocation(program, index, name);
454 void BindBuffer(GLenum target, GLuint buffer) override
456 glBindBuffer(target, buffer);
459 void BindFramebuffer(GLenum target, GLuint framebuffer) override
461 glBindFramebuffer(target, framebuffer);
464 void BindRenderbuffer(GLenum target, GLuint renderbuffer) override
466 glBindRenderbuffer(target, renderbuffer);
469 void BindTexture(GLenum target, GLuint texture) override
471 glBindTexture(target, texture);
474 void BlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) override
476 glBlendColor(red, green, blue, alpha);
479 void BlendEquation(GLenum mode) override
481 glBlendEquation(mode);
484 void BlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) override
486 glBlendEquationSeparate(modeRGB, modeAlpha);
489 void BlendFunc(GLenum sfactor, GLenum dfactor) override
491 glBlendFunc(sfactor, dfactor);
494 void BlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) override
496 glBlendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha);
499 void BufferData(GLenum target, GLsizeiptr size, const void* data, GLenum usage) override
501 glBufferData(target, size, data, usage);
504 void BufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const void* data) override
506 glBufferSubData(target, offset, size, data);
509 GLenum CheckFramebufferStatus(GLenum target) override
511 return glCheckFramebufferStatus(target);
514 void Clear(GLbitfield mask) override
519 void ClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) override
521 glClearColor(red, green, blue, alpha);
524 void ClearDepthf(GLclampf depth) override
526 glClearDepthf(depth);
529 void ClearStencil(GLint s) override
534 void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) override
536 glColorMask(red, green, blue, alpha);
539 void CompileShader(GLuint shader) override
541 glCompileShader(shader);
544 void CompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void* data) override
546 glCompressedTexImage2D(target, level, internalformat, width, height, border, imageSize, data);
549 void CompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) override
551 glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data);
554 void CopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) override
556 glCopyTexImage2D(target, level, internalformat, x, y, width, height, border);
559 void CopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
561 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
564 GLuint CreateProgram(void) override
566 return glCreateProgram();
569 GLuint CreateShader(GLenum type) override
571 return glCreateShader(type);
574 void CullFace(GLenum mode) override
579 void DeleteBuffers(GLsizei n, const GLuint* buffers) override
581 glDeleteBuffers(n, buffers);
584 void DeleteFramebuffers(GLsizei n, const GLuint* framebuffers) override
586 glDeleteFramebuffers(n, framebuffers);
589 void DeleteProgram(GLuint program) override
591 glDeleteProgram(program);
594 void DeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) override
596 glDeleteRenderbuffers(n, renderbuffers);
599 void DeleteShader(GLuint shader) override
601 glDeleteShader(shader);
604 void DeleteTextures(GLsizei n, const GLuint* textures) override
606 glDeleteTextures(n, textures);
609 void DepthFunc(GLenum func) override
614 void DepthMask(GLboolean flag) override
619 void DepthRangef(GLclampf zNear, GLclampf zFar) override
621 glDepthRangef(zNear, zFar);
624 void DetachShader(GLuint program, GLuint shader) override
626 glDetachShader(program, shader);
629 void Disable(GLenum cap) override
634 void DisableVertexAttribArray(GLuint index) override
636 glDisableVertexAttribArray(index);
639 void DrawArrays(GLenum mode, GLint first, GLsizei count) override
641 glDrawArrays(mode, first, count);
644 void DrawElements(GLenum mode, GLsizei count, GLenum type, const void* indices) override
646 glDrawElements(mode, count, type, indices);
649 void Enable(GLenum cap) override
654 void EnableVertexAttribArray(GLuint index) override
656 glEnableVertexAttribArray(index);
659 void Finish(void) override
664 void Flush(void) override
669 void FramebufferRenderbuffer(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) override
671 glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
674 void FramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level) override
676 glFramebufferTexture2D(target, attachment, textarget, texture, level);
679 void FrontFace(GLenum mode) override
684 void GenBuffers(GLsizei n, GLuint* buffers) override
686 glGenBuffers(n, buffers);
689 void GenerateMipmap(GLenum target) override
691 glGenerateMipmap(target);
694 void GenFramebuffers(GLsizei n, GLuint* framebuffers) override
696 glGenFramebuffers(n, framebuffers);
699 void GenRenderbuffers(GLsizei n, GLuint* renderbuffers) override
701 glGenRenderbuffers(n, renderbuffers);
704 void GenTextures(GLsizei n, GLuint* textures) override
706 glGenTextures(n, textures);
709 void GetActiveAttrib(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) override
711 glGetActiveAttrib(program, index, bufsize, length, size, type, name);
714 void GetActiveUniform(GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, char* name) override
716 glGetActiveUniform(program, index, bufsize, length, size, type, name);
719 void GetAttachedShaders(GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) override
721 glGetAttachedShaders(program, maxcount, count, shaders);
724 int GetAttribLocation(GLuint program, const char* name) override
726 return glGetAttribLocation(program, name);
729 void GetBooleanv(GLenum pname, GLboolean* params) override
731 glGetBooleanv(pname, params);
734 void GetBufferParameteriv(GLenum target, GLenum pname, GLint* params) override
736 glGetBufferParameteriv(target, pname, params);
739 GLenum GetError(void) override
744 void GetFloatv(GLenum pname, GLfloat* params) override
746 glGetFloatv(pname, params);
749 void GetFramebufferAttachmentParameteriv(GLenum target, GLenum attachment, GLenum pname, GLint* params) override
751 glGetFramebufferAttachmentParameteriv(target, attachment, pname, params);
754 void GetIntegerv(GLenum pname, GLint* params) override
756 glGetIntegerv(pname, params);
759 void GetProgramiv(GLuint program, GLenum pname, GLint* params) override
761 glGetProgramiv(program, pname, params);
764 void GetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) override
766 glGetProgramInfoLog(program, bufsize, length, infolog);
769 void GetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) override
771 glGetRenderbufferParameteriv(target, pname, params);
774 void GetShaderiv(GLuint shader, GLenum pname, GLint* params) override
776 glGetShaderiv(shader, pname, params);
779 void GetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) override
781 glGetShaderInfoLog(shader, bufsize, length, infolog);
784 void GetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) override
786 glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
789 void GetShaderSource(GLuint shader, GLsizei bufsize, GLsizei* length, char* source) override
791 glGetShaderSource(shader, bufsize, length, source);
794 const GLubyte* GetString(GLenum name) override
796 return glGetString(name);
799 void GetTexParameterfv(GLenum target, GLenum pname, GLfloat* params) override
801 glGetTexParameterfv(target, pname, params);
804 void GetTexParameteriv(GLenum target, GLenum pname, GLint* params) override
806 glGetTexParameteriv(target, pname, params);
809 void GetUniformfv(GLuint program, GLint location, GLfloat* params) override
811 glGetUniformfv(program, location, params);
814 void GetUniformiv(GLuint program, GLint location, GLint* params) override
816 glGetUniformiv(program, location, params);
819 int GetUniformLocation(GLuint program, const char* name) override
821 return glGetUniformLocation(program, name);
824 void GetVertexAttribfv(GLuint index, GLenum pname, GLfloat* params) override
826 glGetVertexAttribfv(index, pname, params);
829 void GetVertexAttribiv(GLuint index, GLenum pname, GLint* params) override
831 glGetVertexAttribiv(index, pname, params);
834 void GetVertexAttribPointerv(GLuint index, GLenum pname, void** pointer) override
836 glGetVertexAttribPointerv(index, pname, pointer);
839 void Hint(GLenum target, GLenum mode) override
841 glHint(target, mode);
844 GLboolean IsBuffer(GLuint buffer) override
846 return glIsBuffer(buffer);
849 GLboolean IsEnabled(GLenum cap) override
851 return glIsEnabled(cap);
854 GLboolean IsFramebuffer(GLuint framebuffer) override
856 return glIsFramebuffer(framebuffer);
859 GLboolean IsProgram(GLuint program) override
861 return glIsProgram(program);
864 GLboolean IsRenderbuffer(GLuint renderbuffer) override
866 return glIsRenderbuffer(renderbuffer);
869 GLboolean IsShader(GLuint shader) override
871 return glIsShader(shader);
874 GLboolean IsTexture(GLuint texture) override
876 return glIsTexture(texture);
879 void LineWidth(GLfloat width) override
884 void LinkProgram(GLuint program) override
886 glLinkProgram(program);
889 void PixelStorei(GLenum pname, GLint param) override
891 glPixelStorei(pname, param);
894 void PolygonOffset(GLfloat factor, GLfloat units) override
896 glPolygonOffset(factor, units);
899 void ReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void* pixels) override
901 glReadPixels(x, y, width, height, format, type, pixels);
904 void ReleaseShaderCompiler(void) override
906 glReleaseShaderCompiler();
909 void RenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) override
911 glRenderbufferStorage(target, internalformat, width, height);
914 void SampleCoverage(GLclampf value, GLboolean invert) override
916 glSampleCoverage(value, invert);
919 void Scissor(GLint x, GLint y, GLsizei width, GLsizei height) override
921 glScissor(x, y, width, height);
924 void ShaderBinary(GLsizei n, const GLuint* shaders, GLenum binaryformat, const void* binary, GLsizei length) override
926 glShaderBinary(n, shaders, binaryformat, binary, length);
929 void ShaderSource(GLuint shader, GLsizei count, const char** string, const GLint* length) override
931 glShaderSource(shader, count, string, length);
934 void StencilFunc(GLenum func, GLint ref, GLuint mask) override
936 glStencilFunc(func, ref, mask);
939 void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) override
941 glStencilFuncSeparate(face, func, ref, mask);
944 void StencilMask(GLuint mask) override
949 void StencilMaskSeparate(GLenum face, GLuint mask) override
951 glStencilMaskSeparate(face, mask);
954 void StencilOp(GLenum fail, GLenum zfail, GLenum zpass) override
956 glStencilOp(fail, zfail, zpass);
959 void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) override
961 glStencilOpSeparate(face, fail, zfail, zpass);
964 void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels) override
966 glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
969 void TexParameterf(GLenum target, GLenum pname, GLfloat param) override
971 glTexParameterf(target, pname, param);
974 void TexParameterfv(GLenum target, GLenum pname, const GLfloat* params) override
976 glTexParameterfv(target, pname, params);
979 void TexParameteri(GLenum target, GLenum pname, GLint param) override
981 glTexParameteri(target, pname, param);
984 void TexParameteriv(GLenum target, GLenum pname, const GLint* params) override
986 glTexParameteriv(target, pname, params);
989 void TexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) override
991 glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
994 void Uniform1f(GLint location, GLfloat x) override
996 glUniform1f(location, x);
999 void Uniform1fv(GLint location, GLsizei count, const GLfloat* v) override
1001 glUniform1fv(location, count, v);
1004 void Uniform1i(GLint location, GLint x) override
1006 glUniform1i(location, x);
1009 void Uniform1iv(GLint location, GLsizei count, const GLint* v) override
1011 glUniform1iv(location, count, v);
1014 void Uniform2f(GLint location, GLfloat x, GLfloat y) override
1016 glUniform2f(location, x, y);
1019 void Uniform2fv(GLint location, GLsizei count, const GLfloat* v) override
1021 glUniform2fv(location, count, v);
1024 void Uniform2i(GLint location, GLint x, GLint y) override
1026 glUniform2i(location, x, y);
1029 void Uniform2iv(GLint location, GLsizei count, const GLint* v) override
1031 glUniform2iv(location, count, v);
1034 void Uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) override
1036 glUniform3f(location, x, y, z);
1039 void Uniform3fv(GLint location, GLsizei count, const GLfloat* v) override
1041 glUniform3fv(location, count, v);
1044 void Uniform3i(GLint location, GLint x, GLint y, GLint z) override
1046 glUniform3i(location, x, y, z);
1049 void Uniform3iv(GLint location, GLsizei count, const GLint* v) override
1051 glUniform3iv(location, count, v);
1054 void Uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) override
1056 glUniform4f(location, x, y, z, w);
1059 void Uniform4fv(GLint location, GLsizei count, const GLfloat* v) override
1061 glUniform4fv(location, count, v);
1064 void Uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) override
1066 glUniform4i(location, x, y, z, w);
1069 void Uniform4iv(GLint location, GLsizei count, const GLint* v) override
1071 glUniform4iv(location, count, v);
1074 void UniformMatrix2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1076 glUniformMatrix2fv(location, count, transpose, value);
1079 void UniformMatrix3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1081 glUniformMatrix3fv(location, count, transpose, value);
1084 void UniformMatrix4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1086 glUniformMatrix4fv(location, count, transpose, value);
1089 void UseProgram(GLuint program) override
1091 glUseProgram(program);
1094 void ValidateProgram(GLuint program) override
1096 glValidateProgram(program);
1099 void VertexAttrib1f(GLuint indx, GLfloat x) override
1101 glVertexAttrib1f(indx, x);
1104 void VertexAttrib1fv(GLuint indx, const GLfloat* values) override
1106 glVertexAttrib1fv(indx, values);
1109 void VertexAttrib2f(GLuint indx, GLfloat x, GLfloat y) override
1111 glVertexAttrib2f(indx, x, y);
1114 void VertexAttrib2fv(GLuint indx, const GLfloat* values) override
1116 glVertexAttrib2fv(indx, values);
1119 void VertexAttrib3f(GLuint indx, GLfloat x, GLfloat y, GLfloat z) override
1121 glVertexAttrib3f(indx, x, y, z);
1124 void VertexAttrib3fv(GLuint indx, const GLfloat* values) override
1126 glVertexAttrib3fv(indx, values);
1129 void VertexAttrib4f(GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) override
1131 glVertexAttrib4f(indx, x, y, z, w);
1134 void VertexAttrib4fv(GLuint indx, const GLfloat* values) override
1136 glVertexAttrib4fv(indx, values);
1139 void VertexAttribPointer(GLuint indx, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void* ptr) override
1141 glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
1144 void Viewport(GLint x, GLint y, GLsizei width, GLsizei height) override
1146 glViewport(x, y, width, height);
1151 void ReadBuffer(GLenum mode) override
1153 mImpl->ReadBuffer(mode);
1156 void DrawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices) override
1158 mImpl->DrawRangeElements(mode, start, end, count, type, indices);
1161 void TexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels) override
1163 mImpl->TexImage3D(target, level, internalformat, width, height, depth, border, format, type, pixels);
1166 void TexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels) override
1168 mImpl->TexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
1171 void CopyTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height) override
1173 mImpl->CopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height);
1176 void CompressedTexImage3D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data) override
1178 mImpl->CompressedTexImage3D(target, level, internalformat, width, height, depth, border, imageSize, data);
1181 void CompressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data) override
1183 mImpl->CompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
1186 void GenQueries(GLsizei n, GLuint* ids) override
1188 mImpl->GenQueries(n, ids);
1191 void DeleteQueries(GLsizei n, const GLuint* ids) override
1193 mImpl->DeleteQueries(n, ids);
1196 GLboolean IsQuery(GLuint id) override
1198 return mImpl->IsQuery(id);
1201 void BeginQuery(GLenum target, GLuint id) override
1203 mImpl->BeginQuery(target, id);
1206 void EndQuery(GLenum target) override
1208 mImpl->EndQuery(target);
1211 void GetQueryiv(GLenum target, GLenum pname, GLint* params) override
1213 mImpl->GetQueryiv(target, pname, params);
1216 void GetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) override
1218 mImpl->GetQueryObjectuiv(id, pname, params);
1221 GLboolean UnmapBuffer(GLenum target) override
1223 return mImpl->UnmapBuffer(target);
1226 void GetBufferPointerv(GLenum target, GLenum pname, GLvoid** params) override
1228 mImpl->GetBufferPointerv(target, pname, params);
1231 void DrawBuffers(GLsizei n, const GLenum* bufs) override
1233 mImpl->DrawBuffers(n, bufs);
1236 void UniformMatrix2x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1238 mImpl->UniformMatrix2x3fv(location, count, transpose, value);
1241 void UniformMatrix3x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1243 mImpl->UniformMatrix3x2fv(location, count, transpose, value);
1246 void UniformMatrix2x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1248 mImpl->UniformMatrix2x4fv(location, count, transpose, value);
1251 void UniformMatrix4x2fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1253 mImpl->UniformMatrix4x2fv(location, count, transpose, value);
1256 void UniformMatrix3x4fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1258 mImpl->UniformMatrix3x4fv(location, count, transpose, value);
1261 void UniformMatrix4x3fv(GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) override
1263 mImpl->UniformMatrix4x3fv(location, count, transpose, value);
1266 void BlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) override
1268 mImpl->BlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
1271 void RenderbufferStorageMultisample(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height) override
1273 mImpl->RenderbufferStorageMultisample(target, samples, internalformat, width, height);
1276 void FramebufferTexture2DMultisample(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples) override
1278 mImpl->FramebufferTexture2DMultisample(target, attachment, textarget, texture, level, samples);
1281 void FramebufferTextureLayer(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer) override
1283 mImpl->FramebufferTextureLayer(target, attachment, texture, level, layer);
1286 GLvoid* MapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) override
1288 return mImpl->MapBufferRange(target, offset, length, access);
1291 void FlushMappedBufferRange(GLenum target, GLintptr offset, GLsizeiptr length) override
1293 mImpl->FlushMappedBufferRange(target, offset, length);
1296 void BindVertexArray(GLuint array) override
1298 mImpl->BindVertexArray(array);
1301 void DeleteVertexArrays(GLsizei n, const GLuint* arrays) override
1303 mImpl->DeleteVertexArrays(n, arrays);
1306 void GenVertexArrays(GLsizei n, GLuint* arrays) override
1308 mImpl->GenVertexArrays(n, arrays);
1311 GLboolean IsVertexArray(GLuint array) override
1313 return mImpl->IsVertexArray(array);
1316 void GetIntegeri_v(GLenum target, GLuint index, GLint* data) override
1318 mImpl->GetIntegeri_v(target, index, data);
1321 void BeginTransformFeedback(GLenum primitiveMode) override
1323 mImpl->BeginTransformFeedback(primitiveMode);
1326 void EndTransformFeedback(void) override
1328 mImpl->EndTransformFeedback();
1331 void BindBufferRange(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size) override
1333 mImpl->BindBufferRange(target, index, buffer, offset, size);
1336 void BindBufferBase(GLenum target, GLuint index, GLuint buffer) override
1338 mImpl->BindBufferBase(target, index, buffer);
1341 void TransformFeedbackVaryings(GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode) override
1343 mImpl->TransformFeedbackVaryings(program, count, varyings, bufferMode);
1346 void GetTransformFeedbackVarying(GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name) override
1348 mImpl->GetTransformFeedbackVarying(program, index, bufSize, length, size, type, name);
1351 void VertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) override
1353 mImpl->VertexAttribIPointer(index, size, type, stride, pointer);
1356 void GetVertexAttribIiv(GLuint index, GLenum pname, GLint* params) override
1358 mImpl->GetVertexAttribIiv(index, pname, params);
1361 void GetVertexAttribIuiv(GLuint index, GLenum pname, GLuint* params) override
1363 mImpl->GetVertexAttribIuiv(index, pname, params);
1366 void VertexAttribI4i(GLuint index, GLint x, GLint y, GLint z, GLint w) override
1368 mImpl->VertexAttribI4i(index, x, y, z, w);
1371 void VertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) override
1373 mImpl->VertexAttribI4ui(index, x, y, z, w);
1376 void VertexAttribI4iv(GLuint index, const GLint* v) override
1378 mImpl->VertexAttribI4iv(index, v);
1381 void VertexAttribI4uiv(GLuint index, const GLuint* v) override
1383 mImpl->VertexAttribI4uiv(index, v);
1386 void GetUniformuiv(GLuint program, GLint location, GLuint* params) override
1388 mImpl->GetUniformuiv(program, location, params);
1391 GLint GetFragDataLocation(GLuint program, const GLchar* name) override
1393 return mImpl->GetFragDataLocation(program, name);
1396 void Uniform1ui(GLint location, GLuint v0) override
1398 mImpl->Uniform1ui(location, v0);
1401 void Uniform2ui(GLint location, GLuint v0, GLuint v1) override
1403 mImpl->Uniform2ui(location, v0, v1);
1406 void Uniform3ui(GLint location, GLuint v0, GLuint v1, GLuint v2) override
1408 mImpl->Uniform3ui(location, v0, v1, v2);
1411 void Uniform4ui(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3) override
1413 mImpl->Uniform4ui(location, v0, v1, v2, v3);
1416 void Uniform1uiv(GLint location, GLsizei count, const GLuint* value) override
1418 mImpl->Uniform1uiv(location, count, value);
1421 void Uniform2uiv(GLint location, GLsizei count, const GLuint* value) override
1423 mImpl->Uniform2uiv(location, count, value);
1426 void Uniform3uiv(GLint location, GLsizei count, const GLuint* value) override
1428 mImpl->Uniform3uiv(location, count, value);
1431 void Uniform4uiv(GLint location, GLsizei count, const GLuint* value) override
1433 mImpl->Uniform4uiv(location, count, value);
1436 void ClearBufferiv(GLenum buffer, GLint drawbuffer, const GLint* value) override
1438 mImpl->ClearBufferiv(buffer, drawbuffer, value);
1441 void ClearBufferuiv(GLenum buffer, GLint drawbuffer, const GLuint* value) override
1443 mImpl->ClearBufferuiv(buffer, drawbuffer, value);
1446 void ClearBufferfv(GLenum buffer, GLint drawbuffer, const GLfloat* value) override
1448 mImpl->ClearBufferfv(buffer, drawbuffer, value);
1451 void ClearBufferfi(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil) override
1453 mImpl->ClearBufferfi(buffer, drawbuffer, depth, stencil);
1456 const GLubyte* GetStringi(GLenum name, GLuint index) override
1458 return mImpl->GetStringi(name, index);
1461 void CopyBufferSubData(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size) override
1463 mImpl->CopyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size);
1466 void GetUniformIndices(GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices) override
1468 mImpl->GetUniformIndices(program, uniformCount, uniformNames, uniformIndices);
1471 void GetActiveUniformsiv(GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params) override
1473 mImpl->GetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params);
1476 GLuint GetUniformBlockIndex(GLuint program, const GLchar* uniformBlockName) override
1478 return mImpl->GetUniformBlockIndex(program, uniformBlockName);
1481 void GetActiveUniformBlockiv(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params) override
1483 mImpl->GetActiveUniformBlockiv(program, uniformBlockIndex, pname, params);
1486 void GetActiveUniformBlockName(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName) override
1488 mImpl->GetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName);
1491 void UniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding) override
1493 mImpl->UniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding);
1496 void DrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount) override
1498 mImpl->DrawArraysInstanced(mode, first, count, instanceCount);
1501 void DrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount) override
1503 mImpl->DrawElementsInstanced(mode, count, type, indices, instanceCount);
1506 GLsync FenceSync(GLenum condition, GLbitfield flags) override
1508 return mImpl->FenceSync(condition, flags);
1511 GLboolean IsSync(GLsync sync) override
1513 return mImpl->IsSync(sync);
1516 void DeleteSync(GLsync sync) override
1518 mImpl->DeleteSync(sync);
1521 GLenum ClientWaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
1523 return mImpl->ClientWaitSync(sync, flags, timeout);
1526 void WaitSync(GLsync sync, GLbitfield flags, GLuint64 timeout) override
1528 mImpl->WaitSync(sync, flags, timeout);
1531 void GetInteger64v(GLenum pname, GLint64* params) override
1533 mImpl->GetInteger64v(pname, params);
1536 void GetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) override
1538 mImpl->GetSynciv(sync, pname, bufSize, length, values);
1541 void GetInteger64i_v(GLenum target, GLuint index, GLint64* data) override
1543 mImpl->GetInteger64i_v(target, index, data);
1546 void GetBufferParameteri64v(GLenum target, GLenum pname, GLint64* params) override
1548 mImpl->GetBufferParameteri64v(target, pname, params);
1551 void GenSamplers(GLsizei count, GLuint* samplers) override
1553 mImpl->GenSamplers(count, samplers);
1556 void DeleteSamplers(GLsizei count, const GLuint* samplers) override
1558 mImpl->DeleteSamplers(count, samplers);
1561 GLboolean IsSampler(GLuint sampler) override
1563 return mImpl->IsSampler(sampler);
1566 void BindSampler(GLuint unit, GLuint sampler) override
1568 mImpl->BindSampler(unit, sampler);
1571 void SamplerParameteri(GLuint sampler, GLenum pname, GLint param) override
1573 mImpl->SamplerParameteri(sampler, pname, param);
1576 void SamplerParameteriv(GLuint sampler, GLenum pname, const GLint* param) override
1578 mImpl->SamplerParameteriv(sampler, pname, param);
1581 void SamplerParameterf(GLuint sampler, GLenum pname, GLfloat param) override
1583 mImpl->SamplerParameterf(sampler, pname, param);
1586 void SamplerParameterfv(GLuint sampler, GLenum pname, const GLfloat* param) override
1588 mImpl->SamplerParameterfv(sampler, pname, param);
1591 void GetSamplerParameteriv(GLuint sampler, GLenum pname, GLint* params) override
1593 mImpl->GetSamplerParameteriv(sampler, pname, params);
1596 void GetSamplerParameterfv(GLuint sampler, GLenum pname, GLfloat* params) override
1598 mImpl->GetSamplerParameterfv(sampler, pname, params);
1601 void VertexAttribDivisor(GLuint index, GLuint divisor) override
1603 mImpl->VertexAttribDivisor(index, divisor);
1606 void BindTransformFeedback(GLenum target, GLuint id) override
1608 mImpl->BindTransformFeedback(target, id);
1611 void DeleteTransformFeedbacks(GLsizei n, const GLuint* ids) override
1613 mImpl->DeleteTransformFeedbacks(n, ids);
1616 void GenTransformFeedbacks(GLsizei n, GLuint* ids) override
1618 mImpl->GenTransformFeedbacks(n, ids);
1621 GLboolean IsTransformFeedback(GLuint id) override
1623 return mImpl->IsTransformFeedback(id);
1626 void PauseTransformFeedback(void) override
1628 mImpl->PauseTransformFeedback();
1631 void ResumeTransformFeedback(void) override
1633 mImpl->ResumeTransformFeedback();
1636 void GetProgramBinary(GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary) override
1638 mImpl->GetProgramBinary(program, bufSize, length, binaryFormat, binary);
1641 void ProgramBinary(GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) override
1643 mImpl->ProgramBinary(program, binaryFormat, binary, length);
1646 void ProgramParameteri(GLuint program, GLenum pname, GLint value) override
1648 mImpl->ProgramParameteri(program, pname, value);
1651 void InvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) override
1653 mImpl->InvalidateFramebuffer(target, numAttachments, attachments);
1656 void InvalidateSubFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height) override
1658 mImpl->InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);
1661 void TexStorage2D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) override
1663 mImpl->TexStorage2D(target, levels, internalformat, width, height);
1666 void TexStorage3D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth) override
1668 mImpl->TexStorage3D(target, levels, internalformat, width, height, depth);
1671 void GetInternalformativ(GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params) override
1673 mImpl->GetInternalformativ(target, internalformat, pname, bufSize, params);
1676 void BlendBarrier(void)
1678 if(mGlExtensionSupportedCacheList.GetSupported(GlExtensionCache::GlExtensionCheckerType::BLEND_EQUATION_ADVANCED))
1680 mImpl->BlendBarrier();
1685 std::unique_ptr<GlesAbstraction> mImpl;
1687 GlExtensionCache::GlExtensionSupportedCacheList mGlExtensionSupportedCacheList;
1689 ConditionalWait mContextCreatedWaitCondition;
1690 GLint mMaxTextureSize;
1691 GLint mMaxTextureSamples;
1692 std::string mShaderVersionPrefix;
1693 std::string mVertexShaderPrefix;
1694 std::string mFragmentShaderPrefix;
1695 int32_t mGlesVersion;
1696 int32_t mShadingLanguageVersion;
1697 bool mShadingLanguageVersionCached;
1698 bool mIsSurfacelessContextSupported;
1699 bool mIsContextCreated;
1702 } // namespace Adaptor
1704 } // namespace Internal
1708 #endif // DALI_INTERNAL_GL_IMPLEMENTATION_H