• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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