blob: 692cef9c8cb523060b63283e196acc602afae973 [file] [log] [blame]
#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;
}