diff --git a/include/osg/GLExtensions b/include/osg/GLExtensions index deb691f29..1a7c0e437 100644 --- a/include/osg/GLExtensions +++ b/include/osg/GLExtensions @@ -479,6 +479,23 @@ class OSG_EXPORT GLExtensions : public osg::Referenced void (GL_APIENTRY * glProgramString) (GLenum target, GLenum format, GLsizei len, const void *string); void (GL_APIENTRY * glProgramLocalParameter4fv) (GLenum target, GLuint index, const GLfloat *params); + // Sample Extensions (OpenGL>=3.3) + void (GL_APIENTRY * glSamplerParameteri)(GLuint sampler, GLenum param, GLint value); + void (GL_APIENTRY * glSamplerParameterf)(GLuint sampler, GLenum param, GLfloat value); + void (GL_APIENTRY * glSamplerParameteriv)(GLuint sampler, GLenum param, GLint *value); + void (GL_APIENTRY * glSamplerParameterfv)(GLuint sampler, GLenum param, GLfloat *value); + void (GL_APIENTRY * glSamplerParameterIiv)(GLuint sampler, GLenum param, GLint *value); + void (GL_APIENTRY * glSamplerParameterIuiv)(GLuint sampler, GLenum param, GLuint *value); + + void (GL_APIENTRY * glGetSamplerParameteriv)(GLuint sampler, GLenum param, GLint *value); + void (GL_APIENTRY * glGetSamplerParameterfv)(GLuint sampler, GLenum param, GLfloat *value); + void (GL_APIENTRY * glGetSamplerParameterIiv)(GLuint sampler, GLenum param, GLint *value); + void (GL_APIENTRY * glGetSamplerParameterIuiv)(GLuint sampler, GLenum param, GLuint *value); + + void (GL_APIENTRY * glGenSamplers)(GLsizei size,GLuint * samplers); + void (GL_APIENTRY * glDeleteSamplers)(GLsizei size,const GLuint * samplers); + void (GL_APIENTRY * glBindSampler)(GLuint tu, GLuint sampler); + GLboolean (GL_APIENTRY * glIsSampler)(GLuint id); // Texture Extensions bool isMultiTexturingSupported; @@ -693,6 +710,19 @@ class OSG_EXPORT GLExtensions : public osg::Referenced void (GL_APIENTRY * glGenVertexArrays) (GLsizei size, GLuint *handles); GLboolean (GL_APIENTRY * glIsVertexArray) (GLuint handle); void (GL_APIENTRY * glBindVertexArray) (GLuint handle); + // OpenGL 4.3 / ARB_vertex_attrib_binding + bool isVertexAttribBindingSupported; + void (GL_APIENTRY * glBindVertexBuffer)(GLuint bindingindex, GLuint buffer, GLintptr offset, GLintptr stride); + void (GL_APIENTRY * glVertexArrayVertexBuffer)(GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); + void (GL_APIENTRY * glVertexAttribBinding)(GLuint attribindex, GLuint bindingindex); + void (GL_APIENTRY * glVertexArrayAttribBinding)(GLuint vaobj, GLuint attribindex, GLuint bindingindex); + + void (GL_APIENTRY * glVertexAttribFormat)( GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + void (GL_APIENTRY * glVertexAttribIFormat)( GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + void (GL_APIENTRY * glVertexAttribLFormat)( GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + void (GL_APIENTRY * glVertexArrayAttribFormat)( GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); + void (GL_APIENTRY * glVertexArrayAttribIFormat)( GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); + void (GL_APIENTRY * glVertexArrayAttribLFormat)( GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); // MultiDrawArrays void (GL_APIENTRY * glMultiDrawArrays) (GLenum mode, const GLint * first, const GLsizei * count, GLsizei primcount); diff --git a/src/osg/GLExtensions.cpp b/src/osg/GLExtensions.cpp index b5c2664d0..ac57e8b2f 100644 --- a/src/osg/GLExtensions.cpp +++ b/src/osg/GLExtensions.cpp @@ -719,7 +719,7 @@ GLExtensions::GLExtensions(unsigned int in_contextID): setGLExtensionFuncPtr(glIsBuffer, "glIsBuffer","glIsBufferARB", validContext); setGLExtensionFuncPtr(glGetBufferSubData, "glGetBufferSubData","glGetBufferSubDataARB", validContext); setGLExtensionFuncPtr(glMapBuffer, "glMapBuffer","glMapBufferARB", validContext); - setGLExtensionFuncPtr(glMapBufferRange, "glMapBufferRange" , validContext); + setGLExtensionFuncPtr(glMapBufferRange, "glMapBufferRange", "glMapBufferRangeARB" , validContext); setGLExtensionFuncPtr(glUnmapBuffer, "glUnmapBuffer","glUnmapBufferARB", validContext); setGLExtensionFuncPtr(glGetBufferParameteriv, "glGetBufferParameteriv","glGetBufferParameterivARB", validContext); setGLExtensionFuncPtr(glGetBufferPointerv, "glGetBufferPointerv","glGetBufferPointervARB", validContext); @@ -822,7 +822,23 @@ GLExtensions::GLExtensions(unsigned int in_contextID): setGLExtensionFuncPtr(glProgramString, "glProgramStringARB", validContext); setGLExtensionFuncPtr(glProgramLocalParameter4fv, "glProgramLocalParameter4fvARB", validContext); + // Sample Extensions (OpenGL>=3.3) + setGLExtensionFuncPtr(glSamplerParameteri, "glSamplerParameteri", "glSamplerParameteriARB", validContext); + setGLExtensionFuncPtr(glSamplerParameterf, "glSamplerParameterf", "glSamplerParameterfARB", validContext); + setGLExtensionFuncPtr(glSamplerParameteriv, "glSamplerParameteriv", "glSamplerParameterivARB", validContext); + setGLExtensionFuncPtr(glSamplerParameterfv, "glSamplerParameterfv", "glSamplerParameterfvARB", validContext); + setGLExtensionFuncPtr(glSamplerParameterIiv, "glSamplerParameterIiv", "glSamplerParameterIivARB", validContext); + setGLExtensionFuncPtr(glSamplerParameterIuiv, "glSamplerParameterIuiv", "glSamplerParameterIuivARB", validContext); + setGLExtensionFuncPtr(glGetSamplerParameteriv, "glGetSamplerParameteriv", "glGetSamplerParameterivARB", validContext); + setGLExtensionFuncPtr(glGetSamplerParameterfv, "glGetSamplerParameterfv", "glGetSamplerParameterfvARB", validContext); + setGLExtensionFuncPtr(glGetSamplerParameterIiv, "glGetSamplerParameterIiv", "glGetSamplerParameterIivARB", validContext); + setGLExtensionFuncPtr(glGetSamplerParameterIuiv, "glGetSamplerParameterIuiv", "glGetSamplerParameterIuivARB", validContext); + + setGLExtensionFuncPtr(glGenSamplers, "glGenSamplers", "glGenSamplersARB", validContext); + setGLExtensionFuncPtr(glDeleteSamplers, "glDeleteSamplers", "glDeleteSamplersARB", validContext); + setGLExtensionFuncPtr(glBindSampler, "glBindSampler", "glBindSamplerARB", validContext); + setGLExtensionFuncPtr(glIsSampler, "glIsSampler", "glIsSamplerARB", validContext); // Texture extensions const char* renderer = validContext ? (const char*) glGetString(GL_RENDERER) : 0; @@ -1143,6 +1159,21 @@ GLExtensions::GLExtensions(unsigned int in_contextID): osg::setGLExtensionFuncPtr(glDeleteVertexArrays, "glDeleteVertexArrays", "glDeleteVertexArraysOES", validContext); osg::setGLExtensionFuncPtr(glIsVertexArray, "glIsVertexArray", "glIsVertexArrayOES", validContext); + // OpenGL 4.3 / ARB_vertex_attrib_binding + isVertexAttribBindingSupported = validContext && (isGLExtensionOrVersionSupported(contextID, "GL_ARB_vertex_attrib_binding", 4.3f)); + + osg::setGLExtensionFuncPtr(glBindVertexBuffer, "glBindVertexBuffer", "glBindVertexBufferOES", validContext); + osg::setGLExtensionFuncPtr(glVertexArrayVertexBuffer, "glVertexArrayVertexBuffer", "glVertexArrayVertexBufferOES", validContext); + osg::setGLExtensionFuncPtr(glVertexAttribBinding, "glVertexAttribBinding", "glVertexAttribBindingOES", validContext); + osg::setGLExtensionFuncPtr(glVertexArrayAttribBinding, "glVertexArrayAttribBinding", "glVertexArrayAttribBindingOES", validContext); + + osg::setGLExtensionFuncPtr(glVertexAttribFormat, "glVertexAttribBinding", "glVertexAttribBindingOES", validContext); + osg::setGLExtensionFuncPtr(glVertexAttribIFormat, "glVertexAttribBinding", "glVertexAttribBindingOES", validContext); + osg::setGLExtensionFuncPtr(glVertexAttribLFormat, "glVertexAttribLFormat", "glVertexAttribLFormatOES", validContext); + osg::setGLExtensionFuncPtr(glVertexArrayAttribFormat, "glVertexArrayAttribFormat", "glVertexArrayAttribFormatOES", validContext); + osg::setGLExtensionFuncPtr(glVertexArrayAttribIFormat, "glVertexArrayAttribIFormat", "glVertexArrayAttribIFormatOES", validContext); + osg::setGLExtensionFuncPtr(glVertexArrayAttribLFormat, "glVertexArrayAttribLFormat", "glVertexArrayAttribLFormatOES", validContext); + // MultiDrawArrays setGLExtensionFuncPtr(glMultiDrawArrays, "glMultiDrawArrays", "glMultiDrawArraysEXT", validContext); setGLExtensionFuncPtr(glMultiDrawElements, "glMultiDrawElements", "glMultiDrawElementsEXT");