Added support for Instancing
Former-commit-id: 62f5f3186423b01f7a0ac2762969dca12bea1327
This commit is contained in:
@@ -413,6 +413,37 @@ bool NzOpenGL::Initialize()
|
||||
}
|
||||
}
|
||||
|
||||
// DrawInstanced
|
||||
if (s_openglVersion >= 330)
|
||||
{
|
||||
try
|
||||
{
|
||||
glDrawArraysInstanced = reinterpret_cast<PFNGLDRAWARRAYSINSTANCEDPROC>(LoadEntry("glDrawArraysInstanced"));
|
||||
glDrawElementsInstanced = reinterpret_cast<PFNGLDRAWELEMENTSINSTANCEDPROC>(LoadEntry("glDrawElementsInstanced"));
|
||||
|
||||
s_openGLextensions[nzOpenGLExtension_DrawInstanced] = true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
NazaraWarning("Failed to load GL_ARB_draw_instanced: " + NzString(e.what()));
|
||||
}
|
||||
}
|
||||
|
||||
if (!s_openGLextensions[nzOpenGLExtension_DrawInstanced] && IsSupported("GL_ARB_draw_instanced"))
|
||||
{
|
||||
try
|
||||
{
|
||||
glDrawArraysInstanced = reinterpret_cast<PFNGLDRAWARRAYSINSTANCEDARBPROC>(LoadEntry("glDrawArraysInstancedARB"));
|
||||
glDrawElementsInstanced = reinterpret_cast<PFNGLDRAWELEMENTSINSTANCEDARBPROC>(LoadEntry("glDrawElementsInstancedARB"));
|
||||
|
||||
s_openGLextensions[nzOpenGLExtension_DrawInstanced] = true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
NazaraWarning("Failed to load GL_ARB_draw_instanced: " + NzString(e.what()));
|
||||
}
|
||||
}
|
||||
|
||||
// FP64
|
||||
if (s_openglVersion >= 400 || IsSupported("GL_ARB_gpu_shader_fp64"))
|
||||
{
|
||||
@@ -460,6 +491,35 @@ bool NzOpenGL::Initialize()
|
||||
}
|
||||
}
|
||||
|
||||
// InstancedArray
|
||||
if (s_openglVersion >= 330)
|
||||
{
|
||||
try
|
||||
{
|
||||
glVertexAttribDivisor = reinterpret_cast<PFNGLVERTEXATTRIBDIVISORPROC>(LoadEntry("glVertexAttribDivisor"));
|
||||
|
||||
s_openGLextensions[nzOpenGLExtension_InstancedArray] = true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
NazaraWarning("Failed to load GL_ARB_instanced_arrays: " + NzString(e.what()));
|
||||
}
|
||||
}
|
||||
|
||||
if (!s_openGLextensions[nzOpenGLExtension_InstancedArray] && IsSupported("GL_ARB_instanced_arrays"))
|
||||
{
|
||||
try
|
||||
{
|
||||
glVertexAttribDivisor = reinterpret_cast<PFNGLVERTEXATTRIBDIVISORARBPROC>(LoadEntry("glVertexAttribDivisorARB"));
|
||||
|
||||
s_openGLextensions[nzOpenGLExtension_InstancedArray] = true;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
NazaraWarning("Failed to load GL_ARB_instanced_arrays: " + NzString(e.what()));
|
||||
}
|
||||
}
|
||||
|
||||
// PixelBufferObject
|
||||
s_openGLextensions[nzOpenGLExtension_PixelBufferObject] = (s_openglVersion >= 210 || IsSupported("GL_ARB_pixel_buffer_object"));
|
||||
|
||||
@@ -980,9 +1040,11 @@ PFNGLDEPTHMASKPROC glDepthMask = nullptr;
|
||||
PFNGLDISABLEPROC glDisable = nullptr;
|
||||
PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = nullptr;
|
||||
PFNGLDRAWARRAYSPROC glDrawArrays = nullptr;
|
||||
PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced = nullptr;
|
||||
PFNGLDRAWBUFFERPROC glDrawBuffer = nullptr;
|
||||
PFNGLDRAWBUFFERSPROC glDrawBuffers = nullptr;
|
||||
PFNGLDRAWELEMENTSPROC glDrawElements = nullptr;
|
||||
PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced = nullptr;
|
||||
PFNGLENABLEPROC glEnable = nullptr;
|
||||
PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = nullptr;
|
||||
PFNGLENDQUERYPROC glEndQuery = nullptr;
|
||||
@@ -1075,6 +1137,7 @@ PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = nullptr;
|
||||
PFNGLUNMAPBUFFERPROC glUnmapBuffer = nullptr;
|
||||
PFNGLUSEPROGRAMPROC glUseProgram = nullptr;
|
||||
PFNGLVERTEXATTRIB4FPROC glVertexAttrib4f = nullptr;
|
||||
PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor = nullptr;
|
||||
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = nullptr;
|
||||
PFNGLVIEWPORTPROC glViewport = nullptr;
|
||||
#if defined(NAZARA_PLATFORM_WINDOWS)
|
||||
|
||||
Reference in New Issue
Block a user