Bläddra i källkod

* Add support for GL_ARB_vertex_buffer_object extension,
contributed by Jaroslaw Blasiok.

git-svn-id: trunk@386 -

daniel 20 år sedan
förälder
incheckning
13201365cb
2 ändrade filer med 85 tillägg och 2 borttagningar
  1. 1 0
      packages/extra/opengl/gl.pp
  2. 84 2
      packages/extra/opengl/glext.pp

+ 1 - 0
packages/extra/opengl/gl.pp

@@ -82,6 +82,7 @@ type
   GLdouble   = Double;        PGLdouble   = ^GLdouble;
   GLclampd   = Double;        PGLclampd   = ^GLclampd;
 { GLvoid     = void; }        PGLvoid     = Pointer;
+                              PPGLvoid    = ^PGLvoid;
 
 {******************************************************************************}
 

+ 84 - 2
packages/extra/opengl/glext.pp

@@ -2726,9 +2726,57 @@ const
 
 function Load_GL_ARB_fragment_program: Boolean;
 
-//***** GL_ATI_text_fragment_shader *****//
+{***** GL_ATI_text_fragment_shader *****}
 const
-  GL_TEXT_FRAGMENT_SHADER_ATI = $8200;
+     GL_TEXT_FRAGMENT_SHADER_ATI = $8200;
+
+{***** GL_ARB_vertex_buffer_object *****}
+const
+     GL_BUFFER_SIZE_ARB = $8764;
+     GL_BUFFER_USAGE_ARB = $8765;
+     GL_ARRAY_BUFFER_ARB = $8892;
+     GL_ELEMENT_ARRAY_BUFFER_ARB = $8893;
+     GL_ARRAY_BUFFER_BINDING_ARB = $8894;
+     GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB = $8895;
+     GL_VERTEX_ARRAY_BUFFER_BINDING_ARB = $8896;
+     GL_NORMAL_ARRAY_BUFFER_BINDING_ARB = $8897;
+     GL_COLOR_ARRAY_BUFFER_BINDING_ARB = $8898;
+     GL_INDEX_ARRAY_BUFFER_BINDING_ARB = $8899;
+     GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = $889A;
+     GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = $889B;
+     GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = $889C;
+     GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = $889D;
+     GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB = $889E;
+     GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = $889F;
+     GL_READ_ONLY_ARB = $88B8;
+     GL_WRITE_ONLY_ARB = $88B9;
+     GL_READ_WRITE_ARB = $88BA;
+     GL_BUFFER_ACCESS_ARB = $88BB;
+     GL_BUFFER_MAPPED_ARB = $88BC;
+     GL_BUFFER_MAP_POINTER_ARB = $88BD;
+     GL_STREAM_DRAW_ARB = $88E0;
+     GL_STREAM_READ_ARB = $88E1;
+     GL_STREAM_COPY_ARB = $88E2;
+     GL_STATIC_DRAW_ARB = $88E4;
+     GL_STATIC_READ_ARB = $88E5;
+     GL_STATIC_COPY_ARB = $88E6;
+     GL_DYNAMIC_DRAW_ARB = $88E8;
+     GL_DYNAMIC_READ_ARB = $88E9;
+     GL_DYNAMIC_COPY_ARB = $88EA;
+
+var
+     glBindBufferARB : procedure(target : GLenum; buffer: GLuint); extdecl;
+     glDeleteBuffersARB : procedure(n : GLsizei; buffers : PGLuint); extdecl;
+     glGenBuffersARB : procedure(n : GLsizei; buffers : PGLuint); extdecl;
+     glIsBufferARB : function (buffer : GLuint) :GLboolean; extdecl;
+     glBufferDataARB : procedure(target : GLenum; size:GLsizei; data:PGLvoid;usage: GLenum); extdecl;
+     glBufferSubDataARB : procedure(target : GLenum; offset :GLint; size : GLsizei; data: PGLvoid); extdecl;
+     glGetBufferSubDataARB : procedure(target : GLenum; offset :GLint; size : GLsizei; data: PGLvoid); extdecl;
+     glMapBufferARB : function (target :GLenum; access: GLenum) : PGLvoid; extdecl;
+     glUnmapBufferARB : function (target :GLenum) :GLboolean; extdecl;
+     glGetBufferParameterivARB:procedure(target:GLenum; pname:GLenum; params:PGLint); extdecl;
+     glGetBufferPointervARB : procedure(target: GLenum; pname:GLenum; params: PPGLvoid); extdecl;
+     function Load_GL_ARB_vertex_buffer_object : boolean;
 
 function Load_GL_ATI_text_fragment_shader: Boolean;
 
@@ -6520,6 +6568,40 @@ begin
 
 end;
 
+
+function load_GL_ARB_vertex_buffer_object : boolean;
+
+var extstring:string;
+
+begin
+  load_GL_ARB_vertex_buffer_object:=false;
+  extstring := String(PChar(glGetString(GL_EXTENSIONS)));
+  if glext_ExtensionSupported('GL_ARB_vertex_buffer_object',extstring) then
+    begin
+      glBindBufferARB := wglGetProcAddress('glBindBufferARB');
+      if not Assigned(glBindBufferARB) then Exit;
+      glDeleteBuffersARB := wglGetProcAddress('glDeleteBuffersARB');
+      if not Assigned(glDeleteBuffersARB) then Exit;
+      glGenBuffersARB := wglGetProcAddress('glGenBuffersARB');
+      if not Assigned(glGenBuffersARB) then Exit;
+      glIsBufferARB := wglGetProcAddress('glIsBufferARB');
+      if not Assigned(glIsBufferARB) then Exit;
+      glBufferDataARB := wglGetProcAddress('glBufferDataARB');
+      if not Assigned(glBufferDataARB) then Exit;
+      glGetBufferSubDataARB := wglGetProcAddress('glGetBufferSubDataARB');
+      if not Assigned(glGetBufferSubDataARB) then Exit;
+      glMapBufferARB := wglGetProcAddress('glMapBufferARB');
+      if not Assigned(glMapBufferARB) then Exit;
+      glUnmapBufferARB := wglGetProcAddress('glUnmapBufferARB');
+      if not Assigned(glMapBufferARB) then Exit;
+      glGetBufferParameterivARB := wglGetProcAddress('glGetBufferParameterivARB');
+      if not Assigned(glGetBufferParameterivARB) then Exit;
+      glGetBufferPointervARB := wglGetProcAddress('glGetBufferPointervARB');
+      if not Assigned(glGetBufferPointervARB) then Exit;
+    end;
+  load_GL_ARB_vertex_buffer_object:=true;
+end;
+
 {$IFDEF Win32}
 function Load_WGL_ARB_pixel_format: Boolean;
 var