Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

framework.c 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. #include "framework.h"
  2. /*
  3. * GL_ARB_multitexture
  4. */
  5. #ifndef GL_ARB_multitexture
  6. PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
  7. PFNGLMULTITEXCOORD4FVARBPROC glMultiTexCoord4fvARB;
  8. #endif
  9. /*
  10. * GL_ARB_shader_objects
  11. */
  12. PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
  13. PFNGLGETHANDLEARBPROC glGetHandleARB;
  14. PFNGLDETACHOBJECTARBPROC glDetachObjectARB;
  15. PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
  16. PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
  17. PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
  18. PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
  19. PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
  20. PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
  21. PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
  22. PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
  23. PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
  24. PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
  25. /*
  26. * GL_ARB_vertex_shader
  27. */
  28. PFNGLVERTEXATTRIB4FVARBPROC glVertexAttrib4fvARB;
  29. PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
  30. PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
  31. PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
  32. PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
  33. PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
  34. /*
  35. * GL_EXT_fog_coord
  36. */
  37. PFNGLFOGCOORDFVEXTPROC glFogCoordfvEXT;
  38. PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointerEXT;
  39. /*
  40. * GL_EXT_secondary_color
  41. */
  42. PFNGLSECONDARYCOLOR3FVEXTPROC glSecondaryColor3fvEXT;
  43. PFNGLSECONDARYCOLORPOINTEREXTPROC glSecondaryColorPointerEXT;
  44. static void Display (void)
  45. {
  46. glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  47. RenderScene ();
  48. glutSwapBuffers ();
  49. }
  50. static void Idle (void)
  51. {
  52. glutPostRedisplay ();
  53. }
  54. void InitFramework (int *argc, char *argv[])
  55. {
  56. glutInit (argc, argv);
  57. glutInitWindowPosition (0, 0);
  58. glutInitWindowSize (200, 200);
  59. glutInitDisplayMode (GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
  60. glutCreateWindow (argv[0]);
  61. #ifndef GL_ARB_multitexture
  62. GETPROCADDR(glClientActiveTextureARB, PFNGLCLIENTACTIVETEXTUREARBPROC);
  63. GETPROCADDR(glMultiTexCoord4fvARB, PFNGLMULTITEXCOORD4FVARBPROC);
  64. #endif
  65. GETPROCADDR(glDeleteObjectARB, PFNGLDELETEOBJECTARBPROC);
  66. GETPROCADDR(glGetHandleARB, PFNGLGETHANDLEARBPROC);
  67. GETPROCADDR(glDetachObjectARB, PFNGLDETACHOBJECTARBPROC);
  68. GETPROCADDR(glCreateShaderObjectARB, PFNGLCREATESHADEROBJECTARBPROC);
  69. GETPROCADDR(glShaderSourceARB, PFNGLSHADERSOURCEARBPROC);
  70. GETPROCADDR(glCompileShaderARB, PFNGLCOMPILESHADERARBPROC);
  71. GETPROCADDR(glCreateProgramObjectARB, PFNGLCREATEPROGRAMOBJECTARBPROC);
  72. GETPROCADDR(glAttachObjectARB, PFNGLATTACHOBJECTARBPROC);
  73. GETPROCADDR(glLinkProgramARB, PFNGLLINKPROGRAMARBPROC);
  74. GETPROCADDR(glUseProgramObjectARB, PFNGLUSEPROGRAMOBJECTARBPROC);
  75. GETPROCADDR(glGetObjectParameterivARB, PFNGLGETOBJECTPARAMETERIVARBPROC);
  76. GETPROCADDR(glGetInfoLogARB, PFNGLGETINFOLOGARBPROC);
  77. GETPROCADDR(glGetUniformLocationARB, PFNGLGETUNIFORMLOCATIONARBPROC);
  78. GETPROCADDR(glVertexAttrib4fvARB, PFNGLVERTEXATTRIB4FVARBPROC);
  79. GETPROCADDR(glVertexAttribPointerARB, PFNGLVERTEXATTRIBPOINTERARBPROC);
  80. GETPROCADDR(glEnableVertexAttribArrayARB, PFNGLENABLEVERTEXATTRIBARRAYARBPROC);
  81. GETPROCADDR(glDisableVertexAttribArrayARB, PFNGLDISABLEVERTEXATTRIBARRAYARBPROC);
  82. GETPROCADDR(glBindAttribLocationARB, PFNGLBINDATTRIBLOCATIONARBPROC);
  83. GETPROCADDR(glGetAttribLocationARB, PFNGLGETATTRIBLOCATIONARBPROC);
  84. GETPROCADDR(glFogCoordfvEXT, PFNGLFOGCOORDFVEXTPROC);
  85. GETPROCADDR(glFogCoordPointerEXT, PFNGLFOGCOORDPOINTEREXTPROC);
  86. GETPROCADDR(glSecondaryColor3fvEXT, PFNGLSECONDARYCOLOR3FVEXTPROC);
  87. GETPROCADDR(glSecondaryColorPointerEXT, PFNGLSECONDARYCOLORPOINTEREXTPROC);
  88. printf ("VENDOR: %s\n", glGetString (GL_VENDOR));
  89. printf ("RENDERER: %s\n", glGetString (GL_RENDERER));
  90. InitScene ();
  91. glutDisplayFunc (Display);
  92. glutIdleFunc (Idle);
  93. glutMainLoop ();
  94. }
  95. GLboolean CheckObjectStatus (GLhandleARB handle)
  96. {
  97. GLint type, status, length;
  98. GLcharARB *infolog;
  99. glGetObjectParameterivARB (handle, GL_OBJECT_TYPE_ARB, &type);
  100. if (type == GL_SHADER_OBJECT_ARB)
  101. glGetObjectParameterivARB (handle, GL_OBJECT_COMPILE_STATUS_ARB, &status);
  102. else if (type == GL_PROGRAM_OBJECT_ARB)
  103. glGetObjectParameterivARB (handle, GL_OBJECT_LINK_STATUS_ARB, &status);
  104. else {
  105. assert (0);
  106. return GL_FALSE;
  107. }
  108. if (status)
  109. return GL_TRUE;
  110. printf ("\n%s FAILED. INFO LOG FOLLOWS:\n",
  111. type == GL_SHADER_OBJECT_ARB ? "SHADER COMPILE" : "PROGRAM LINK");
  112. glGetObjectParameterivARB (handle, GL_OBJECT_INFO_LOG_LENGTH_ARB, &length);
  113. infolog = (GLcharARB *) (malloc (length));
  114. if (infolog != NULL) {
  115. glGetInfoLogARB (handle, length, NULL, infolog);
  116. printf ("%s", infolog);
  117. free (infolog);
  118. }
  119. printf ("\n");
  120. return GL_FALSE;
  121. }