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