1 /* 2 * Copyright 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef _GL2_DECODER_H_ 18 #define _GL2_DECODER_H_ 19 20 #include "gles2_dec.h" 21 #include "GLDecoderContextData.h" 22 #include "aemu/base/SharedLibrary.h" 23 24 #include "GLSnapshot.h" 25 26 namespace gfxstream { 27 namespace gl { 28 29 typedef void (gles2_APIENTRY *glVertexAttribPointerWithDataSize_server_proc_t) (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid*, GLsizei); 30 typedef void (gles2_APIENTRY *glVertexAttribIPointerWithDataSize_server_proc_t) (GLuint, GLint, GLenum, GLsizei, const GLvoid*, GLsizei); 31 32 struct gles2_decoder_extended_context : gles2_decoder_context_t { 33 glVertexAttribPointerWithDataSize_server_proc_t glVertexAttribPointerWithDataSize; 34 glVertexAttribIPointerWithDataSize_server_proc_t glVertexAttribIPointerWithDataSize; 35 36 int initDispatch( void *(*getProc)(const char *name, void *userData), void *userData); 37 38 private: 39 using gles2_server_context_t::initDispatchByName; 40 }; 41 42 class GLESv2Decoder : public gles2_decoder_extended_context 43 { 44 public: 45 typedef void *(*get_proc_func_t)(const char *name, void *userData); 46 GLESv2Decoder(); 47 ~GLESv2Decoder(); 48 int initGL(get_proc_func_t getProcFunc, void *getProcFuncData); setContextData(GLDecoderContextData * contextData)49 void setContextData(GLDecoderContextData *contextData) { m_contextData = contextData; } 50 protected: 51 snapshot::GLSnapshotState* m_snapshot; 52 53 private: 54 GLDecoderContextData *m_contextData; 55 android::base::SharedLibrary* m_GL2library; 56 57 static void *s_getProc(const char *name, void *userData); 58 static void gles2_APIENTRY s_glGetCompressedTextureFormats(void *self, int count, GLint *formats); 59 static void gles2_APIENTRY s_glVertexAttribPointerData(void *self, GLuint indx, GLint size, GLenum type, 60 GLboolean normalized, GLsizei stride, void * data, GLuint datalen); 61 static void gles2_APIENTRY s_glVertexAttribPointerOffset(void *self, GLuint indx, GLint size, GLenum type, 62 GLboolean normalized, GLsizei stride, GLuint offset); 63 64 static void gles2_APIENTRY s_glDrawElementsOffset(void *self, GLenum mode, GLsizei count, GLenum type, GLuint offset); 65 static void gles2_APIENTRY s_glDrawElementsData(void *self, GLenum mode, GLsizei count, GLenum type, void * data, GLuint datalen); 66 static void gles2_APIENTRY s_glDrawElementsOffsetNullAEMU(void *self, GLenum mode, GLsizei count, GLenum type, GLuint offset); 67 static void gles2_APIENTRY s_glDrawElementsDataNullAEMU(void *self, GLenum mode, GLsizei count, GLenum type, void * data, GLuint datalen); 68 static int gles2_APIENTRY s_glFinishRoundTrip(void *self); 69 70 static void gles2_APIENTRY s_glMapBufferRangeAEMU(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* mapped); 71 static void gles2_APIENTRY s_glUnmapBufferAEMU(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer, GLboolean* out_res); 72 static void gles2_APIENTRY s_glFlushMappedBufferRangeAEMU(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, void* guest_buffer); 73 74 static void gles2_APIENTRY s_glMapBufferRangeDMA(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr); 75 static void gles2_APIENTRY s_glUnmapBufferDMA(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr, GLboolean* out_res); 76 77 static uint64_t gles2_APIENTRY s_glMapBufferRangeDirect(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr); 78 static void gles2_APIENTRY s_glUnmapBufferDirect(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access, uint64_t paddr, uint64_t guest_ptr, GLboolean* out_res); 79 static void gles2_APIENTRY s_glFlushMappedBufferRangeDirect(void* self, GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); 80 81 static void gles2_APIENTRY s_glCompressedTexImage2DOffsetAEMU(void* self, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, GLuint offset); 82 static void gles2_APIENTRY s_glCompressedTexSubImage2DOffsetAEMU(void* self, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, GLuint offset); 83 static void gles2_APIENTRY s_glTexImage2DOffsetAEMU(void* self, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLuint offset); 84 static void gles2_APIENTRY s_glTexSubImage2DOffsetAEMU(void* self, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset); 85 86 static void gles2_APIENTRY s_glVertexAttribIPointerDataAEMU(void *self, GLuint indx, GLint size, GLenum type, GLsizei stride, void * data, GLuint datalen); 87 static void gles2_APIENTRY s_glVertexAttribIPointerOffsetAEMU(void *self, GLuint indx, GLint size, GLenum type, GLsizei stride, GLuint offset); 88 89 static void gles2_APIENTRY s_glTexImage3DOffsetAEMU(void* self, GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLuint offset); 90 static void gles2_APIENTRY s_glTexSubImage3DOffsetAEMU(void* self, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLuint offset); 91 static void gles2_APIENTRY s_glCompressedTexImage3DOffsetAEMU(void* self, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, GLuint offset); 92 static void gles2_APIENTRY s_glCompressedTexSubImage3DOffsetAEMU(void* self, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, GLuint offset); 93 static void gles2_APIENTRY s_glDrawElementsInstancedOffsetAEMU(void* self, GLenum mode, GLsizei count, GLenum type, GLuint offset, GLsizei primcount); 94 static void gles2_APIENTRY s_glDrawElementsInstancedDataAEMU(void* self, GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount, GLsizei datalen); 95 96 static void gles2_APIENTRY s_glReadPixelsOffsetAEMU(void* self, GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLuint offset); 97 98 static GLuint gles2_APIENTRY s_glCreateShaderProgramvAEMU(void* self, GLenum type, GLsizei count, const char* packedStrings, GLuint packedLen); 99 100 static void gles2_APIENTRY s_glDrawArraysIndirectDataAEMU(void* self, GLenum mode, const void* indirect, GLuint datalen); 101 static void gles2_APIENTRY s_glDrawArraysIndirectOffsetAEMU(void* self, GLenum mode, GLuint offset); 102 103 static void gles2_APIENTRY s_glDrawElementsIndirectDataAEMU(void* self, GLenum mode, GLenum type, const void* indirect, GLuint datalen); 104 static void gles2_APIENTRY s_glDrawElementsIndirectOffsetAEMU(void* self, GLenum mode, GLenum type, GLuint offset); 105 106 static uint64_t gles2_APIENTRY s_glFenceSyncAEMU(void* self, GLenum condition, GLbitfield flags); 107 static GLenum gles2_APIENTRY s_glClientWaitSyncAEMU(void* self, uint64_t wait_on, GLbitfield flags, GLuint64 timeout); 108 static void gles2_APIENTRY s_glWaitSyncAEMU(void* self, uint64_t wait_on, GLbitfield flags, GLuint64 timeout); 109 static void gles2_APIENTRY s_glDeleteSyncAEMU(void* self, uint64_t to_delete); 110 static GLboolean gles2_APIENTRY s_glIsSyncAEMU(void* self, uint64_t sync); 111 static void gles2_APIENTRY s_glGetSyncivAEMU(void* self, uint64_t sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); 112 113 static GLboolean gles2_APIENTRY s_glBufferDataSyncAEMU(void* self, GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage); 114 115 //============================================================ 116 // Snapshot state 117 //============================================================ 118 119 // All generations============================================ 120 121 static GLuint gles2_APIENTRY s_glCreateShader(void* self, GLenum shaderType); 122 static GLuint gles2_APIENTRY s_glCreateProgram(void* self); 123 124 static void gles2_APIENTRY s_glGenBuffers(void* self, GLsizei n, GLuint* buffers); 125 126 static void gles2_APIENTRY s_glGenFramebuffers(void* self, GLsizei n, GLuint* framebuffers); 127 static void gles2_APIENTRY s_glGenRenderbuffers(void* self, GLsizei n, GLuint* renderbuffers); 128 static void gles2_APIENTRY s_glGenTextures(void* self, GLsizei n, GLuint* textures); 129 130 static void gles2_APIENTRY s_glGenVertexArraysOES(void* self, GLsizei n, GLuint* arrays); 131 static void gles2_APIENTRY s_glGenVertexArrays(void* self, GLsizei n, GLuint* arrays); 132 133 static void gles2_APIENTRY s_glGenTransformFeedbacks(void* self, GLsizei n, GLuint* transformFeedbacks); 134 135 static void gles2_APIENTRY s_glGenSamplers(void* self, GLsizei n, GLuint* samplers); 136 137 static void gles2_APIENTRY s_glGenQueries(void* self, GLsizei n, GLuint* queries); 138 139 static GLuint gles2_APIENTRY s_glCreateShaderProgramv(void* self, GLenum type, GLsizei count, const char** strings); 140 141 static void gles2_APIENTRY s_glGenProgramPipelines(void* self, GLsizei n, GLuint* pipelines); 142 143 // All deletes================================================ 144 static void gles2_APIENTRY s_glDeleteShader(void* self, GLuint shader); 145 static void gles2_APIENTRY s_glDeleteProgram(void* self, GLuint program); 146 147 static void gles2_APIENTRY s_glDeleteBuffers(void* self, GLsizei n, const GLuint *buffers); 148 static void gles2_APIENTRY s_glDeleteFramebuffers(void* self, GLsizei n, const GLuint *framebuffers); 149 static void gles2_APIENTRY s_glDeleteRenderbuffers(void* self, GLsizei n, const GLuint *renderbuffers); 150 static void gles2_APIENTRY s_glDeleteTextures(void* self, GLsizei n, const GLuint *textures); 151 152 static void gles2_APIENTRY s_glDeleteVertexArraysOES(void* self, GLsizei n, const GLuint *arrays); 153 static void gles2_APIENTRY s_glDeleteVertexArrays(void* self, GLsizei n, const GLuint *arrays); 154 155 static void gles2_APIENTRY s_glDeleteTransformFeedbacks(void* self, GLsizei n, const GLuint *transformfeedbacks); 156 static void gles2_APIENTRY s_glDeleteSamplers(void* self, GLsizei n, const GLuint *samplers); 157 static void gles2_APIENTRY s_glDeleteQueries(void* self, GLsizei n, const GLuint *queries); 158 static void gles2_APIENTRY s_glDeleteProgramPipelines(void* self, GLsizei n, const GLuint *pipelines); 159 160 // Shaders and programs======================================= 161 static void gles2_APIENTRY s_glShaderString(void *self, GLuint shader, const GLchar* string, GLsizei len); 162 static void gles2_APIENTRY s_glCompileShader(void* self, GLuint shader); 163 static void gles2_APIENTRY s_glAttachShader(void* self, GLuint program, GLuint shader); 164 static void gles2_APIENTRY s_glDetachShader(void* self, GLuint program, GLuint shader); 165 static void gles2_APIENTRY s_glLinkProgram(void* self, GLuint program); 166 static void gles2_APIENTRY s_glUseProgram(void* self, GLuint program); 167 static void gles2_APIENTRY s_glValidateProgram(void* self, GLuint program); 168 169 static GLboolean gles2_APIENTRY s_glIsShader(void* self, GLuint shader); 170 static GLboolean gles2_APIENTRY s_glIsProgram(void* self, GLuint program); 171 172 static void gles2_APIENTRY s_glGetShaderiv(void* self, GLuint shader, GLenum pname, GLint* params); 173 static void gles2_APIENTRY s_glGetProgramiv(void* self, GLuint program, GLenum pname, GLint* params); 174 static void gles2_APIENTRY s_glGetShaderInfoLog(void* self, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* infolog); 175 static void gles2_APIENTRY s_glGetProgramInfoLog(void* self, GLuint program, GLsizei bufsize, GLsizei* length, GLchar* infolog); 176 static void gles2_APIENTRY s_glGetShaderSource(void* self, GLuint shader, GLsizei bufsize, GLsizei* length, GLchar* source); 177 178 static void gles2_APIENTRY s_glBindAttribLocation(void* self, GLuint program, GLuint index, const GLchar* name); 179 static void gles2_APIENTRY s_glGetActiveAttrib(void* self, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); 180 static void gles2_APIENTRY s_glGetActiveUniform(void* self, GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, GLint* size, GLenum* type, GLchar* name); 181 static void gles2_APIENTRY s_glGetAttachedShaders(void* self, GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders); 182 static GLint gles2_APIENTRY s_glGetAttribLocation(void* self, GLuint program, const GLchar* name); 183 184 static void gles2_APIENTRY s_glGetUniformfv(void* self, GLuint program, GLint location, GLfloat* params); 185 static void gles2_APIENTRY s_glGetUniformiv(void* self, GLuint program, GLint location, GLint* params); 186 static GLint gles2_APIENTRY s_glGetUniformLocation(void* self, GLuint program, const GLchar* name); 187 188 static void gles2_APIENTRY s_glGetProgramBinaryOES(void* self, GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); 189 static void gles2_APIENTRY s_glProgramBinaryOES(void* self, GLuint program, GLenum binaryFormat, const GLvoid* binary, GLint length); 190 191 static void gles2_APIENTRY s_glUniformBlockBinding(void* self, GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); 192 static GLuint gles2_APIENTRY s_glGetUniformBlockIndex(void* self, GLuint program, const GLchar* uniformBlockName); 193 static void gles2_APIENTRY s_glGetUniformIndicesAEMU(void* self, GLuint program, GLsizei uniformCount, const GLchar* packedNames, GLsizei packedLen, GLuint* uniformIndices); 194 195 static void gles2_APIENTRY s_glGetActiveUniformBlockiv(void* self, GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); 196 static void gles2_APIENTRY s_glGetActiveUniformBlockName(void* self, GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); 197 198 static void gles2_APIENTRY s_glGetUniformuiv(void* self, GLuint program, GLint location, GLuint *params); 199 static void gles2_APIENTRY s_glGetActiveUniformsiv(void* self, GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); 200 201 static void gles2_APIENTRY s_glTransformFeedbackVaryings(void* self, GLuint program, GLsizei count, const char ** varyings, GLenum bufferMode); 202 static void gles2_APIENTRY s_glTransformFeedbackVaryingsAEMU(void* self, GLuint program, GLsizei count, const char* packedVaryings, GLuint packedVaryingsLen, GLenum bufferMode); 203 static void gles2_APIENTRY s_glGetTransformFeedbackVarying(void* self, GLuint program, GLuint index, GLsizei bufSize, GLsizei * length, GLsizei * size, GLenum * type, char * name); 204 205 static void gles2_APIENTRY s_glProgramParameteri(void* self, GLuint program, GLenum pname, GLint value); 206 static void gles2_APIENTRY s_glProgramBinary(void* self, GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); 207 static void gles2_APIENTRY s_glGetProgramBinary(void* self, GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); 208 209 static GLint gles2_APIENTRY s_glGetFragDataLocation(void* self, GLuint program, const char * name); 210 211 static void gles2_APIENTRY s_glUseProgramStages(void* self, GLuint pipeline, GLbitfield stages, GLuint program); 212 static void gles2_APIENTRY s_glActiveShaderProgram(void* self, GLuint pipeline, GLuint program); 213 214 static void gles2_APIENTRY s_glProgramUniform1f(void* self, GLuint program, GLint location, GLfloat v0); 215 static void gles2_APIENTRY s_glProgramUniform2f(void* self, GLuint program, GLint location, GLfloat v0, GLfloat v1); 216 static void gles2_APIENTRY s_glProgramUniform3f(void* self, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); 217 static void gles2_APIENTRY s_glProgramUniform4f(void* self, GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); 218 static void gles2_APIENTRY s_glProgramUniform1i(void* self, GLuint program, GLint location, GLint v0); 219 static void gles2_APIENTRY s_glProgramUniform2i(void* self, GLuint program, GLint location, GLint v0, GLint v1); 220 static void gles2_APIENTRY s_glProgramUniform3i(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLint v2); 221 static void gles2_APIENTRY s_glProgramUniform4i(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); 222 static void gles2_APIENTRY s_glProgramUniform1ui(void* self, GLuint program, GLint location, GLuint v0); 223 static void gles2_APIENTRY s_glProgramUniform2ui(void* self, GLuint program, GLint location, GLint v0, GLuint v1); 224 static void gles2_APIENTRY s_glProgramUniform3ui(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLuint v2); 225 static void gles2_APIENTRY s_glProgramUniform4ui(void* self, GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLuint v3); 226 static void gles2_APIENTRY s_glProgramUniform1fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value); 227 static void gles2_APIENTRY s_glProgramUniform2fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value); 228 static void gles2_APIENTRY s_glProgramUniform3fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value); 229 static void gles2_APIENTRY s_glProgramUniform4fv(void* self, GLuint program, GLint location, GLsizei count, const GLfloat *value); 230 static void gles2_APIENTRY s_glProgramUniform1iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value); 231 static void gles2_APIENTRY s_glProgramUniform2iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value); 232 static void gles2_APIENTRY s_glProgramUniform3iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value); 233 static void gles2_APIENTRY s_glProgramUniform4iv(void* self, GLuint program, GLint location, GLsizei count, const GLint *value); 234 static void gles2_APIENTRY s_glProgramUniform1uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value); 235 static void gles2_APIENTRY s_glProgramUniform2uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value); 236 static void gles2_APIENTRY s_glProgramUniform3uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value); 237 static void gles2_APIENTRY s_glProgramUniform4uiv(void* self, GLuint program, GLint location, GLsizei count, const GLuint *value); 238 static void gles2_APIENTRY s_glProgramUniformMatrix2fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 239 static void gles2_APIENTRY s_glProgramUniformMatrix3fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 240 static void gles2_APIENTRY s_glProgramUniformMatrix4fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 241 static void gles2_APIENTRY s_glProgramUniformMatrix2x3fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 242 static void gles2_APIENTRY s_glProgramUniformMatrix3x2fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 243 static void gles2_APIENTRY s_glProgramUniformMatrix2x4fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 244 static void gles2_APIENTRY s_glProgramUniformMatrix4x2fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 245 static void gles2_APIENTRY s_glProgramUniformMatrix3x4fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 246 static void gles2_APIENTRY s_glProgramUniformMatrix4x3fv(void* self, GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); 247 248 static void gles2_APIENTRY s_glGetProgramInterfaceiv(void* self, GLuint program, GLenum programInterface, GLenum pname, GLint * params); 249 static void gles2_APIENTRY s_glGetProgramResourceiv(void* self, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum * props, GLsizei bufSize, GLsizei * length, GLint * params); 250 static GLuint gles2_APIENTRY s_glGetProgramResourceIndex(void* self, GLuint program, GLenum programInterface, const char * name); 251 static GLint gles2_APIENTRY s_glGetProgramResourceLocation(void* self, GLuint program, GLenum programInterface, const char * name); 252 static void gles2_APIENTRY s_glGetProgramResourceName(void* self, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei * length, char * name); 253 254 static void gles2_APIENTRY s_glTexBufferOES(void* self, GLenum target, GLenum internalformat, GLuint buffer); 255 static void gles2_APIENTRY s_glTexBufferEXT(void* self, GLenum target, GLenum internalformat, GLuint buffer); 256 static void gles2_APIENTRY s_glTexBufferRangeOES(void* self, GLenum target, GLenum internalformat, 257 GLuint buffer, GLintptr offset, GLsizeiptr size); 258 static void gles2_APIENTRY s_glTexBufferRangeEXT(void* self, GLenum target, GLenum internalformat, 259 GLuint buffer, GLintptr offset, GLsizeiptr size); 260 261 static void gles2_APIENTRY s_glEnableiEXT(void* self, GLenum cap, GLuint index); 262 static void gles2_APIENTRY s_glDisableiEXT(void* self, GLenum cap, GLuint index); 263 static void gles2_APIENTRY s_glBlendEquationiEXT(void* self, GLuint buf, GLenum mode); 264 static void gles2_APIENTRY s_glBlendEquationSeparateiEXT(void* self, GLuint buf, GLenum modeRGB, 265 GLenum modeAlpha); 266 static void gles2_APIENTRY s_glBlendFunciEXT(void* self, GLuint buf, GLenum sfactor, 267 GLenum dfactor); 268 static void gles2_APIENTRY s_glBlendFuncSeparateiEXT(void* self, GLuint buf, GLenum srcRGB, 269 GLenum dstRGB, 270 GLenum srcAlpha, GLenum dstAlpha); 271 static void gles2_APIENTRY s_glColorMaskiEXT(void* self, GLuint buf, GLboolean red, 272 GLboolean green, 273 GLboolean blue, GLboolean alpha); 274 static GLboolean gles2_APIENTRY s_glIsEnablediEXT(void* self, GLenum cap, GLuint index); 275 }; 276 277 } // namespace gl 278 } // namespace gfxstream 279 280 #endif 281