1 /* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 #ifndef GLES_FUNCTIONS_H 16 #define GLES_FUNCTIONS_H 17 18 #if RENDER_HAS_GLES_BACKEND 19 20 #ifndef declare 21 // clang-format off 22 #include <GLES3/gl3.h> 23 #include <GLES3/gl31.h> 24 #include <GLES3/gl32.h> 25 #include <GLES2/gl2ext.h> 26 // clang-format on 27 #define declare(a, b) extern "C" { extern a b; } 28 #endif 29 30 #if defined(_WIN32) 31 // The following are gles 3.2 core, but need to be fetched with eglGetProcAddress on PowerVR and MALI simulators. 32 declare(PFNGLDRAWELEMENTSBASEVERTEXPROC, glDrawElementsBaseVertex); 33 declare(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC, glDrawElementsInstancedBaseVertex); 34 declare(PFNGLDEBUGMESSAGECALLBACKPROC, glDebugMessageCallback); 35 declare(PFNGLDEBUGMESSAGECONTROLPROC, glDebugMessageControl); 36 declare(PFNGLPUSHDEBUGGROUPPROC, glPushDebugGroup); 37 declare(PFNGLPOPDEBUGGROUPPROC, glPopDebugGroup); 38 declare(PFNGLCOLORMASKIPROC, glColorMaski); 39 declare(PFNGLENABLEIPROC, glEnablei); 40 declare(PFNGLDISABLEIPROC, glDisablei); 41 declare(PFNGLBLENDFUNCSEPARATEIPROC, glBlendFuncSeparatei); 42 declare(PFNGLBLENDEQUATIONSEPARATEIPROC, glBlendEquationSeparatei); 43 declare(PFNGLREADNPIXELSPROC, glReadnPixels) 44 #endif 45 46 declare(PFNGLBUFFERSTORAGEEXTPROC, glBufferStorageEXT); 47 48 declare(PFNGLEGLIMAGETARGETTEXTURE2DOESPROC, glEGLImageTargetTexture2DOES); 49 50 #ifndef GL_EXT_multisampled_render_to_texture 51 #define GL_EXT_multisampled_render_to_texture 52 const unsigned int GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT = 0x8D6C; 53 const unsigned int GL_RENDERBUFFER_SAMPLES_EXT = 0x8CAB; 54 const unsigned int GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT = 0x8D56; 55 const unsigned int GL_MAX_SAMPLES_EXT 0x8D57; 56 using PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC = void(GL_APIENTRYP)( 57 GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); 58 using PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC = void(GL_APIENTRYP)( 59 GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); 60 #endif /* GL_EXT_multisampled_render_to_texture */ 61 62 declare(PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC, glRenderbufferStorageMultisampleEXT); 63 declare(PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC, glFramebufferTexture2DMultisampleEXT); 64 65 declare(PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC, glFramebufferTextureMultiviewOVR); 66 67 declare(PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC, glFramebufferTextureMultisampleMultiviewOVR); 68 69 declare(PFNGLGETQUERYOBJECTUI64VEXTPROC, glGetQueryObjectui64vEXT); 70 #elif RENDER_HAS_GL_BACKEND 71 72 #ifndef declare 73 #include <gl/glcorearb.h> 74 #include <gl/glext.h> 75 #define declare(a, b) extern "C" { extern a b; } 76 #endif 77 78 declare(PFNGLDRAWBUFFERSPROC, glDrawBuffers); 79 declare(PFNGLPUSHDEBUGGROUPPROC, glPushDebugGroup); 80 declare(PFNGLPOPDEBUGGROUPPROC, glPopDebugGroup); 81 declare(PFNGLACTIVETEXTUREPROC, glActiveTexture); 82 declare(PFNGLATTACHSHADERPROC, glAttachShader); 83 declare(PFNGLDETACHSHADERPROC, glDetachShader); 84 declare(PFNGLBINDBUFFERPROC, glBindBuffer); 85 declare(PFNGLBINDBUFFERRANGEPROC, glBindBufferRange); 86 declare(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer); 87 declare(PFNGLBINDIMAGETEXTUREPROC, glBindImageTexture); 88 declare(PFNGLBINDSAMPLERPROC, glBindSampler); 89 declare(PFNGLBINDTEXTUREPROC, glBindTexture); 90 declare(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray); 91 declare(PFNGLBINDVERTEXBUFFERPROC, glBindVertexBuffer); 92 declare(PFNGLVERTEXBINDINGDIVISORPROC, glVertexBindingDivisor); 93 declare(PFNGLBLENDCOLORPROC, glBlendColor); 94 declare(PFNGLBLENDEQUATIONSEPARATEPROC, glBlendEquationSeparate); 95 declare(PFNGLBLENDEQUATIONSEPARATEIPROC, glBlendEquationSeparatei); 96 declare(PFNGLBLENDFUNCSEPARATEPROC, glBlendFuncSeparate); 97 declare(PFNGLBLENDFUNCSEPARATEIPROC, glBlendFuncSeparatei); 98 declare(PFNGLBLITFRAMEBUFFERPROC, glBlitFramebuffer); 99 declare(PFNGLBUFFERDATAPROC, glBufferData); 100 declare(PFNGLCHECKFRAMEBUFFERSTATUSPROC, glCheckFramebufferStatus); 101 declare(PFNGLCLEARBUFFERFIPROC, glClearBufferfi); 102 declare(PFNGLCLEARBUFFERFVPROC, glClearBufferfv); 103 declare(PFNGLCLEARBUFFERIVPROC, glClearBufferiv); 104 declare(PFNGLCLEARTEXIMAGEPROC, glClearTexImage); 105 declare(PFNGLCOLORMASKPROC, glColorMask); 106 declare(PFNGLCOLORMASKIPROC, glColorMaski); 107 declare(PFNGLCOMPILESHADERPROC, glCompileShader); 108 declare(PFNGLREADPIXELSPROC, glReadPixels); 109 declare(PFNGLREADNPIXELSPROC, glReadnPixels); 110 declare(PFNGLCOPYBUFFERSUBDATAPROC, glCopyBufferSubData); 111 declare(PFNGLCREATEPROGRAMPROC, glCreateProgram); 112 declare(PFNGLCREATESHADERPROC, glCreateShader); 113 declare(PFNGLPROGRAMUNIFORM1IPROC, glProgramUniform1i); 114 declare(PFNGLPROGRAMUNIFORM1IVPROC, glProgramUniform1iv); 115 declare(PFNGLPROGRAMUNIFORM1UIVPROC, glProgramUniform1uiv); 116 declare(PFNGLPROGRAMUNIFORM4UIVPROC, glProgramUniform4uiv); 117 declare(PFNGLPROGRAMUNIFORM1FVPROC, glProgramUniform1fv); 118 declare(PFNGLPROGRAMUNIFORM2FVPROC, glProgramUniform2fv); 119 declare(PFNGLPROGRAMUNIFORM4FVPROC, glProgramUniform4fv); 120 declare(PFNGLPROGRAMUNIFORMMATRIX4FVPROC, glProgramUniformMatrix4fv); 121 declare(PFNGLPROGRAMBINARYPROC, glProgramBinary); 122 declare(PFNGLCULLFACEPROC, glCullFace); 123 declare(PFNGLDEBUGMESSAGECALLBACKPROC, glDebugMessageCallback); 124 declare(PFNGLDEBUGMESSAGECONTROLPROC, glDebugMessageControl); 125 declare(PFNGLDELETEBUFFERSPROC, glDeleteBuffers); 126 declare(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers); 127 declare(PFNGLDELETEPROGRAMPROC, glDeleteProgram); 128 declare(PFNGLDELETESAMPLERSPROC, glDeleteSamplers); 129 declare(PFNGLDELETESHADERPROC, glDeleteShader); 130 declare(PFNGLDELETETEXTURESPROC, glDeleteTextures); 131 declare(PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays); 132 declare(PFNGLDEPTHFUNCPROC, glDepthFunc); 133 declare(PFNGLDEPTHMASKPROC, glDepthMask); 134 declare(PFNGLDEPTHRANGEFPROC, glDepthRangef); 135 declare(PFNGLDISABLEPROC, glDisable); 136 declare(PFNGLDISABLEIPROC, glDisablei); 137 declare(PFNGLDISPATCHCOMPUTEPROC, glDispatchCompute); 138 declare(PFNGLDISPATCHCOMPUTEINDIRECTPROC, glDispatchComputeIndirect); 139 declare(PFNGLDRAWARRAYSINSTANCEDPROC, glDrawArraysInstanced); 140 declare(PFNGLDRAWARRAYSINDIRECTPROC, glDrawArraysIndirect); 141 declare(PFNGLDRAWARRAYSPROC, glDrawArrays); 142 declare(PFNGLDRAWELEMENTSBASEVERTEXPROC, glDrawElementsBaseVertex); 143 declare(PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC, glDrawElementsInstancedBaseVertex); 144 declare(PFNGLDRAWELEMENTSINSTANCEDPROC, glDrawElementsInstanced); 145 declare(PFNGLDRAWELEMENTSINDIRECTPROC, glDrawElementsIndirect); 146 declare(PFNGLDRAWELEMENTSPROC, glDrawElements); 147 declare(PFNGLENABLEPROC, glEnable); 148 declare(PFNGLENABLEIPROC, glEnablei); 149 declare(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray); 150 declare(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray); 151 declare(PFNGLFRAMEBUFFERTEXTURELAYERPROC, glFramebufferTextureLayer); 152 declare(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D); 153 declare(PFNGLFRONTFACEPROC, glFrontFace); 154 declare(PFNGLGENBUFFERSPROC, glGenBuffers); 155 declare(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers); 156 declare(PFNGLGENSAMPLERSPROC, glGenSamplers); 157 declare(PFNGLGENTEXTURESPROC, glGenTextures); 158 declare(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays); 159 declare(PFNGLGETSTRINGPROC, glGetString); 160 declare(PFNGLGETSTRINGIPROC, glGetStringi); 161 declare(PFNGLGETFLOATVPROC, glGetFloatv); 162 declare(PFNGLGETFLOATI_VPROC, glGetFloati_v); 163 declare(PFNGLGETINTEGERVPROC, glGetIntegerv); 164 declare(PFNGLGETINTEGER64VPROC, glGetInteger64v); 165 declare(PFNGLGETINTEGERI_VPROC, glGetIntegeri_v); 166 declare(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog); 167 declare(PFNGLGETPROGRAMIVPROC, glGetProgramiv); 168 declare(PFNGLGETPROGRAMBINARYPROC, glGetProgramBinary); 169 declare(PFNGLGETACTIVEUNIFORMBLOCKIVPROC, glGetActiveUniformBlockiv); 170 declare(PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC, glGetActiveUniformBlockName); 171 declare(PFNGLUNIFORMBLOCKBINDINGPROC, glUniformBlockBinding); 172 declare(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog); 173 declare(PFNGLGETSHADERIVPROC, glGetShaderiv); 174 declare(PFNGLGETUNIFORMIVPROC, glGetUniformiv); 175 declare(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation); 176 declare(PFNGLGETACTIVEUNIFORMPROC, glGetActiveUniform); 177 declare(PFNGLGETPROGRAMINTERFACEIVPROC, glGetProgramInterfaceiv); 178 declare(PFNGLGETPROGRAMRESOURCENAMEPROC, glGetProgramResourceName); 179 declare(PFNGLGETPROGRAMRESOURCEINDEXPROC, glGetProgramResourceIndex); 180 declare(PFNGLGETPROGRAMRESOURCEIVPROC, glGetProgramResourceiv); 181 declare(PFNGLLINEWIDTHPROC, glLineWidth); 182 declare(PFNGLLINKPROGRAMPROC, glLinkProgram); 183 declare(PFNGLMAPBUFFERRANGEPROC, glMapBufferRange); 184 declare(PFNGLMEMORYBARRIERPROC, glMemoryBarrier); 185 declare(PFNGLMEMORYBARRIERBYREGIONPROC, glMemoryBarrierByRegion); 186 declare(PFNGLPIXELSTOREIPROC, glPixelStorei); 187 declare(PFNGLPOLYGONMODEPROC, glPolygonMode); 188 declare(PFNGLPOLYGONOFFSETPROC, glPolygonOffset); 189 declare(PFNGLSAMPLERPARAMETERFPROC, glSamplerParameterf); 190 declare(PFNGLSAMPLERPARAMETERFVPROC, glSamplerParameterfv); 191 declare(PFNGLSAMPLERPARAMETERIPROC, glSamplerParameteri); 192 declare(PFNGLSCISSORPROC, glScissor); 193 declare(PFNGLSHADERSOURCEPROC, glShaderSource); 194 declare(PFNGLSTENCILFUNCSEPARATEPROC, glStencilFuncSeparate); 195 declare(PFNGLSTENCILMASKSEPARATEPROC, glStencilMaskSeparate); 196 declare(PFNGLSTENCILOPSEPARATEPROC, glStencilOpSeparate); 197 declare(PFNGLTEXPARAMETERIPROC, glTexParameteri); 198 declare(PFNGLTEXSTORAGE2DPROC, glTexStorage2D); 199 declare(PFNGLTEXSTORAGE3DPROC, glTexStorage3D); 200 declare(PFNGLTEXSUBIMAGE2DPROC, glTexSubImage2D); 201 declare(PFNGLTEXSUBIMAGE3DPROC, glTexSubImage3D); 202 declare(PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC, glCompressedTexSubImage2D); 203 declare(PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC, glCompressedTexSubImage3D); 204 declare(PFNGLUNMAPBUFFERPROC, glUnmapBuffer); 205 declare(PFNGLUSEPROGRAMPROC, glUseProgram); 206 declare(PFNGLVERTEXATTRIBBINDINGPROC, glVertexAttribBinding); 207 declare(PFNGLVERTEXATTRIBFORMATPROC, glVertexAttribFormat); 208 declare(PFNGLVERTEXATTRIBIFORMATPROC, glVertexAttribIFormat); 209 declare(PFNGLVIEWPORTPROC, glViewport); 210 declare(PFNGLCLIENTWAITSYNCPROC, glClientWaitSync); 211 declare(PFNGLDELETESYNCPROC, glDeleteSync); 212 declare(PFNGLFENCESYNCPROC, glFenceSync); 213 declare(PFNGLBUFFERSTORAGEPROC, glBufferStorage); 214 declare(PFNGLCOPYIMAGESUBDATAPROC, glCopyImageSubData); 215 216 declare(PFNGLTEXSTORAGE2DMULTISAMPLEPROC, glTexStorage2DMultisample); 217 declare(PFNGLTEXSTORAGE3DMULTISAMPLEPROC, glTexStorage3DMultisample); 218 219 declare(PFNGLGENQUERIESPROC, glGenQueries); 220 declare(PFNGLDELETEQUERIESPROC, glDeleteQueries); 221 declare(PFNGLBEGINQUERYPROC, glBeginQuery); 222 declare(PFNGLENDQUERYPROC, glEndQuery); 223 declare(PFNGLGETQUERYOBJECTUIVPROC, glGetQueryObjectuiv); 224 declare(PFNGLGETQUERYOBJECTUI64VPROC, glGetQueryObjectui64v); 225 226 declare(PFNGLINVALIDATEFRAMEBUFFERPROC, glInvalidateFramebuffer); 227 declare(PFNGLINVALIDATESUBFRAMEBUFFERPROC, glInvalidateSubFramebuffer); 228 declare(PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC, glGetFramebufferAttachmentParameteriv); 229 230 declare(PFNGLFINISHPROC, glFinish); 231 declare(PFNGLFLUSHPROC, glFlush); 232 233 declare(PFNGLGENPROGRAMPIPELINESPROC, glGenProgramPipelines); 234 declare(PFNGLBINDPROGRAMPIPELINEPROC, glBindProgramPipeline); 235 declare(PFNGLUSEPROGRAMSTAGESPROC, glUseProgramStages); 236 declare(PFNGLDELETEPROGRAMPIPELINESPROC, glDeleteProgramPipelines); 237 declare(PFNGLPROGRAMPARAMETERIPROC, glProgramParameteri); 238 declare(PFNGLCREATESHADERPROGRAMVPROC, glCreateShaderProgramv); 239 240 declare(PFNGLGETBUFFERPARAMETERIVPROC, glGetBufferParameteriv); 241 declare(PFNGLGETBUFFERPARAMETERI64VPROC, glGetBufferParameteri64v); 242 declare(PFNGLGETBUFFERPOINTERVPROC, glGetBufferPointerv); 243 244 declare(PFNGLOBJECTLABELPROC, glObjectLabel); 245 246 // Define the EXT versions, to match GLES. 247 #define glBufferStorageEXT glBufferStorage 248 #define GL_MAP_PERSISTENT_BIT_EXT GL_MAP_PERSISTENT_BIT 249 #define GL_MAP_COHERENT_BIT_EXT GL_MAP_COHERENT_BIT 250 #define GL_DYNAMIC_STORAGE_BIT_EXT GL_DYNAMIC_STORAGE_BIT 251 #define GL_CLIENT_STORAGE_BIT_EXT GL_CLIENT_STORAGE_BIT 252 253 #ifndef GL_EXT_timer_query 254 // GL_GPU_DISJOINT_EXT does not exist and is ignored. 255 #define GL_TIME_ELAPSED_EXT GL_TIME_ELAPSED 256 #endif 257 258 declare(PFNGLFRAMEBUFFERRENDERBUFFERPROC, glFramebufferRenderbuffer); 259 declare(PFNGLGENRENDERBUFFERSPROC, glGenRenderbuffers); 260 declare(PFNGLBINDRENDERBUFFERPROC, glBindRenderbuffer); 261 declare(PFNGLRENDERBUFFERSTORAGEPROC, glRenderbufferStorage); 262 declare(PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC, glRenderbufferStorageMultisample); 263 declare(PFNGLDELETERENDERBUFFERSPROC, glDeleteRenderbuffers); 264 265 declare(PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC, glFramebufferTextureMultiviewOVR); 266 #else 267 #pragma(error, "Neither GL or GLES is enabled in GLFunctions.h") 268 #endif 269 #undef declare 270 #endif /* GLES_FUNCTIONS_H */ 271