/* * 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 #include "gl3stub.h" GLboolean gl3stubInit() { #define FIND_PROC(s) s = (decltype(s))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);