Added OpenGL support for sampler objects
Also prevented an exception launch by the SeparateShaderObjects code to escape. Former-commit-id: ae594e16a85c02f0c649ef573189b4b722f713c3
This commit is contained in:
parent
9839e36171
commit
e699969b64
|
|
@ -31,6 +31,7 @@ enum nzOpenGLExtension
|
||||||
nzOpenGLExtension_FP64,
|
nzOpenGLExtension_FP64,
|
||||||
nzOpenGLExtension_FrameBufferObject,
|
nzOpenGLExtension_FrameBufferObject,
|
||||||
nzOpenGLExtension_PixelBufferObject,
|
nzOpenGLExtension_PixelBufferObject,
|
||||||
|
nzOpenGLExtension_SamplerObjects,
|
||||||
nzOpenGLExtension_SeparateShaderObjects,
|
nzOpenGLExtension_SeparateShaderObjects,
|
||||||
nzOpenGLExtension_TextureArray,
|
nzOpenGLExtension_TextureArray,
|
||||||
nzOpenGLExtension_TextureCompression_s3tc,
|
nzOpenGLExtension_TextureCompression_s3tc,
|
||||||
|
|
@ -96,6 +97,7 @@ NAZARA_API extern PFNGLBINDBUFFERPROC glBindBuffer;
|
||||||
NAZARA_API extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
|
NAZARA_API extern PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer;
|
||||||
NAZARA_API extern PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
|
NAZARA_API extern PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation;
|
||||||
NAZARA_API extern PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
|
NAZARA_API extern PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer;
|
||||||
|
NAZARA_API extern PFNGLBINDSAMPLERPROC glBindSampler;
|
||||||
NAZARA_API extern PFNGLBINDTEXTUREPROC glBindTexture;
|
NAZARA_API extern PFNGLBINDTEXTUREPROC glBindTexture;
|
||||||
NAZARA_API extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
|
NAZARA_API extern PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
|
||||||
NAZARA_API extern PFNGLBLENDFUNCPROC glBlendFunc;
|
NAZARA_API extern PFNGLBLENDFUNCPROC glBlendFunc;
|
||||||
|
|
@ -120,6 +122,7 @@ NAZARA_API extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
|
||||||
NAZARA_API extern PFNGLDELETEPROGRAMPROC glDeleteProgram;
|
NAZARA_API extern PFNGLDELETEPROGRAMPROC glDeleteProgram;
|
||||||
NAZARA_API extern PFNGLDELETEQUERIESPROC glDeleteQueries;
|
NAZARA_API extern PFNGLDELETEQUERIESPROC glDeleteQueries;
|
||||||
NAZARA_API extern PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
|
NAZARA_API extern PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers;
|
||||||
|
NAZARA_API extern PFNGLDELETESAMPLERSPROC glDeleteSamplers;
|
||||||
NAZARA_API extern PFNGLDELETESHADERPROC glDeleteShader;
|
NAZARA_API extern PFNGLDELETESHADERPROC glDeleteShader;
|
||||||
NAZARA_API extern PFNGLDELETETEXTURESPROC glDeleteTextures;
|
NAZARA_API extern PFNGLDELETETEXTURESPROC glDeleteTextures;
|
||||||
NAZARA_API extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
|
NAZARA_API extern PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
|
||||||
|
|
@ -146,6 +149,7 @@ NAZARA_API extern PFNGLGENBUFFERSPROC glGenBuffers;
|
||||||
NAZARA_API extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
|
NAZARA_API extern PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers;
|
||||||
NAZARA_API extern PFNGLGENQUERIESPROC glGenQueries;
|
NAZARA_API extern PFNGLGENQUERIESPROC glGenQueries;
|
||||||
NAZARA_API extern PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
|
NAZARA_API extern PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers;
|
||||||
|
NAZARA_API extern PFNGLGENSAMPLERSPROC glGenSamplers;
|
||||||
NAZARA_API extern PFNGLGENTEXTURESPROC glGenTextures;
|
NAZARA_API extern PFNGLGENTEXTURESPROC glGenTextures;
|
||||||
NAZARA_API extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
|
NAZARA_API extern PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
|
||||||
NAZARA_API extern PFNGLGETBOOLEANVPROC glGetBooleanv;
|
NAZARA_API extern PFNGLGETBOOLEANVPROC glGetBooleanv;
|
||||||
|
|
@ -191,6 +195,8 @@ NAZARA_API extern PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv;
|
||||||
NAZARA_API extern PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
|
NAZARA_API extern PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv;
|
||||||
NAZARA_API extern PFNGLREADPIXELSPROC glReadPixels;
|
NAZARA_API extern PFNGLREADPIXELSPROC glReadPixels;
|
||||||
NAZARA_API extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
|
NAZARA_API extern PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage;
|
||||||
|
NAZARA_API extern PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf;
|
||||||
|
NAZARA_API extern PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri;
|
||||||
NAZARA_API extern PFNGLSCISSORPROC glScissor;
|
NAZARA_API extern PFNGLSCISSORPROC glScissor;
|
||||||
NAZARA_API extern PFNGLSHADERSOURCEPROC glShaderSource;
|
NAZARA_API extern PFNGLSHADERSOURCEPROC glShaderSource;
|
||||||
NAZARA_API extern PFNGLSTENCILFUNCPROC glStencilFunc;
|
NAZARA_API extern PFNGLSTENCILFUNCPROC glStencilFunc;
|
||||||
|
|
|
||||||
|
|
@ -447,27 +447,53 @@ namespace NzOpenGL
|
||||||
// PixelBufferObject
|
// PixelBufferObject
|
||||||
openGLextensions[nzOpenGLExtension_PixelBufferObject] = (openGLversion >= 210 || IsSupported("GL_ARB_pixel_buffer_object"));
|
openGLextensions[nzOpenGLExtension_PixelBufferObject] = (openGLversion >= 210 || IsSupported("GL_ARB_pixel_buffer_object"));
|
||||||
|
|
||||||
|
// SamplerObjects
|
||||||
|
if (openGLversion >= 430 || (openGLversion < 400 && openGLversion >= 330) || IsSupported("GL_ARB_sampler_objects"))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
glBindSampler = reinterpret_cast<PFNGLBINDSAMPLERPROC>(LoadEntry("glBindSampler"));
|
||||||
|
glDeleteSamplers = reinterpret_cast<PFNGLDELETESAMPLERSPROC>(LoadEntry("glDeleteSamplers"));
|
||||||
|
glGenSamplers = reinterpret_cast<PFNGLGENSAMPLERSPROC>(LoadEntry("glGenSamplers"));
|
||||||
|
glSamplerParameterf = reinterpret_cast<PFNGLSAMPLERPARAMETERFPROC>(LoadEntry("glSamplerParameterf"));
|
||||||
|
glSamplerParameteri = reinterpret_cast<PFNGLSAMPLERPARAMETERIPROC>(LoadEntry("glSamplerParameteri"));
|
||||||
|
|
||||||
|
openGLextensions[nzOpenGLExtension_SamplerObjects] = true;
|
||||||
|
}
|
||||||
|
catch (const std::exception& e)
|
||||||
|
{
|
||||||
|
NazaraWarning("Failed to load ARB_sampler_objects: (" + NzString(e.what()) + ")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SeparateShaderObjects
|
// SeparateShaderObjects
|
||||||
if (openGLversion >= 400 || IsSupported("GL_ARB_separate_shader_objects"))
|
if (openGLversion >= 400 || IsSupported("GL_ARB_separate_shader_objects"))
|
||||||
{
|
{
|
||||||
glProgramUniform1f = reinterpret_cast<PFNGLPROGRAMUNIFORM1FPROC>(LoadEntry("glProgramUniform1f"));
|
try
|
||||||
glProgramUniform1i = reinterpret_cast<PFNGLPROGRAMUNIFORM1IPROC>(LoadEntry("glProgramUniform1i"));
|
|
||||||
glProgramUniform2fv = reinterpret_cast<PFNGLPROGRAMUNIFORM2FVPROC>(LoadEntry("glProgramUniform2fv"));
|
|
||||||
glProgramUniform3fv = reinterpret_cast<PFNGLPROGRAMUNIFORM3FVPROC>(LoadEntry("glProgramUniform3fv"));
|
|
||||||
glProgramUniform4fv = reinterpret_cast<PFNGLPROGRAMUNIFORM4FVPROC>(LoadEntry("glProgramUniform4fv"));
|
|
||||||
glProgramUniformMatrix4fv = reinterpret_cast<PFNGLPROGRAMUNIFORMMATRIX4FVPROC>(LoadEntry("glProgramUniformMatrix4fv"));
|
|
||||||
|
|
||||||
// Si ARB_gpu_shader_fp64 est supporté, alors cette extension donne également accès aux fonctions utilisant des double
|
|
||||||
if (openGLextensions[nzOpenGLExtension_FP64])
|
|
||||||
{
|
{
|
||||||
glProgramUniform1d = reinterpret_cast<PFNGLPROGRAMUNIFORM1DPROC>(LoadEntry("glProgramUniform1d"));
|
glProgramUniform1f = reinterpret_cast<PFNGLPROGRAMUNIFORM1FPROC>(LoadEntry("glProgramUniform1f"));
|
||||||
glProgramUniform2dv = reinterpret_cast<PFNGLPROGRAMUNIFORM2DVPROC>(LoadEntry("glProgramUniform2dv"));
|
glProgramUniform1i = reinterpret_cast<PFNGLPROGRAMUNIFORM1IPROC>(LoadEntry("glProgramUniform1i"));
|
||||||
glProgramUniform3dv = reinterpret_cast<PFNGLPROGRAMUNIFORM3DVPROC>(LoadEntry("glProgramUniform3dv"));
|
glProgramUniform2fv = reinterpret_cast<PFNGLPROGRAMUNIFORM2FVPROC>(LoadEntry("glProgramUniform2fv"));
|
||||||
glProgramUniform4dv = reinterpret_cast<PFNGLPROGRAMUNIFORM4DVPROC>(LoadEntry("glProgramUniform4dv"));
|
glProgramUniform3fv = reinterpret_cast<PFNGLPROGRAMUNIFORM3FVPROC>(LoadEntry("glProgramUniform3fv"));
|
||||||
glProgramUniformMatrix4dv = reinterpret_cast<PFNGLPROGRAMUNIFORMMATRIX4DVPROC>(LoadEntry("glProgramUniformMatrix4dv"));
|
glProgramUniform4fv = reinterpret_cast<PFNGLPROGRAMUNIFORM4FVPROC>(LoadEntry("glProgramUniform4fv"));
|
||||||
}
|
glProgramUniformMatrix4fv = reinterpret_cast<PFNGLPROGRAMUNIFORMMATRIX4FVPROC>(LoadEntry("glProgramUniformMatrix4fv"));
|
||||||
|
|
||||||
openGLextensions[nzOpenGLExtension_SeparateShaderObjects] = true;
|
// Si ARB_gpu_shader_fp64 est supporté, alors cette extension donne également accès aux fonctions utilisant des double
|
||||||
|
if (openGLextensions[nzOpenGLExtension_FP64])
|
||||||
|
{
|
||||||
|
glProgramUniform1d = reinterpret_cast<PFNGLPROGRAMUNIFORM1DPROC>(LoadEntry("glProgramUniform1d"));
|
||||||
|
glProgramUniform2dv = reinterpret_cast<PFNGLPROGRAMUNIFORM2DVPROC>(LoadEntry("glProgramUniform2dv"));
|
||||||
|
glProgramUniform3dv = reinterpret_cast<PFNGLPROGRAMUNIFORM3DVPROC>(LoadEntry("glProgramUniform3dv"));
|
||||||
|
glProgramUniform4dv = reinterpret_cast<PFNGLPROGRAMUNIFORM4DVPROC>(LoadEntry("glProgramUniform4dv"));
|
||||||
|
glProgramUniformMatrix4dv = reinterpret_cast<PFNGLPROGRAMUNIFORMMATRIX4DVPROC>(LoadEntry("glProgramUniformMatrix4dv"));
|
||||||
|
}
|
||||||
|
|
||||||
|
openGLextensions[nzOpenGLExtension_SeparateShaderObjects] = true;
|
||||||
|
}
|
||||||
|
catch (const std::exception& e)
|
||||||
|
{
|
||||||
|
NazaraWarning("Failed to load ARB_separate_shader_objects: (" + NzString(e.what()) + ")");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TextureArray
|
// TextureArray
|
||||||
|
|
@ -886,6 +912,7 @@ PFNGLBINDBUFFERPROC glBindBuffer = nullptr;
|
||||||
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = nullptr;
|
PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = nullptr;
|
||||||
PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation = nullptr;
|
PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation = nullptr;
|
||||||
PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = nullptr;
|
PFNGLBINDRENDERBUFFERPROC glBindRenderbuffer = nullptr;
|
||||||
|
PFNGLBINDSAMPLERPROC glBindSampler = nullptr;
|
||||||
PFNGLBINDTEXTUREPROC glBindTexture = nullptr;
|
PFNGLBINDTEXTUREPROC glBindTexture = nullptr;
|
||||||
PFNGLBINDVERTEXARRAYPROC glBindVertexArray = nullptr;
|
PFNGLBINDVERTEXARRAYPROC glBindVertexArray = nullptr;
|
||||||
PFNGLBLENDFUNCPROC glBlendFunc = nullptr;
|
PFNGLBLENDFUNCPROC glBlendFunc = nullptr;
|
||||||
|
|
@ -910,6 +937,7 @@ PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = nullptr;
|
||||||
PFNGLDELETEPROGRAMPROC glDeleteProgram = nullptr;
|
PFNGLDELETEPROGRAMPROC glDeleteProgram = nullptr;
|
||||||
PFNGLDELETEQUERIESPROC glDeleteQueries = nullptr;
|
PFNGLDELETEQUERIESPROC glDeleteQueries = nullptr;
|
||||||
PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = nullptr;
|
PFNGLDELETERENDERBUFFERSPROC glDeleteRenderbuffers = nullptr;
|
||||||
|
PFNGLDELETESAMPLERSPROC glDeleteSamplers = nullptr;
|
||||||
PFNGLDELETESHADERPROC glDeleteShader = nullptr;
|
PFNGLDELETESHADERPROC glDeleteShader = nullptr;
|
||||||
PFNGLDELETETEXTURESPROC glDeleteTextures = nullptr;
|
PFNGLDELETETEXTURESPROC glDeleteTextures = nullptr;
|
||||||
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = nullptr;
|
PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = nullptr;
|
||||||
|
|
@ -936,6 +964,7 @@ PFNGLGENBUFFERSPROC glGenBuffers = nullptr;
|
||||||
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = nullptr;
|
PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = nullptr;
|
||||||
PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = nullptr;
|
PFNGLGENRENDERBUFFERSPROC glGenRenderbuffers = nullptr;
|
||||||
PFNGLGENQUERIESPROC glGenQueries = nullptr;
|
PFNGLGENQUERIESPROC glGenQueries = nullptr;
|
||||||
|
PFNGLGENSAMPLERSPROC glGenSamplers = nullptr;
|
||||||
PFNGLGENTEXTURESPROC glGenTextures = nullptr;
|
PFNGLGENTEXTURESPROC glGenTextures = nullptr;
|
||||||
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = nullptr;
|
PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = nullptr;
|
||||||
PFNGLGETBOOLEANVPROC glGetBooleanv = nullptr;
|
PFNGLGETBOOLEANVPROC glGetBooleanv = nullptr;
|
||||||
|
|
@ -981,6 +1010,8 @@ PFNGLPROGRAMUNIFORMMATRIX4DVPROC glProgramUniformMatrix4dv = nullptr;
|
||||||
PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv = nullptr;
|
PFNGLPROGRAMUNIFORMMATRIX4FVPROC glProgramUniformMatrix4fv = nullptr;
|
||||||
PFNGLREADPIXELSPROC glReadPixels = nullptr;
|
PFNGLREADPIXELSPROC glReadPixels = nullptr;
|
||||||
PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = nullptr;
|
PFNGLRENDERBUFFERSTORAGEPROC glRenderbufferStorage = nullptr;
|
||||||
|
PFNGLSAMPLERPARAMETERFPROC glSamplerParameterf = nullptr;
|
||||||
|
PFNGLSAMPLERPARAMETERIPROC glSamplerParameteri = nullptr;
|
||||||
PFNGLSCISSORPROC glScissor = nullptr;
|
PFNGLSCISSORPROC glScissor = nullptr;
|
||||||
PFNGLSHADERSOURCEPROC glShaderSource = nullptr;
|
PFNGLSHADERSOURCEPROC glShaderSource = nullptr;
|
||||||
PFNGLSTENCILFUNCPROC glStencilFunc = nullptr;
|
PFNGLSTENCILFUNCPROC glStencilFunc = nullptr;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue