Commit 16f8b240 authored by hybrid's avatar hybrid

Add provoke vertex support.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2593 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 99a90881
......@@ -569,6 +569,10 @@ bool COpenGLDriver::genericDriverInit(const core::dimension2d<u32>& screenSize,
glHint(GL_POINT_SMOOTH_HINT, GL_FASTEST);
glDepthFunc(GL_LEQUAL);
glFrontFace(GL_CW);
// adjust flat coloring scheme to DirectX version
#if defined(GL_ARB_provoking_vertex) || defined(GL_EXT_provoking_vertex)
extGlProvokingVertex(GL_FIRST_VERTEX_CONVENTION_EXT);
#endif
UserClipPlane.reallocate(MaxUserClipPlanes);
UserClipPlaneEnabled.reallocate(MaxUserClipPlanes);
......
......@@ -45,7 +45,8 @@ COpenGLExtensionHandler::COpenGLExtensionHandler() :
pGlDrawBuffersARB(0), pGlDrawBuffersATI(0),
pGlGenBuffersARB(0), pGlBindBufferARB(0), pGlBufferDataARB(0), pGlDeleteBuffersARB(0),
pGlBufferSubDataARB(0), pGlGetBufferSubDataARB(0), pGlMapBufferARB(0), pGlUnmapBufferARB(0),
pGlIsBufferARB(0), pGlGetBufferParameterivARB(0), pGlGetBufferPointervARB(0)
pGlIsBufferARB(0), pGlGetBufferParameterivARB(0), pGlGetBufferPointervARB(0),
pGlProvokingVertexARB(0), pGlProvokingVertexEXT(0)
#endif // _IRR_OPENGL_USE_EXTPOINTER_
......@@ -187,6 +188,8 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
pGlIsBufferARB= (PFNGLISBUFFERARBPROC) wglGetProcAddress("glIsBufferARB");
pGlGetBufferParameterivARB= (PFNGLGETBUFFERPARAMETERIVARBPROC) wglGetProcAddress("glGetBufferParameterivARB");
pGlGetBufferPointervARB= (PFNGLGETBUFFERPOINTERVARBPROC) wglGetProcAddress("glGetBufferPointervARB");
pGLProvokingVertexARB= (PFNGLPROVOKINGVERTEXPROC) wglGetProcAddress("glProvokingVertex");
pGLProvokingVertexEXT= (PFNGLPROVOKINGVERTEXEXTPROC) wglGetProcAddress("glProvokingVertexEXT");
#elif defined(_IRR_COMPILE_WITH_X11_DEVICE_) || defined (_IRR_COMPILE_WITH_SDL_DEVICE_)
......@@ -399,6 +402,10 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
pGlGetBufferPointervARB = (PFNGLGETBUFFERPOINTERVARBPROC)
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glGetBufferPointervARB"));
pGlProvokingVertexARB= (PFNGLPROVOKINGVERTEXPROC)
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glProvokingVertex"));
pGlProvokingVertexEXT= (PFNGLPROVOKINGVERTEXEXTPROC)
IRR_OGL_LOAD_EXTENSION(reinterpret_cast<const GLubyte*>("glProvokingVertexEXT"));
#endif // _IRR_OPENGL_USE_EXTPOINTER_
......
......@@ -883,6 +883,7 @@ class COpenGLExtensionHandler
GLboolean extGlIsBuffer (GLuint buffer);
void extGlGetBufferParameteriv (GLenum target, GLenum pname, GLint *params);
void extGlGetBufferPointerv (GLenum target, GLenum pname, GLvoid **params);
void extGlProvokingVertex(GLenum mode);
protected:
......@@ -951,6 +952,8 @@ class COpenGLExtensionHandler
PFNGLISBUFFERARBPROC pGlIsBufferARB;
PFNGLGETBUFFERPARAMETERIVARBPROC pGlGetBufferParameterivARB;
PFNGLGETBUFFERPOINTERVARBPROC pGlGetBufferPointervARB;
PFNGLPROVOKINGVERTEXPROC pGlProvokingVertexARB;
PFNGLPROVOKINGVERTEXEXTPROC pGlProvokingVertexEXT;
#endif
};
......@@ -1645,6 +1648,23 @@ inline void COpenGLExtensionHandler::extGlGetBufferPointerv (GLenum target, GLen
}
inline void COpenGLExtensionHandler::extGlProvokingVertex(GLenum mode)
{
#ifdef _IRR_OPENGL_USE_EXTPOINTER_
if (pGlProvokingVertexARB)
pGlProvokingVertexARB(mode);
else if (pGlProvokingVertexEXT)
pGlProvokingVertexEXT(mode);
#elif defined(GL_ARB_provoking_vertex)
glProvokingVertex(mode);
#elif defined(GL_EXT_provoking_vertex)
glProvokingVertexEXT(mode);
#else
os::Printer::log("glProvokingVertex not supported", ELL_ERROR);
#endif
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment