• 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) \
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