/* * Copyright 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <EGL/egl.h> #include "gl3stub.h" GLboolean gl3stubInit() { #define FIND_PROC(s) s = (void*)eglGetProcAddress(#s) FIND_PROC(glReadBuffer); FIND_PROC(glDrawRangeElements); FIND_PROC(glTexImage3D); FIND_PROC(glTexSubImage3D); FIND_PROC(glCopyTexSubImage3D); FIND_PROC(glCompressedTexImage3D); FIND_PROC(glCompressedTexSubImage3D); FIND_PROC(glGenQueries); FIND_PROC(glDeleteQueries); FIND_PROC(glIsQuery); FIND_PROC(glBeginQuery); FIND_PROC(glEndQuery); FIND_PROC(glGetQueryiv); FIND_PROC(glGetQueryObjectuiv); FIND_PROC(glUnmapBuffer); FIND_PROC(glGetBufferPointerv); FIND_PROC(glDrawBuffers); FIND_PROC(glUniformMatrix2x3fv); FIND_PROC(glUniformMatrix3x2fv); FIND_PROC(glUniformMatrix2x4fv); FIND_PROC(glUniformMatrix4x2fv); FIND_PROC(glUniformMatrix3x4fv); FIND_PROC(glUniformMatrix4x3fv); FIND_PROC(glBlitFramebuffer); FIND_PROC(glRenderbufferStorageMultisample); FIND_PROC(glFramebufferTextureLayer); FIND_PROC(glMapBufferRange); FIND_PROC(glFlushMappedBufferRange); FIND_PROC(glBindVertexArray); FIND_PROC(glDeleteVertexArrays); FIND_PROC(glGenVertexArrays); FIND_PROC(glIsVertexArray); FIND_PROC(glGetIntegeri_v); FIND_PROC(glBeginTransformFeedback); FIND_PROC(glEndTransformFeedback); FIND_PROC(glBindBufferRange); FIND_PROC(glBindBufferBase); FIND_PROC(glTransformFeedbackVaryings); FIND_PROC(glGetTransformFeedbackVarying); FIND_PROC(glVertexAttribIPointer); FIND_PROC(glGetVertexAttribIiv); FIND_PROC(glGetVertexAttribIuiv); FIND_PROC(glVertexAttribI4i); FIND_PROC(glVertexAttribI4ui); FIND_PROC(glVertexAttribI4iv); FIND_PROC(glVertexAttribI4uiv); FIND_PROC(glGetUniformuiv); FIND_PROC(glGetFragDataLocation); FIND_PROC(glUniform1ui); FIND_PROC(glUniform2ui); FIND_PROC(glUniform3ui); FIND_PROC(glUniform4ui); FIND_PROC(glUniform1uiv); FIND_PROC(glUniform2uiv); FIND_PROC(glUniform3uiv); FIND_PROC(glUniform4uiv); FIND_PROC(glClearBufferiv); FIND_PROC(glClearBufferuiv); FIND_PROC(glClearBufferfv); FIND_PROC(glClearBufferfi); FIND_PROC(glGetStringi); FIND_PROC(glCopyBufferSubData); FIND_PROC(glGetUniformIndices); FIND_PROC(glGetActiveUniformsiv); FIND_PROC(glGetUniformBlockIndex); FIND_PROC(glGetActiveUniformBlockiv); FIND_PROC(glGetActiveUniformBlockName); FIND_PROC(glUniformBlockBinding); FIND_PROC(glDrawArraysInstanced); FIND_PROC(glDrawElementsInstanced); FIND_PROC(glFenceSync); FIND_PROC(glIsSync); FIND_PROC(glDeleteSync); FIND_PROC(glClientWaitSync); FIND_PROC(glWaitSync); FIND_PROC(glGetInteger64v); FIND_PROC(glGetSynciv); FIND_PROC(glGetInteger64i_v); FIND_PROC(glGetBufferParameteri64v); FIND_PROC(glGenSamplers); FIND_PROC(glDeleteSamplers); FIND_PROC(glIsSampler); FIND_PROC(glBindSampler); FIND_PROC(glSamplerParameteri); FIND_PROC(glSamplerParameteriv); FIND_PROC(glSamplerParameterf); FIND_PROC(glSamplerParameterfv); FIND_PROC(glGetSamplerParameteriv); FIND_PROC(glGetSamplerParameterfv); FIND_PROC(glVertexAttribDivisor); FIND_PROC(glBindTransformFeedback); FIND_PROC(glDeleteTransformFeedbacks); FIND_PROC(glGenTransformFeedbacks); FIND_PROC(glIsTransformFeedback); FIND_PROC(glPauseTransformFeedback); FIND_PROC(glResumeTransformFeedback); FIND_PROC(glGetProgramBinary); FIND_PROC(glProgramBinary); FIND_PROC(glProgramParameteri); FIND_PROC(glInvalidateFramebuffer); FIND_PROC(glInvalidateSubFramebuffer); FIND_PROC(glTexStorage2D); FIND_PROC(glTexStorage3D); FIND_PROC(glGetInternalformativ); #undef FIND_PROC if (!glReadBuffer || !glDrawRangeElements || !glTexImage3D || !glTexSubImage3D || !glCopyTexSubImage3D || !glCompressedTexImage3D || !glCompressedTexSubImage3D || !glGenQueries || !glDeleteQueries || !glIsQuery || !glBeginQuery || !glEndQuery || !glGetQueryiv || !glGetQueryObjectuiv || !glUnmapBuffer || !glGetBufferPointerv || !glDrawBuffers || !glUniformMatrix2x3fv || !glUniformMatrix3x2fv || !glUniformMatrix2x4fv || !glUniformMatrix4x2fv || !glUniformMatrix3x4fv || !glUniformMatrix4x3fv || !glBlitFramebuffer || !glRenderbufferStorageMultisample || !glFramebufferTextureLayer || !glMapBufferRange || !glFlushMappedBufferRange || !glBindVertexArray || !glDeleteVertexArrays || !glGenVertexArrays || !glIsVertexArray || !glGetIntegeri_v || !glBeginTransformFeedback || !glEndTransformFeedback || !glBindBufferRange || !glBindBufferBase || !glTransformFeedbackVaryings || !glGetTransformFeedbackVarying || !glVertexAttribIPointer || !glGetVertexAttribIiv || !glGetVertexAttribIuiv || !glVertexAttribI4i || !glVertexAttribI4ui || !glVertexAttribI4iv || !glVertexAttribI4uiv || !glGetUniformuiv || !glGetFragDataLocation || !glUniform1ui || !glUniform2ui || !glUniform3ui || !glUniform4ui || !glUniform1uiv || !glUniform2uiv || !glUniform3uiv || !glUniform4uiv || !glClearBufferiv || !glClearBufferuiv || !glClearBufferfv || !glClearBufferfi || !glGetStringi || !glCopyBufferSubData || !glGetUniformIndices || !glGetActiveUniformsiv || !glGetUniformBlockIndex || !glGetActiveUniformBlockiv || !glGetActiveUniformBlockName || !glUniformBlockBinding || !glDrawArraysInstanced || !glDrawElementsInstanced || !glFenceSync || !glIsSync || !glDeleteSync || !glClientWaitSync || !glWaitSync || !glGetInteger64v || !glGetSynciv || !glGetInteger64i_v || !glGetBufferParameteri64v || !glGenSamplers || !glDeleteSamplers || !glIsSampler || !glBindSampler || !glSamplerParameteri || !glSamplerParameteriv || !glSamplerParameterf || !glSamplerParameterfv || !glGetSamplerParameteriv || !glGetSamplerParameterfv || !glVertexAttribDivisor || !glBindTransformFeedback || !glDeleteTransformFeedbacks || !glGenTransformFeedbacks || !glIsTransformFeedback || !glPauseTransformFeedback || !glResumeTransformFeedback || !glGetProgramBinary || !glProgramBinary || !glProgramParameteri || !glInvalidateFramebuffer || !glInvalidateSubFramebuffer || !glTexStorage2D || !glTexStorage3D || !glGetInternalformativ) { return GL_FALSE; } return GL_TRUE; } /* Function pointer definitions */ GL_APICALL void (* GL_APIENTRY glReadBuffer) (GLenum mode); GL_APICALL void (* GL_APIENTRY glDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid* indices); GL_APICALL void (* GL_APIENTRY glTexImage3D) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* pixels); GL_APICALL void (* GL_APIENTRY glTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid* pixels); GL_APICALL void (* GL_APIENTRY glCopyTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void (* GL_APIENTRY glCompressedTexImage3D) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid* data); GL_APICALL void (* GL_APIENTRY glCompressedTexSubImage3D) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid* data); GL_APICALL void (* GL_APIENTRY glGenQueries) (GLsizei n, GLuint* ids); GL_APICALL void (* GL_APIENTRY glDeleteQueries) (GLsizei n, const GLuint* ids); GL_APICALL GLboolean (* GL_APIENTRY glIsQuery) (GLuint id); GL_APICALL void (* GL_APIENTRY glBeginQuery) (GLenum target, GLuint id); GL_APICALL void (* GL_APIENTRY glEndQuery) (GLenum target); GL_APICALL void (* GL_APIENTRY glGetQueryiv) (GLenum target, GLenum pname, GLint* params); GL_APICALL void (* GL_APIENTRY glGetQueryObjectuiv) (GLuint id, GLenum pname, GLuint* params); GL_APICALL GLboolean (* GL_APIENTRY glUnmapBuffer) (GLenum target); GL_APICALL void (* GL_APIENTRY glGetBufferPointerv) (GLenum target, GLenum pname, GLvoid** params); GL_APICALL void (* GL_APIENTRY glDrawBuffers) (GLsizei n, const GLenum* bufs); GL_APICALL void (* GL_APIENTRY glUniformMatrix2x3fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); GL_APICALL void (* GL_APIENTRY glUniformMatrix3x2fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); GL_APICALL void (* GL_APIENTRY glUniformMatrix2x4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); GL_APICALL void (* GL_APIENTRY glUniformMatrix4x2fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); GL_APICALL void (* GL_APIENTRY glUniformMatrix3x4fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); GL_APICALL void (* GL_APIENTRY glUniformMatrix4x3fv) (GLint location, GLsizei count, GLboolean transpose, const GLfloat* value); GL_APICALL void (* GL_APIENTRY glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GL_APICALL void (* GL_APIENTRY glRenderbufferStorageMultisample) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void (* GL_APIENTRY glFramebufferTextureLayer) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GL_APICALL GLvoid* (* GL_APIENTRY glMapBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GL_APICALL void (* GL_APIENTRY glFlushMappedBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length); GL_APICALL void (* GL_APIENTRY glBindVertexArray) (GLuint array); GL_APICALL void (* GL_APIENTRY glDeleteVertexArrays) (GLsizei n, const GLuint* arrays); GL_APICALL void (* GL_APIENTRY glGenVertexArrays) (GLsizei n, GLuint* arrays); GL_APICALL GLboolean (* GL_APIENTRY glIsVertexArray) (GLuint array); GL_APICALL void (* GL_APIENTRY glGetIntegeri_v) (GLenum target, GLuint index, GLint* data); GL_APICALL void (* GL_APIENTRY glBeginTransformFeedback) (GLenum primitiveMode); GL_APICALL void (* GL_APIENTRY glEndTransformFeedback) (void); GL_APICALL void (* GL_APIENTRY glBindBufferRange) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GL_APICALL void (* GL_APIENTRY glBindBufferBase) (GLenum target, GLuint index, GLuint buffer); GL_APICALL void (* GL_APIENTRY glTransformFeedbackVaryings) (GLuint program, GLsizei count, const GLchar* const* varyings, GLenum bufferMode); GL_APICALL void (* GL_APIENTRY glGetTransformFeedbackVarying) (GLuint program, GLuint index, GLsizei bufSize, GLsizei* length, GLsizei* size, GLenum* type, GLchar* name); GL_APICALL void (* GL_APIENTRY glVertexAttribIPointer) (GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid* pointer); GL_APICALL void (* GL_APIENTRY glGetVertexAttribIiv) (GLuint index, GLenum pname, GLint* params); GL_APICALL void (* GL_APIENTRY glGetVertexAttribIuiv) (GLuint index, GLenum pname, GLuint* params); GL_APICALL void (* GL_APIENTRY glVertexAttribI4i) (GLuint index, GLint x, GLint y, GLint z, GLint w); GL_APICALL void (* GL_APIENTRY glVertexAttribI4ui) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GL_APICALL void (* GL_APIENTRY glVertexAttribI4iv) (GLuint index, const GLint* v); GL_APICALL void (* GL_APIENTRY glVertexAttribI4uiv) (GLuint index, const GLuint* v); GL_APICALL void (* GL_APIENTRY glGetUniformuiv) (GLuint program, GLint location, GLuint* params); GL_APICALL GLint (* GL_APIENTRY glGetFragDataLocation) (GLuint program, const GLchar *name); GL_APICALL void (* GL_APIENTRY glUniform1ui) (GLint location, GLuint v0); GL_APICALL void (* GL_APIENTRY glUniform2ui) (GLint location, GLuint v0, GLuint v1); GL_APICALL void (* GL_APIENTRY glUniform3ui) (GLint location, GLuint v0, GLuint v1, GLuint v2); GL_APICALL void (* GL_APIENTRY glUniform4ui) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GL_APICALL void (* GL_APIENTRY glUniform1uiv) (GLint location, GLsizei count, const GLuint* value); GL_APICALL void (* GL_APIENTRY glUniform2uiv) (GLint location, GLsizei count, const GLuint* value); GL_APICALL void (* GL_APIENTRY glUniform3uiv) (GLint location, GLsizei count, const GLuint* value); GL_APICALL void (* GL_APIENTRY glUniform4uiv) (GLint location, GLsizei count, const GLuint* value); GL_APICALL void (* GL_APIENTRY glClearBufferiv) (GLenum buffer, GLint drawbuffer, const GLint* value); GL_APICALL void (* GL_APIENTRY glClearBufferuiv) (GLenum buffer, GLint drawbuffer, const GLuint* value); GL_APICALL void (* GL_APIENTRY glClearBufferfv) (GLenum buffer, GLint drawbuffer, const GLfloat* value); GL_APICALL void (* GL_APIENTRY glClearBufferfi) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GL_APICALL const GLubyte* (* GL_APIENTRY glGetStringi) (GLenum name, GLuint index); GL_APICALL void (* GL_APIENTRY glCopyBufferSubData) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GL_APICALL void (* GL_APIENTRY glGetUniformIndices) (GLuint program, GLsizei uniformCount, const GLchar* const* uniformNames, GLuint* uniformIndices); GL_APICALL void (* GL_APIENTRY glGetActiveUniformsiv) (GLuint program, GLsizei uniformCount, const GLuint* uniformIndices, GLenum pname, GLint* params); GL_APICALL GLuint (* GL_APIENTRY glGetUniformBlockIndex) (GLuint program, const GLchar* uniformBlockName); GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockiv) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint* params); GL_APICALL void (* GL_APIENTRY glGetActiveUniformBlockName) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei* length, GLchar* uniformBlockName); GL_APICALL void (* GL_APIENTRY glUniformBlockBinding) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); GL_APICALL void (* GL_APIENTRY glDrawArraysInstanced) (GLenum mode, GLint first, GLsizei count, GLsizei instanceCount); GL_APICALL void (* GL_APIENTRY glDrawElementsInstanced) (GLenum mode, GLsizei count, GLenum type, const GLvoid* indices, GLsizei instanceCount); GL_APICALL GLsync (* GL_APIENTRY glFenceSync) (GLenum condition, GLbitfield flags); GL_APICALL GLboolean (* GL_APIENTRY glIsSync) (GLsync sync); GL_APICALL void (* GL_APIENTRY glDeleteSync) (GLsync sync); GL_APICALL GLenum (* GL_APIENTRY glClientWaitSync) (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_APICALL void (* GL_APIENTRY glWaitSync) (GLsync sync, GLbitfield flags, GLuint64 timeout); GL_APICALL void (* GL_APIENTRY glGetInteger64v) (GLenum pname, GLint64* params); GL_APICALL void (* GL_APIENTRY glGetSynciv) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values); GL_APICALL void (* GL_APIENTRY glGetInteger64i_v) (GLenum target, GLuint index, GLint64* data); GL_APICALL void (* GL_APIENTRY glGetBufferParameteri64v) (GLenum target, GLenum pname, GLint64* params); GL_APICALL void (* GL_APIENTRY glGenSamplers) (GLsizei count, GLuint* samplers); GL_APICALL void (* GL_APIENTRY glDeleteSamplers) (GLsizei count, const GLuint* samplers); GL_APICALL GLboolean (* GL_APIENTRY glIsSampler) (GLuint sampler); GL_APICALL void (* GL_APIENTRY glBindSampler) (GLuint unit, GLuint sampler); GL_APICALL void (* GL_APIENTRY glSamplerParameteri) (GLuint sampler, GLenum pname, GLint param); GL_APICALL void (* GL_APIENTRY glSamplerParameteriv) (GLuint sampler, GLenum pname, const GLint* param); GL_APICALL void (* GL_APIENTRY glSamplerParameterf) (GLuint sampler, GLenum pname, GLfloat param); GL_APICALL void (* GL_APIENTRY glSamplerParameterfv) (GLuint sampler, GLenum pname, const GLfloat* param); GL_APICALL void (* GL_APIENTRY glGetSamplerParameteriv) (GLuint sampler, GLenum pname, GLint* params); GL_APICALL void (* GL_APIENTRY glGetSamplerParameterfv) (GLuint sampler, GLenum pname, GLfloat* params); GL_APICALL void (* GL_APIENTRY glVertexAttribDivisor) (GLuint index, GLuint divisor); GL_APICALL void (* GL_APIENTRY glBindTransformFeedback) (GLenum target, GLuint id); GL_APICALL void (* GL_APIENTRY glDeleteTransformFeedbacks) (GLsizei n, const GLuint* ids); GL_APICALL void (* GL_APIENTRY glGenTransformFeedbacks) (GLsizei n, GLuint* ids); GL_APICALL GLboolean (* GL_APIENTRY glIsTransformFeedback) (GLuint id); GL_APICALL void (* GL_APIENTRY glPauseTransformFeedback) (void); GL_APICALL void (* GL_APIENTRY glResumeTransformFeedback) (void); GL_APICALL void (* GL_APIENTRY glGetProgramBinary) (GLuint program, GLsizei bufSize, GLsizei* length, GLenum* binaryFormat, GLvoid* binary); GL_APICALL void (* GL_APIENTRY glProgramBinary) (GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length); GL_APICALL void (* GL_APIENTRY glProgramParameteri) (GLuint program, GLenum pname, GLint value); GL_APICALL void (* GL_APIENTRY glInvalidateFramebuffer) (GLenum target, GLsizei numAttachments, const GLenum* attachments); GL_APICALL void (* GL_APIENTRY glInvalidateSubFramebuffer) (GLenum target, GLsizei numAttachments, const GLenum* attachments, GLint x, GLint y, GLsizei width, GLsizei height); GL_APICALL void (* GL_APIENTRY glTexStorage2D) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GL_APICALL void (* GL_APIENTRY glTexStorage3D) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GL_APICALL void (* GL_APIENTRY glGetInternalformativ) (GLenum target, GLenum internalformat, GLenum pname, GLsizei bufSize, GLint* params);