Browse Source

* patch from Denis Golovan with Opengl4.3 debug support. mantis #28670

git-svn-id: trunk@31697 -
marco 10 years ago
parent
commit
1d609d552d
1 changed files with 90 additions and 0 deletions
  1. 90 0
      packages/opengl/src/glext.pp

+ 90 - 0
packages/opengl/src/glext.pp

@@ -5094,6 +5094,61 @@ function Load_GL_VERSION_3_3(): Boolean;
 
 
 function Load_GL_VERSION_4_0(): Boolean;
 function Load_GL_VERSION_4_0(): Boolean;
 
 
+//**** GL_VERSION_4_3 *****//
+
+const
+  GL_DEBUG_OUTPUT = $92E0;
+  GL_DONT_CARE = $1100;
+  GL_CONTEXT_FLAG_DEBUG_BIT = $00000002;
+  GL_STACK_OVERFLOW = $0503;
+  GL_STACK_UNDERFLOW = $0504;
+  GL_DEBUG_OUTPUT_SYNCHRONOUS = $8242;
+  GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH = $8243;
+  GL_DEBUG_CALLBACK_FUNCTION = $8244;
+  GL_DEBUG_CALLBACK_USER_PARAM = $8245;
+  GL_DEBUG_SOURCE_API = $8246;
+  GL_DEBUG_SOURCE_WINDOW_SYSTEM = $8247;
+  GL_DEBUG_SOURCE_SHADER_COMPILER = $8248;
+  GL_DEBUG_SOURCE_THIRD_PARTY = $8249;
+  GL_DEBUG_SOURCE_APPLICATION = $824A;
+  GL_DEBUG_SOURCE_OTHER = $824B;
+  GL_DEBUG_TYPE_ERROR = $824C;
+  GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR = $824D;
+  GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR = $824E;
+  GL_DEBUG_TYPE_PORTABILITY = $824F;
+  GL_DEBUG_TYPE_PERFORMANCE = $8250;
+  GL_DEBUG_TYPE_OTHER = $8251;
+  GL_DEBUG_TYPE_MARKER = $8268;
+  GL_DEBUG_TYPE_PUSH_GROUP = $8269;
+  GL_DEBUG_TYPE_POP_GROUP = $826A;
+  GL_DEBUG_SEVERITY_NOTIFICATION = $826B;
+  GL_MAX_DEBUG_GROUP_STACK_DEPTH = $826C;
+  GL_DEBUG_GROUP_STACK_DEPTH = $826D;
+  GL_BUFFER = $82E0;
+  GL_SHADER = $82E1;
+  GL_PROGRAM = $82E2;
+  GL_QUERY = $82E3;
+  GL_PROGRAM_PIPELINE = $82E4;
+  GL_SAMPLER = $82E6;
+  GL_DISPLAY_LIST = $82E7;
+  GL_MAX_LABEL_LENGTH = $82E8;
+  GL_MAX_DEBUG_MESSAGE_LENGTH = $9143;
+  GL_MAX_DEBUG_LOGGED_MESSAGES = $9144;
+  GL_DEBUG_LOGGED_MESSAGES = $9145;
+  GL_DEBUG_SEVERITY_HIGH = $9146;
+  GL_DEBUG_SEVERITY_MEDIUM = $9147;
+  GL_DEBUG_SEVERITY_LOW = $9148;
+
+type
+  GLDEBUGPROC = procedure (source:GLenum; _type:GLenum; id:GLuint; severity:GLenum; length:GLsizei; message:PGLchar; userParam:PGLvoid );extdecl;
+
+var
+  glDebugMessageCallback:procedure (callback:GLDEBUGPROC; userParam:PGLvoid);
+  glDebugMessageControl :procedure (source:GLenum; _type:GLenum; severity:GLenum; count:GLsizei; ids:PGLuint; enabled:GLboolean);
+
+function Load_GL_Debug_output(): Boolean;
+function Load_GL_VERSION_4_3(): Boolean;
+
 implementation
 implementation
 
 
 {$IFNDEF Windows}
 {$IFNDEF Windows}
@@ -11129,6 +11184,34 @@ begin
   Result := Load_GL_VERSION_2_1();
   Result := Load_GL_VERSION_2_1();
 end;
 end;
 
 
+function Load_GL_Debug_output: Boolean;
+var
+  extstring: String;
+begin
+  Result := False;
+  extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+
+  if glext_ExtensionSupported('GL_KHR_debug', extstring) then
+  begin
+    glDebugMessageCallback := wglGetProcAddress('glDebugMessageCallback');
+    if not Assigned(glDebugMessageCallback) then Exit;
+
+    glDebugMessageControl := wglGetProcAddress('glDebugMessageControl');
+    if not Assigned(glDebugMessageControl) then Exit;
+    Result := True;
+  end;
+
+  if not Result and glext_ExtensionSupported('GL_ARB_debug_output', extstring) then
+  begin
+    glDebugMessageCallback := wglGetProcAddress('glDebugMessageCallbackARB');
+    if not Assigned(glDebugMessageCallback) then Exit;
+
+    glDebugMessageControl := wglGetProcAddress('glDebugMessageControlARB');
+    if not Assigned(glDebugMessageControl) then Exit;
+    Result := True;
+  end;
+end;
+
 function Load_GL_VERSION_3_1(): Boolean;
 function Load_GL_VERSION_3_1(): Boolean;
 begin
 begin
   Result := False;
   Result := False;
@@ -11184,4 +11267,11 @@ begin
   Result := Load_GL_VERSION_3_3();
   Result := Load_GL_VERSION_3_3();
 end;
 end;
 
 
+function Load_GL_VERSION_4_3(): Boolean;
+begin
+  Result := False;
+  if not Load_GL_Debug_output() then Exit;
+  Result := Load_GL_VERSION_3_3();
+end;
+
 end.
 end.