146 lines
4.7 KiB
C
146 lines
4.7 KiB
C
#include "framework.h"
|
|
|
|
/*
|
|
* GL_ARB_multitexture
|
|
*/
|
|
#ifndef GL_ARB_multitexture
|
|
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
|
|
PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
|
|
#endif
|
|
|
|
/*
|
|
* GL_ARB_shader_objects
|
|
*/
|
|
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
|
|
PFNGLGETHANDLEARBPROC glGetHandleARB;
|
|
PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
|
|
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
|
|
PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
|
|
PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
|
|
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
|
|
PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
|
|
PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
|
|
PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
|
|
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
|
|
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
|
|
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
|
|
|
|
/*
|
|
* GL_ARB_vertex_shader
|
|
*/
|
|
PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB;
|
|
PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
|
|
PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
|
|
PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
|
|
PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
|
|
PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
|
|
|
|
/*
|
|
* GL_EXT_fog_coord
|
|
*/
|
|
PFNGLFOGCOORDFVEXTPROC glFogCoordfvEXT;
|
|
PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointerEXT;
|
|
|
|
/*
|
|
* GL_EXT_secondary_color
|
|
*/
|
|
PFNGLSECONDARYCOLOR3FVEXTPROC glSecondaryColor3fvEXT;
|
|
PFNGLSECONDARYCOLORPOINTEREXTPROC glSecondaryColorPointerEXT;
|
|
|
|
static void Display (void)
|
|
{
|
|
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
RenderScene ();
|
|
glutSwapBuffers ();
|
|
}
|
|
|
|
static void Idle (void)
|
|
{
|
|
glutPostRedisplay ();
|
|
}
|
|
|
|
void InitFramework (int *argc, char *argv[])
|
|
{
|
|
glutInit (argc, argv);
|
|
glutInitWindowPosition (0, 0);
|
|
glutInitWindowSize (200, 200);
|
|
glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
|
glutCreateWindow (argv[0]);
|
|
|
|
#ifndef GL_ARB_multitexture
|
|
GETPROCADDR(glClientActiveTextureARB, PFNGLCLIENTACTIVETEXTUREARBPROC);
|
|
GETPROCADDR(glMultiTexCoord4fvARB, PFNGLMULTITEXCOORD4FVARBPROC);
|
|
#endif
|
|
|
|
GETPROCADDR(glDeleteObjectARB, PFNGLDELETEOBJECTARBPROC);
|
|
GETPROCADDR(glGetHandleARB, PFNGLGETHANDLEARBPROC);
|
|
GETPROCADDR(glDetachObjectARB, PFNGLDETACHOBJECTARBPROC);
|
|
GETPROCADDR(glCreateShaderObjectARB, PFNGLCREATESHADEROBJECTARBPROC);
|
|
GETPROCADDR(glShaderSourceARB, PFNGLSHADERSOURCEARBPROC);
|
|
GETPROCADDR(glCompileShaderARB, PFNGLCOMPILESHADERARBPROC);
|
|
GETPROCADDR(glCreateProgramObjectARB, PFNGLCREATEPROGRAMOBJECTARBPROC);
|
|
GETPROCADDR(glAttachObjectARB, PFNGLATTACHOBJECTARBPROC);
|
|
GETPROCADDR(glLinkProgramARB, PFNGLLINKPROGRAMARBPROC);
|
|
GETPROCADDR(glUseProgramObjectARB, PFNGLUSEPROGRAMOBJECTARBPROC);
|
|
GETPROCADDR(glGetObjectParameterivARB, PFNGLGETOBJECTPARAMETERIVARBPROC);
|
|
GETPROCADDR(glGetInfoLogARB, PFNGLGETINFOLOGARBPROC);
|
|
GETPROCADDR(glGetUniformLocationARB, PFNGLGETUNIFORMLOCATIONARBPROC);
|
|
|
|
GETPROCADDR(glVertexAttrib4fvARB, PFNGLVERTEXATTRIB4FVARBPROC);
|
|
GETPROCADDR(glVertexAttribPointerARB, PFNGLVERTEXATTRIBPOINTERARBPROC);
|
|
GETPROCADDR(glEnableVertexAttribArrayARB, PFNGLENABLEVERTEXATTRIBARRAYARBPROC);
|
|
GETPROCADDR(glDisableVertexAttribArrayARB, PFNGLDISABLEVERTEXATTRIBARRAYARBPROC);
|
|
GETPROCADDR(glBindAttribLocationARB, PFNGLBINDATTRIBLOCATIONARBPROC);
|
|
GETPROCADDR(glGetAttribLocationARB, PFNGLGETATTRIBLOCATIONARBPROC);
|
|
|
|
GETPROCADDR(glFogCoordfvEXT, PFNGLFOGCOORDFVEXTPROC);
|
|
GETPROCADDR(glFogCoordPointerEXT, PFNGLFOGCOORDPOINTEREXTPROC);
|
|
|
|
GETPROCADDR(glSecondaryColor3fvEXT, PFNGLSECONDARYCOLOR3FVEXTPROC);
|
|
GETPROCADDR(glSecondaryColorPointerEXT, PFNGLSECONDARYCOLORPOINTEREXTPROC);
|
|
|
|
printf ("VENDOR: %s\n", glGetString (GL_VENDOR));
|
|
printf ("RENDERER: %s\n", glGetString (GL_RENDERER));
|
|
|
|
InitScene ();
|
|
|
|
glutDisplayFunc (Display);
|
|
glutIdleFunc (Idle);
|
|
glutMainLoop ();
|
|
}
|
|
|
|
GLboolean CheckObjectStatus (GLhandleARB handle)
|
|
{
|
|
GLint type, status, length;
|
|
GLcharARB *infolog;
|
|
|
|
glGetObjectParameterivARB (handle, GL_OBJECT_TYPE_ARB, &type);
|
|
if (type == GL_SHADER_OBJECT_ARB)
|
|
glGetObjectParameterivARB (handle, GL_OBJECT_COMPILE_STATUS_ARB, &status);
|
|
else if (type == GL_PROGRAM_OBJECT_ARB)
|
|
glGetObjectParameterivARB (handle, GL_OBJECT_LINK_STATUS_ARB, &status);
|
|
else {
|
|
assert (0);
|
|
return GL_FALSE;
|
|
}
|
|
|
|
if (status)
|
|
return GL_TRUE;
|
|
|
|
printf ("\n%s FAILED. INFO LOG FOLLOWS:\n",
|
|
type == GL_SHADER_OBJECT_ARB ? "SHADER COMPILE" : "PROGRAM LINK");
|
|
|
|
glGetObjectParameterivARB (handle, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
|
|
infolog = (GLcharARB *) (malloc (length));
|
|
if (infolog != NULL) {
|
|
glGetInfoLogARB (handle, length, NULL, infolog);
|
|
printf ("%s", infolog);
|
|
free (infolog);
|
|
}
|
|
|
|
printf ("\n");
|
|
|
|
return GL_FALSE;
|
|
}
|
|
|