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