X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Farb_shader_objects.cpp;h=61853db23f4dbd26a611e1caa1b4aef3e2bed9e3;hb=ca12f072923156f02b316b72e3b38bdb8cda5ebc;hp=18ea54829897a59994de32fbf3883d4f3b3a70da;hpb=b617c5d7b5283ad260a77f01e42e6170cabbc03d;p=libs%2Fgl.git diff --git a/source/arb_shader_objects.cpp b/source/arb_shader_objects.cpp index 18ea5482..61853db2 100644 --- a/source/arb_shader_objects.cpp +++ b/source/arb_shader_objects.cpp @@ -1,91 +1,143 @@ -#include "extension.h" #include "arb_shader_objects.h" namespace Msp { namespace GL { -PFNGLDELETEOBJECTARBPROC glDeleteObjectARB = 0; -PFNGLGETHANDLEARBPROC glGetHandleARB = 0; -PFNGLDETACHOBJECTARBPROC glDetachObjectARB = 0; -PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB = 0; -PFNGLSHADERSOURCEARBPROC glShaderSourceARB = 0; -PFNGLCOMPILESHADERARBPROC glCompileShaderARB = 0; -PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB = 0; -PFNGLATTACHOBJECTARBPROC glAttachObjectARB = 0; -PFNGLLINKPROGRAMARBPROC glLinkProgramARB = 0; -PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB = 0; -PFNGLVALIDATEPROGRAMARBPROC glValidateProgramARB = 0; -PFNGLUNIFORM1FARBPROC glUniform1fARB = 0; -PFNGLUNIFORM2FARBPROC glUniform2fARB = 0; -PFNGLUNIFORM3FARBPROC glUniform3fARB = 0; -PFNGLUNIFORM4FARBPROC glUniform4fARB = 0; -PFNGLUNIFORM1IARBPROC glUniform1iARB = 0; -PFNGLUNIFORM2IARBPROC glUniform2iARB = 0; -PFNGLUNIFORM3IARBPROC glUniform3iARB = 0; -PFNGLUNIFORM4IARBPROC glUniform4iARB = 0; -PFNGLUNIFORM1FVARBPROC glUniform1fvARB = 0; -PFNGLUNIFORM2FVARBPROC glUniform2fvARB = 0; -PFNGLUNIFORM3FVARBPROC glUniform3fvARB = 0; -PFNGLUNIFORM4FVARBPROC glUniform4fvARB = 0; -PFNGLUNIFORM1IVARBPROC glUniform1ivARB = 0; -PFNGLUNIFORM2IVARBPROC glUniform2ivARB = 0; -PFNGLUNIFORM3IVARBPROC glUniform3ivARB = 0; -PFNGLUNIFORM4IVARBPROC glUniform4ivARB = 0; -PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB = 0; -PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB = 0; -PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB = 0; -PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB = 0; -PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB = 0; -PFNGLGETINFOLOGARBPROC glGetInfoLogARB = 0; -PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedObjectsARB = 0; -PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB = 0; -PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniformARB = 0; -PFNGLGETUNIFORMFVARBPROC glGetUniformfvARB = 0; -PFNGLGETUNIFORMIVARBPROC glGetUniformivARB = 0; -PFNGLGETSHADERSOURCEARBPROC glGetShaderSourceARB = 0; +PFNGLATTACHOBJECTARBPROC glAttachShader = 0; +PFNGLCOMPILESHADERARBPROC glCompileShader = 0; +PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgram = 0; +PFNGLCREATESHADEROBJECTARBPROC glCreateShader = 0; +PFNGLDELETEOBJECTARBPROC glDeleteProgram = 0; +PFNGLDELETEOBJECTARBPROC glDeleteShader = 0; +PFNGLDETACHOBJECTARBPROC glDetachShader = 0; +PFNGLGETACTIVEUNIFORMARBPROC glGetActiveUniform = 0; +PFNGLGETATTACHEDOBJECTSARBPROC glGetAttachedShaders = 0; +PFNGLGETINFOLOGARBPROC glGetProgramInfoLog = 0; +PFNGLGETOBJECTPARAMETERIVARBPROC glGetProgramiv = 0; +PFNGLGETINFOLOGARBPROC glGetShaderInfoLog = 0; +PFNGLGETSHADERSOURCEARBPROC glGetShaderSource = 0; +PFNGLGETOBJECTPARAMETERIVARBPROC glGetShaderiv = 0; +PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocation = 0; +PFNGLGETUNIFORMFVARBPROC glGetUniformfv = 0; +PFNGLGETUNIFORMIVARBPROC glGetUniformiv = 0; +PFNGLLINKPROGRAMARBPROC glLinkProgram = 0; +PFNGLSHADERSOURCEARBPROC glShaderSource = 0; +PFNGLUNIFORM1FARBPROC glUniform1f = 0; +PFNGLUNIFORM1FVARBPROC glUniform1fv = 0; +PFNGLUNIFORM1IARBPROC glUniform1i = 0; +PFNGLUNIFORM1IVARBPROC glUniform1iv = 0; +PFNGLUNIFORM2FARBPROC glUniform2f = 0; +PFNGLUNIFORM2FVARBPROC glUniform2fv = 0; +PFNGLUNIFORM2IARBPROC glUniform2i = 0; +PFNGLUNIFORM2IVARBPROC glUniform2iv = 0; +PFNGLUNIFORM3FARBPROC glUniform3f = 0; +PFNGLUNIFORM3FVARBPROC glUniform3fv = 0; +PFNGLUNIFORM3IARBPROC glUniform3i = 0; +PFNGLUNIFORM3IVARBPROC glUniform3iv = 0; +PFNGLUNIFORM4FARBPROC glUniform4f = 0; +PFNGLUNIFORM4FVARBPROC glUniform4fv = 0; +PFNGLUNIFORM4IARBPROC glUniform4i = 0; +PFNGLUNIFORM4IVARBPROC glUniform4iv = 0; +PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fv = 0; +PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fv = 0; +PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fv = 0; +PFNGLUSEPROGRAMOBJECTARBPROC glUseProgram = 0; +PFNGLVALIDATEPROGRAMARBPROC glValidateProgram = 0; -void init_arb_shader_objects() +Extension::SupportLevel init_arb_shader_objects() { - glDeleteObjectARB = reinterpret_cast(get_proc_address("glDeleteObjectARB")); - glGetHandleARB = reinterpret_cast(get_proc_address("glGetHandleARB")); - glDetachObjectARB = reinterpret_cast(get_proc_address("glDetachObjectARB")); - glCreateShaderObjectARB = reinterpret_cast(get_proc_address("glCreateShaderObjectARB")); - glShaderSourceARB = reinterpret_cast(get_proc_address("glShaderSourceARB")); - glCompileShaderARB = reinterpret_cast(get_proc_address("glCompileShaderARB")); - glCreateProgramObjectARB = reinterpret_cast(get_proc_address("glCreateProgramObjectARB")); - glAttachObjectARB = reinterpret_cast(get_proc_address("glAttachObjectARB")); - glLinkProgramARB = reinterpret_cast(get_proc_address("glLinkProgramARB")); - glUseProgramObjectARB = reinterpret_cast(get_proc_address("glUseProgramObjectARB")); - glValidateProgramARB = reinterpret_cast(get_proc_address("glValidateProgramARB")); - glUniform1fARB = reinterpret_cast(get_proc_address("glUniform1fARB")); - glUniform2fARB = reinterpret_cast(get_proc_address("glUniform2fARB")); - glUniform3fARB = reinterpret_cast(get_proc_address("glUniform3fARB")); - glUniform4fARB = reinterpret_cast(get_proc_address("glUniform4fARB")); - glUniform1iARB = reinterpret_cast(get_proc_address("glUniform1iARB")); - glUniform2iARB = reinterpret_cast(get_proc_address("glUniform2iARB")); - glUniform3iARB = reinterpret_cast(get_proc_address("glUniform3iARB")); - glUniform4iARB = reinterpret_cast(get_proc_address("glUniform4iARB")); - glUniform1fvARB = reinterpret_cast(get_proc_address("glUniform1fvARB")); - glUniform2fvARB = reinterpret_cast(get_proc_address("glUniform2fvARB")); - glUniform3fvARB = reinterpret_cast(get_proc_address("glUniform3fvARB")); - glUniform4fvARB = reinterpret_cast(get_proc_address("glUniform4fvARB")); - glUniform1ivARB = reinterpret_cast(get_proc_address("glUniform1ivARB")); - glUniform2ivARB = reinterpret_cast(get_proc_address("glUniform2ivARB")); - glUniform3ivARB = reinterpret_cast(get_proc_address("glUniform3ivARB")); - glUniform4ivARB = reinterpret_cast(get_proc_address("glUniform4ivARB")); - glUniformMatrix2fvARB = reinterpret_cast(get_proc_address("glUniformMatrix2fvARB")); - glUniformMatrix3fvARB = reinterpret_cast(get_proc_address("glUniformMatrix3fvARB")); - glUniformMatrix4fvARB = reinterpret_cast(get_proc_address("glUniformMatrix4fvARB")); - glGetObjectParameterfvARB = reinterpret_cast(get_proc_address("glGetObjectParameterfvARB")); - glGetObjectParameterivARB = reinterpret_cast(get_proc_address("glGetObjectParameterivARB")); - glGetInfoLogARB = reinterpret_cast(get_proc_address("glGetInfoLogARB")); - glGetAttachedObjectsARB = reinterpret_cast(get_proc_address("glGetAttachedObjectsARB")); - glGetUniformLocationARB = reinterpret_cast(get_proc_address("glGetUniformLocationARB")); - glGetActiveUniformARB = reinterpret_cast(get_proc_address("glGetActiveUniformARB")); - glGetUniformfvARB = reinterpret_cast(get_proc_address("glGetUniformfvARB")); - glGetUniformivARB = reinterpret_cast(get_proc_address("glGetUniformivARB")); - glGetShaderSourceARB = reinterpret_cast(get_proc_address("glGetShaderSourceARB")); + if(is_version_at_least(2, 0)) + { + glAttachShader = reinterpret_cast(get_proc_address("glAttachShader")); + glCompileShader = reinterpret_cast(get_proc_address("glCompileShader")); + glCreateProgram = reinterpret_cast(get_proc_address("glCreateProgram")); + glCreateShader = reinterpret_cast(get_proc_address("glCreateShader")); + glDeleteProgram = reinterpret_cast(get_proc_address("glDeleteProgram")); + glDeleteShader = reinterpret_cast(get_proc_address("glDeleteShader")); + glDetachShader = reinterpret_cast(get_proc_address("glDetachShader")); + glGetActiveUniform = reinterpret_cast(get_proc_address("glGetActiveUniform")); + glGetAttachedShaders = reinterpret_cast(get_proc_address("glGetAttachedShaders")); + glGetProgramInfoLog = reinterpret_cast(get_proc_address("glGetProgramInfoLog")); + glGetProgramiv = reinterpret_cast(get_proc_address("glGetProgramiv")); + glGetShaderInfoLog = reinterpret_cast(get_proc_address("glGetShaderInfoLog")); + glGetShaderSource = reinterpret_cast(get_proc_address("glGetShaderSource")); + glGetShaderiv = reinterpret_cast(get_proc_address("glGetShaderiv")); + glGetUniformLocation = reinterpret_cast(get_proc_address("glGetUniformLocation")); + glGetUniformfv = reinterpret_cast(get_proc_address("glGetUniformfv")); + glGetUniformiv = reinterpret_cast(get_proc_address("glGetUniformiv")); + glLinkProgram = reinterpret_cast(get_proc_address("glLinkProgram")); + glShaderSource = reinterpret_cast(get_proc_address("glShaderSource")); + glUniform1f = reinterpret_cast(get_proc_address("glUniform1f")); + glUniform1fv = reinterpret_cast(get_proc_address("glUniform1fv")); + glUniform1i = reinterpret_cast(get_proc_address("glUniform1i")); + glUniform1iv = reinterpret_cast(get_proc_address("glUniform1iv")); + glUniform2f = reinterpret_cast(get_proc_address("glUniform2f")); + glUniform2fv = reinterpret_cast(get_proc_address("glUniform2fv")); + glUniform2i = reinterpret_cast(get_proc_address("glUniform2i")); + glUniform2iv = reinterpret_cast(get_proc_address("glUniform2iv")); + glUniform3f = reinterpret_cast(get_proc_address("glUniform3f")); + glUniform3fv = reinterpret_cast(get_proc_address("glUniform3fv")); + glUniform3i = reinterpret_cast(get_proc_address("glUniform3i")); + glUniform3iv = reinterpret_cast(get_proc_address("glUniform3iv")); + glUniform4f = reinterpret_cast(get_proc_address("glUniform4f")); + glUniform4fv = reinterpret_cast(get_proc_address("glUniform4fv")); + glUniform4i = reinterpret_cast(get_proc_address("glUniform4i")); + glUniform4iv = reinterpret_cast(get_proc_address("glUniform4iv")); + glUniformMatrix2fv = reinterpret_cast(get_proc_address("glUniformMatrix2fv")); + glUniformMatrix3fv = reinterpret_cast(get_proc_address("glUniformMatrix3fv")); + glUniformMatrix4fv = reinterpret_cast(get_proc_address("glUniformMatrix4fv")); + glUseProgram = reinterpret_cast(get_proc_address("glUseProgram")); + glValidateProgram = reinterpret_cast(get_proc_address("glValidateProgram")); + return Extension::CORE; + } + if(is_supported("GL_ARB_shader_objects")) + { + glAttachShader = reinterpret_cast(get_proc_address("glAttachObjectARB")); + glCompileShader = reinterpret_cast(get_proc_address("glCompileShaderARB")); + glCreateProgram = reinterpret_cast(get_proc_address("glCreateProgramObjectARB")); + glCreateShader = reinterpret_cast(get_proc_address("glCreateShaderObjectARB")); + glDeleteProgram = reinterpret_cast(get_proc_address("glDeleteObjectARB")); + glDeleteShader = reinterpret_cast(get_proc_address("glDeleteObjectARB")); + glDetachShader = reinterpret_cast(get_proc_address("glDetachObjectARB")); + glGetActiveUniform = reinterpret_cast(get_proc_address("glGetActiveUniformARB")); + glGetAttachedShaders = reinterpret_cast(get_proc_address("glGetAttachedObjectsARB")); + glGetProgramInfoLog = reinterpret_cast(get_proc_address("glGetInfoLogARB")); + glGetProgramiv = reinterpret_cast(get_proc_address("glGetObjectParameterivARB")); + glGetShaderInfoLog = reinterpret_cast(get_proc_address("glGetInfoLogARB")); + glGetShaderSource = reinterpret_cast(get_proc_address("glGetShaderSourceARB")); + glGetShaderiv = reinterpret_cast(get_proc_address("glGetObjectParameterivARB")); + glGetUniformLocation = reinterpret_cast(get_proc_address("glGetUniformLocationARB")); + glGetUniformfv = reinterpret_cast(get_proc_address("glGetUniformfvARB")); + glGetUniformiv = reinterpret_cast(get_proc_address("glGetUniformivARB")); + glLinkProgram = reinterpret_cast(get_proc_address("glLinkProgramARB")); + glShaderSource = reinterpret_cast(get_proc_address("glShaderSourceARB")); + glUniform1f = reinterpret_cast(get_proc_address("glUniform1fARB")); + glUniform1fv = reinterpret_cast(get_proc_address("glUniform1fvARB")); + glUniform1i = reinterpret_cast(get_proc_address("glUniform1iARB")); + glUniform1iv = reinterpret_cast(get_proc_address("glUniform1ivARB")); + glUniform2f = reinterpret_cast(get_proc_address("glUniform2fARB")); + glUniform2fv = reinterpret_cast(get_proc_address("glUniform2fvARB")); + glUniform2i = reinterpret_cast(get_proc_address("glUniform2iARB")); + glUniform2iv = reinterpret_cast(get_proc_address("glUniform2ivARB")); + glUniform3f = reinterpret_cast(get_proc_address("glUniform3fARB")); + glUniform3fv = reinterpret_cast(get_proc_address("glUniform3fvARB")); + glUniform3i = reinterpret_cast(get_proc_address("glUniform3iARB")); + glUniform3iv = reinterpret_cast(get_proc_address("glUniform3ivARB")); + glUniform4f = reinterpret_cast(get_proc_address("glUniform4fARB")); + glUniform4fv = reinterpret_cast(get_proc_address("glUniform4fvARB")); + glUniform4i = reinterpret_cast(get_proc_address("glUniform4iARB")); + glUniform4iv = reinterpret_cast(get_proc_address("glUniform4ivARB")); + glUniformMatrix2fv = reinterpret_cast(get_proc_address("glUniformMatrix2fvARB")); + glUniformMatrix3fv = reinterpret_cast(get_proc_address("glUniformMatrix3fvARB")); + glUniformMatrix4fv = reinterpret_cast(get_proc_address("glUniformMatrix4fvARB")); + glUseProgram = reinterpret_cast(get_proc_address("glUseProgramObjectARB")); + glValidateProgram = reinterpret_cast(get_proc_address("glValidateProgramARB")); + return Extension::EXTENSION; + } + return Extension::UNSUPPORTED; } +Extension ARB_shader_objects("GL_ARB_shader_objects", init_arb_shader_objects); + } // namespace GL } // namespace Msp