summaryrefslogtreecommitdiff
path: root/progs/slang/framework.c
diff options
context:
space:
mode:
Diffstat (limited to 'progs/slang/framework.c')
-rw-r--r--progs/slang/framework.c144
1 files changed, 144 insertions, 0 deletions
diff --git a/progs/slang/framework.c b/progs/slang/framework.c
new file mode 100644
index 0000000000..80ee37f637
--- /dev/null
+++ b/progs/slang/framework.c
@@ -0,0 +1,144 @@
+#include "framework.h"
+
+/*
+ * GL_ARB_multitexture
+ */
+PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
+PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
+
+/*
+ * 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]);
+
+ GETPROCADDR(glClientActiveTextureARB, PFNGLCLIENTACTIVETEXTUREARBPROC);
+ GETPROCADDR(glMultiTexCoord4fvARB, PFNGLMULTITEXCOORD4FVARBPROC);
+
+ 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 ();
+
+ /*glutReshapeFunc (Reshape);
+ glutKeyboardFunc (Key);
+ glutSpecialFunc (SpecialKey);*/
+ 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;
+}
+