/* * 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 = (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 );