Просмотр исходного кода

More corrections; Add `DrawArraysIndirectCommand` and `DrawElementsIndirectCommand` data structures

gingerBill 4 лет назад
Родитель
Сommit
1048553e78
2 измененных файлов с 67 добавлено и 86 удалено
  1. 30 24
      vendor/OpenGL/impl.odin
  2. 37 62
      vendor/OpenGL/wrappers.odin

+ 30 - 24
vendor/OpenGL/impl.odin

@@ -1195,6 +1195,21 @@ load_4_2 :: proc(set_proc_address: Set_Proc_Address_Type) {
 }
 
 // VERSION_4_3
+DrawArraysIndirectCommand :: struct {
+	count:         u32,
+	instanceCount: u32,
+	first:         u32,
+	baseInstance:  u32,
+}
+
+DrawElementsIndirectCommand :: struct {
+	count:         u32,
+	instanceCount: u32,
+	firstIndex:    u32,
+	baseVertex:    u32,
+	baseInstance:  u32,
+}
+
 impl_ClearBufferData:                 proc "c" (target: u32, internalformat: u32, format: u32, type: u32, data: rawptr);
 impl_ClearBufferSubData:              proc "c" (target: u32, internalformat: u32, offset: int, size: int, format: u32, type: u32, data: rawptr);
 impl_DispatchCompute:                 proc "c" (num_groups_x: u32, num_groups_y: u32, num_groups_z: u32);
@@ -1207,14 +1222,14 @@ impl_InvalidateTexSubImage:           proc "c" (texture: u32, level: i32, xoffse
 impl_InvalidateTexImage:              proc "c" (texture: u32, level: i32);
 impl_InvalidateBufferSubData:         proc "c" (buffer: u32, offset: int, length: int);
 impl_InvalidateBufferData:            proc "c" (buffer: u32);
-impl_InvalidateFramebuffer:           proc "c" (target: u32, numAttachments: i32, attachments: ^u32);
-impl_InvalidateSubFramebuffer:        proc "c" (target: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32);
-impl_MultiDrawArraysIndirect:         proc "c" (mode: u32, indirect: rawptr, drawcount: i32, stride: i32);
-impl_MultiDrawElementsIndirect:       proc "c" (mode: u32, type: u32, indirect: rawptr, drawcount: i32, stride: i32);
+impl_InvalidateFramebuffer:           proc "c" (target: u32, numAttachments: i32, attachments: [^]u32);
+impl_InvalidateSubFramebuffer:        proc "c" (target: u32, numAttachments: i32, attachments: [^]u32, x: i32, y: i32, width: i32, height: i32);
+impl_MultiDrawArraysIndirect:         proc "c" (mode: u32, indirect: [^]DrawArraysIndirectCommand, drawcount: i32, stride: i32);
+impl_MultiDrawElementsIndirect:       proc "c" (mode: u32, type: u32, indirect: [^]DrawElementsIndirectCommand, drawcount: i32, stride: i32);
 impl_GetProgramInterfaceiv:           proc "c" (program: u32, programInterface: u32, pname: u32, params: [^]i32);
 impl_GetProgramResourceIndex:         proc "c" (program: u32, programInterface: u32, name: cstring) -> u32;
 impl_GetProgramResourceName:          proc "c" (program: u32, programInterface: u32, index: u32, bufSize: i32, length: ^i32, name: [^]u8);
-impl_GetProgramResourceiv:            proc "c" (program: u32, programInterface: u32, index: u32, propCount: i32, props: ^u32, bufSize: i32, length: ^i32, params: [^]i32);
+impl_GetProgramResourceiv:            proc "c" (program: u32, programInterface: u32, index: u32, propCount: i32, props: [^]u32, bufSize: i32, length: ^i32, params: [^]i32);
 impl_GetProgramResourceLocation:      proc "c" (program: u32, programInterface: u32, name: cstring) -> i32;
 impl_GetProgramResourceLocationIndex: proc "c" (program: u32, programInterface: u32, name: cstring) -> i32;
 impl_ShaderStorageBlockBinding:       proc "c" (program: u32, storageBlockIndex: u32, storageBlockBinding: u32);
@@ -1337,10 +1352,10 @@ impl_NamedFramebufferParameteri:               proc "c" (framebuffer: u32, pname
 impl_NamedFramebufferTexture:                  proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32);
 impl_NamedFramebufferTextureLayer:             proc "c" (framebuffer: u32, attachment: u32, texture: u32, level: i32, layer: i32);
 impl_NamedFramebufferDrawBuffer:               proc "c" (framebuffer: u32, buf: u32);
-impl_NamedFramebufferDrawBuffers:              proc "c" (framebuffer: u32, n: i32, bufs: ^u32);
+impl_NamedFramebufferDrawBuffers:              proc "c" (framebuffer: u32, n: i32, bufs: [^]u32);
 impl_NamedFramebufferReadBuffer:               proc "c" (framebuffer: u32, src: u32);
-impl_InvalidateNamedFramebufferData:           proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32);
-impl_InvalidateNamedFramebufferSubData:        proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32);
+impl_InvalidateNamedFramebufferData:           proc "c" (framebuffer: u32, numAttachments: i32, attachments: [^]u32);
+impl_InvalidateNamedFramebufferSubData:        proc "c" (framebuffer: u32, numAttachments: i32, attachments: [^]u32, x: i32, y: i32, width: i32, height: i32);
 impl_ClearNamedFramebufferiv:                  proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^i32);
 impl_ClearNamedFramebufferuiv:                 proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^u32);
 impl_ClearNamedFramebufferfv:                  proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^f32);
@@ -1431,16 +1446,8 @@ impl_GetnSeparableFilter:                      proc "c" (target: u32, format: u3
 impl_GetnHistogram:                            proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr);
 impl_GetnMinmax:                               proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr);
 impl_TextureBarrier:                           proc "c" ();
-impl_glGetUnsignedBytevEXT:                    proc "c" (pname: u32, data: ^byte);
-impl_TexPageCommitmentARB:                     proc "c"(target: u32,
-														level: i32,
-														xoffset: i32,
-														yoffset: i32,
-														zoffset: i32,
-														width: i32,
-														height: i32,
-														depth: i32,
-														commit: bool);
+impl_GetUnsignedBytevEXT:                    proc "c" (pname: u32, data: ^byte);
+impl_TexPageCommitmentARB:                     proc "c" (target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, commit: bool);
 
 load_4_5 :: proc(set_proc_address: Set_Proc_Address_Type) {
 	set_proc_address(&impl_ClipControl,                              "glClipControl");
@@ -1565,15 +1572,14 @@ load_4_5 :: proc(set_proc_address: Set_Proc_Address_Type) {
 	set_proc_address(&impl_GetnHistogram,                            "glGetnHistogram");
 	set_proc_address(&impl_GetnMinmax,                               "glGetnMinmax");
 	set_proc_address(&impl_TextureBarrier,                           "glTextureBarrier");
-	set_proc_address(&impl_glGetUnsignedBytevEXT,                    "glGetUnsignedBytevEXT");
-	set_proc_address(&impl_TexPageCommitmentARB,                    "glTexPageCommitmentARB");
+	set_proc_address(&impl_GetUnsignedBytevEXT,                      "glGetUnsignedBytevEXT");
+	set_proc_address(&impl_TexPageCommitmentARB,                     "glTexPageCommitmentARB");
 }
 
-
 // VERSION_4_6
-impl_SpecializeShader:               proc "c" (shader: u32, pEntryPoint: ^u8, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32);
-impl_MultiDrawArraysIndirectCount:   proc "c" (mode: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32);
-impl_MultiDrawElementsIndirectCount: proc "c" (mode: i32, type: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32);
+impl_SpecializeShader:               proc "c" (shader: u32, pEntryPoint: cstring, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32);
+impl_MultiDrawArraysIndirectCount:   proc "c" (mode: i32, indirect: [^]DrawArraysIndirectCommand, drawcount: int, maxdrawcount, stride: i32);
+impl_MultiDrawElementsIndirectCount: proc "c" (mode: i32, type: i32, indirect: [^]DrawElementsIndirectCommand, drawcount: int, maxdrawcount, stride: i32);
 impl_PolygonOffsetClamp:             proc "c" (factor, units, clamp: f32);
 
 load_4_6 :: proc(set_proc_address: Set_Proc_Address_Type) {

+ 37 - 62
vendor/OpenGL/wrappers.odin

@@ -565,10 +565,10 @@ when !ODIN_DEBUG {
 	InvalidateTexImage              :: #force_inline proc "c" (texture: u32, level: i32)                                                                                                                                                                                 {        impl_InvalidateTexImage(texture, level);                                                                                                                          }
 	InvalidateBufferSubData         :: #force_inline proc "c" (buffer: u32, offset: int, length: int)                                                                                                                                                                    {        impl_InvalidateBufferSubData(buffer, offset, length);                                                                                                             }
 	InvalidateBufferData            :: #force_inline proc "c" (buffer: u32)                                                                                                                                                                                              {        impl_InvalidateBufferData(buffer);                                                                                                                                }
-	InvalidateFramebuffer           :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32)                                                                                                                                                      {        impl_InvalidateFramebuffer(target, numAttachments, attachments);                                                                                                  }
-	InvalidateSubFramebuffer        :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32)                                                                                                             {        impl_InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);                                                                          }
-	MultiDrawArraysIndirect         :: #force_inline proc "c" (mode: u32, indirect: rawptr, drawcount: i32, stride: i32)                                                                                                                                                 {        impl_MultiDrawArraysIndirect(mode, indirect, drawcount, stride);                                                                                                  }
-	MultiDrawElementsIndirect       :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr, drawcount: i32, stride: i32)                                                                                                                                      {        impl_MultiDrawElementsIndirect(mode, type, indirect, drawcount, stride);                                                                                         }
+	InvalidateFramebuffer           :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: [^]u32)                                                                                                                                                    {        impl_InvalidateFramebuffer(target, numAttachments, attachments);                                                                                                  }
+	InvalidateSubFramebuffer        :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: [^]u32, x: i32, y: i32, width: i32, height: i32)                                                                                                           {        impl_InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);                                                                          }
+	MultiDrawArraysIndirect         :: #force_inline proc "c" (mode: u32, indirect: [^]DrawArraysIndirectCommand, drawcount: i32, stride: i32)                                                                                                                           {        impl_MultiDrawArraysIndirect(mode, indirect, drawcount, stride);                                                                                                  }
+	MultiDrawElementsIndirect       :: #force_inline proc "c" (mode: u32, type: u32, indirect: [^]DrawElementsIndirectCommand, drawcount: i32, stride: i32)                                                                                                              {        impl_MultiDrawElementsIndirect(mode, type, indirect, drawcount, stride);                                                                                         }
 	GetProgramInterfaceiv           :: #force_inline proc "c" (program: u32, programInterface: u32, pname: u32, params: [^]i32)                                                                                                                                          {        impl_GetProgramInterfaceiv(program, programInterface, pname, params);                                                                                             }
 	GetProgramResourceIndex         :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring) -> u32                                                                                                                                                { ret := impl_GetProgramResourceIndex(program, programInterface, name) ;                                                                                       return ret; }
 	GetProgramResourceName          :: #force_inline proc "c" (program: u32, programInterface: u32, index: u32, bufSize: i32, length: ^i32, name: [^]u8)                                                                                                                 {        impl_GetProgramResourceName(program, programInterface, index, bufSize, length, name);                                                                             }
@@ -598,15 +598,15 @@ when !ODIN_DEBUG {
 	GetObjectPtrLabel               :: #force_inline proc "c" (ptr: rawptr, bufSize: i32, length: ^i32, label: [^]u8)                                                                                                                                                    {        impl_GetObjectPtrLabel(ptr, bufSize, length, label);                                                                                                              }
 
 	// VERSION_4_4
-	BufferStorage     :: #force_inline proc "c" (target: u32, size: int, data: rawptr, flags: u32)                                                                                              { impl_BufferStorage(target, size, data, flags);                                                               }
+	BufferStorage     :: #force_inline proc "c" (target: u32, size: int, data: rawptr, flags: u32)                                                                                              { impl_BufferStorage(target, size, data, flags);                                                              }
 	ClearTexImage     :: #force_inline proc "c" (texture: u32, level: i32, format: u32, type: u32, data: rawptr)                                                                                { impl_ClearTexImage(texture, level, format, type, data);                                                     }
 	ClearTexSubImage  :: #force_inline proc "c" (texture: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, format: u32, type: u32, data: rawptr) { impl_ClearTexSubImage(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type, data); }
-	BindBuffersBase   :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32)                                                                                          { impl_BindBuffersBase(target, first, count, buffers);                                                         }
-	BindBuffersRange  :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, sizes: [^]int)                                                      { impl_BindBuffersRange(target, first, count, buffers, offsets, sizes);                                        }
-	BindTextures      :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32)                                                                                                      { impl_BindTextures(first, count, textures);                                                                   }
-	BindSamplers      :: #force_inline proc "c" (first: u32, count: i32, samplers: [^]u32)                                                                                                      { impl_BindSamplers(first, count, samplers);                                                                   }
-	BindImageTextures :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32)                                                                                                      { impl_BindImageTextures(first, count, textures);                                                              }
-	BindVertexBuffers :: #force_inline proc "c" (first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32)                                                                 { impl_BindVertexBuffers(first, count, buffers, offsets, strides);                                             }
+	BindBuffersBase   :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32)                                                                                          { impl_BindBuffersBase(target, first, count, buffers);                                                        }
+	BindBuffersRange  :: #force_inline proc "c" (target: u32, first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, sizes: [^]int)                                                      { impl_BindBuffersRange(target, first, count, buffers, offsets, sizes);                                       }
+	BindTextures      :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32)                                                                                                      { impl_BindTextures(first, count, textures);                                                                  }
+	BindSamplers      :: #force_inline proc "c" (first: u32, count: i32, samplers: [^]u32)                                                                                                      { impl_BindSamplers(first, count, samplers);                                                                  }
+	BindImageTextures :: #force_inline proc "c" (first: u32, count: i32, textures: [^]u32)                                                                                                      { impl_BindImageTextures(first, count, textures);                                                             }
+	BindVertexBuffers :: #force_inline proc "c" (first: u32, count: i32, buffers: [^]u32, offsets: [^]uintptr, strides: [^]i32)                                                                 { impl_BindVertexBuffers(first, count, buffers, offsets, strides);                                            }
 
 	// VERSION_4_5
 	ClipControl                              :: #force_inline proc "c" (origin: u32, depth: u32)                                                                                                                                            {        impl_ClipControl(origin, depth);                                                                                                               }
@@ -639,8 +639,8 @@ when !ODIN_DEBUG {
 	NamedFramebufferDrawBuffer               :: #force_inline proc "c" (framebuffer: u32, buf: u32)                                                                                                                                         {        impl_NamedFramebufferDrawBuffer(framebuffer, buf);                                                                                             }
 	NamedFramebufferDrawBuffers              :: #force_inline proc "c" (framebuffer: u32, n: i32, bufs: [^]u32)                                                                                                                             {        impl_NamedFramebufferDrawBuffers(framebuffer, n, bufs);                                                                                        }
 	NamedFramebufferReadBuffer               :: #force_inline proc "c" (framebuffer: u32, src: u32)                                                                                                                                         {        impl_NamedFramebufferReadBuffer(framebuffer, src);                                                                                             }
-	InvalidateNamedFramebufferData           :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32)                                                                                                           {        impl_InvalidateNamedFramebufferData(framebuffer, numAttachments, attachments);                                                                 }
-	InvalidateNamedFramebufferSubData        :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32)                                                                  {        impl_InvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height);                                         }
+	InvalidateNamedFramebufferData           :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: [^]u32)                                                                                                           {        impl_InvalidateNamedFramebufferData(framebuffer, numAttachments, attachments);                                                                 }
+	InvalidateNamedFramebufferSubData        :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: [^]u32, x: i32, y: i32, width: i32, height: i32)                                                                  {        impl_InvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height);                                         }
 	ClearNamedFramebufferiv                  :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^i32)                                                                                                        {        impl_ClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value);                                                                          }
 	ClearNamedFramebufferuiv                 :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^u32)                                                                                                        {        impl_ClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value);                                                                         }
 	ClearNamedFramebufferfv                  :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^f32)                                                                                                        {        impl_ClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value);                                                                          }
@@ -731,26 +731,14 @@ when !ODIN_DEBUG {
 	GetnHistogram                            :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr)                                                                                       {        impl_GetnHistogram(target, reset, format, type, bufSize, values);                                                                             }
 	GetnMinmax                               :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr)                                                                                       {        impl_GetnMinmax(target, reset, format, type, bufSize, values);                                                                                }
 	TextureBarrier                           :: #force_inline proc "c" ()                                                                                                                                                                   {        impl_TextureBarrier();                                                                                                                         }
-	GetUnsignedBytevEXT                      :: #force_inline proc "c" (pname: u32, data: ^byte)                                                                                                                                            {        impl_glGetUnsignedBytevEXT(pname, data);                                                                                                       }
-	TexPageCommitmentARB                     :: #force_inline proc "c"(
-		target: u32,
-		level: i32,
-		xoffset: i32,
-		yoffset: i32,
-		zoffset: i32,
-		width: i32,
-		height: i32,
-		depth: i32,
-		commit: bool,
-	) {
-		impl_TexPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, commit);
-	}
+	GetUnsignedBytevEXT                      :: #force_inline proc "c" (pname: u32, data: ^byte)                                                                                                                                            {        impl_GetUnsignedBytevEXT(pname, data);                                                                                                         }
+	TexPageCommitmentARB                     :: #force_inline proc "c"(target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, commit: bool)                                                {        impl_TexPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, commit);                                             }
 
 	// VERSION_4_6
-	SpecializeShader               :: #force_inline proc "c" (shader: u32, pEntryPoint: ^u8, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32) { impl_SpecializeShader(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); }
-	MultiDrawArraysIndirectCount   :: #force_inline proc "c" (mode: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32)                                     { impl_MultiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride);                     }
-	MultiDrawElementsIndirectCount :: #force_inline proc "c" (mode: i32, type: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32)                          { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride);            }
-	PolygonOffsetClamp             :: #force_inline proc "c" (factor, units, clamp: f32)                                                                                  { impl_PolygonOffsetClamp(factor, units, clamp);                                                          }
+	SpecializeShader               :: #force_inline proc "c" (shader: u32, pEntryPoint: cstring, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32) { impl_SpecializeShader(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); }
+	MultiDrawArraysIndirectCount   :: #force_inline proc "c" (mode: i32, indirect: [^]DrawArraysIndirectCommand, drawcount: int, maxdrawcount, stride: i32)                   { impl_MultiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride);                     }
+	MultiDrawElementsIndirectCount :: #force_inline proc "c" (mode: i32, type: i32, indirect: [^]DrawElementsIndirectCommand, drawcount: int, maxdrawcount, stride: i32)      { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride);             }
+	PolygonOffsetClamp             :: #force_inline proc "c" (factor, units, clamp: f32)                                                                                      { impl_PolygonOffsetClamp(factor, units, clamp);                                                          }
 } else {
 	import "core:runtime"
 	import "core:fmt"
@@ -1377,10 +1365,10 @@ when !ODIN_DEBUG {
 	InvalidateTexImage              :: #force_inline proc "c" (texture: u32, level: i32, loc := #caller_location)                                                                                                                                                                                 {        impl_InvalidateTexImage(texture, level);                                                                                                              debug_helper(loc, 0, texture, level);                                                                                                                            }
 	InvalidateBufferSubData         :: #force_inline proc "c" (buffer: u32, offset: int, length: int, loc := #caller_location)                                                                                                                                                                    {        impl_InvalidateBufferSubData(buffer, offset, length);                                                                                                 debug_helper(loc, 0, buffer, offset, length);                                                                                                                    }
 	InvalidateBufferData            :: #force_inline proc "c" (buffer: u32, loc := #caller_location)                                                                                                                                                                                              {        impl_InvalidateBufferData(buffer);                                                                                                                    debug_helper(loc, 0, buffer);                                                                                                                                    }
-	InvalidateFramebuffer           :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32, loc := #caller_location)                                                                                                                                                      {        impl_InvalidateFramebuffer(target, numAttachments, attachments);                                                                                      debug_helper(loc, 0, target, numAttachments, attachments);                                                                                                       }
-	InvalidateSubFramebuffer        :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location)                                                                                                             {        impl_InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);                                                              debug_helper(loc, 0, target, numAttachments, attachments, x, y, width, height);                                                                                  }
-	MultiDrawArraysIndirect         :: #force_inline proc "c" (mode: u32, indirect: rawptr, drawcount: i32, stride: i32, loc := #caller_location)                                                                                                                                                 {        impl_MultiDrawArraysIndirect(mode, indirect, drawcount, stride);                                                                                      debug_helper(loc, 0, mode, indirect, drawcount, stride);                                                                                                         }
-	MultiDrawElementsIndirect       :: #force_inline proc "c" (mode: u32, type: u32, indirect: rawptr, drawcount: i32, stride: i32, loc := #caller_location)                                                                                                                                      {        impl_MultiDrawElementsIndirect(mode, type, indirect, drawcount, stride);                                                                             debug_helper(loc, 0, mode, type, indirect, drawcount, stride);                                                                                                  }
+	InvalidateFramebuffer           :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: [^]u32, loc := #caller_location)                                                                                                                                                    {        impl_InvalidateFramebuffer(target, numAttachments, attachments);                                                                                      debug_helper(loc, 0, target, numAttachments, attachments);                                                                                                       }
+	InvalidateSubFramebuffer        :: #force_inline proc "c" (target: u32, numAttachments: i32, attachments: [^]u32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location)                                                                                                           {        impl_InvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height);                                                              debug_helper(loc, 0, target, numAttachments, attachments, x, y, width, height);                                                                                  }
+	MultiDrawArraysIndirect         :: #force_inline proc "c" (mode: u32, indirect: [^]DrawArraysIndirectCommand, drawcount: i32, stride: i32, loc := #caller_location)                                                                                                                           {        impl_MultiDrawArraysIndirect(mode, indirect, drawcount, stride);                                                                                      debug_helper(loc, 0, mode, indirect, drawcount, stride);                                                                                                         }
+	MultiDrawElementsIndirect       :: #force_inline proc "c" (mode: u32, type: u32, indirect: [^]DrawElementsIndirectCommand, drawcount: i32, stride: i32, loc := #caller_location)                                                                                                              {        impl_MultiDrawElementsIndirect(mode, type, indirect, drawcount, stride);                                                                             debug_helper(loc, 0, mode, type, indirect, drawcount, stride);                                                                                                  }
 	GetProgramInterfaceiv           :: #force_inline proc "c" (program: u32, programInterface: u32, pname: u32, params: [^]i32, loc := #caller_location)                                                                                                                                          {        impl_GetProgramInterfaceiv(program, programInterface, pname, params);                                                                                 debug_helper(loc, 0, program, programInterface, pname, params);                                                                                                  }
 	GetProgramResourceIndex         :: #force_inline proc "c" (program: u32, programInterface: u32, name: cstring, loc := #caller_location) -> u32                                                                                                                                                { ret := impl_GetProgramResourceIndex(program, programInterface, name);                                                                                        debug_helper(loc, 1, ret, program, programInterface, name);                                                                                          return ret; }
 	GetProgramResourceName          :: #force_inline proc "c" (program: u32, programInterface: u32, index: u32, bufSize: i32, length: ^i32, name: [^]u8, loc := #caller_location)                                                                                                                 {        impl_GetProgramResourceName(program, programInterface, index, bufSize, length, name);                                                                 debug_helper(loc, 0, program, programInterface, index, bufSize, length, name);                                                                                   }
@@ -1451,8 +1439,8 @@ when !ODIN_DEBUG {
 	NamedFramebufferDrawBuffer               :: #force_inline proc "c" (framebuffer: u32, buf: u32, loc := #caller_location)                                                                                                                                         {        impl_NamedFramebufferDrawBuffer(framebuffer, buf);                                                                                 debug_helper(loc, 0, framebuffer, buf);                                                                                                   }
 	NamedFramebufferDrawBuffers              :: #force_inline proc "c" (framebuffer: u32, n: i32, bufs: [^]u32, loc := #caller_location)                                                                                                                             {        impl_NamedFramebufferDrawBuffers(framebuffer, n, bufs);                                                                            debug_helper(loc, 0, framebuffer, n, bufs);                                                                                               }
 	NamedFramebufferReadBuffer               :: #force_inline proc "c" (framebuffer: u32, src: u32, loc := #caller_location)                                                                                                                                         {        impl_NamedFramebufferReadBuffer(framebuffer, src);                                                                                 debug_helper(loc, 0, framebuffer, src);                                                                                                   }
-	InvalidateNamedFramebufferData           :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, loc := #caller_location)                                                                                                           {        impl_InvalidateNamedFramebufferData(framebuffer, numAttachments, attachments);                                                     debug_helper(loc, 0, framebuffer, numAttachments, attachments);                                                                           }
-	InvalidateNamedFramebufferSubData        :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: ^u32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location)                                                                  {        impl_InvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height);                             debug_helper(loc, 0, framebuffer, numAttachments, attachments, x, y, width, height);                                                      }
+	InvalidateNamedFramebufferData           :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: [^]u32, loc := #caller_location)                                                                                                           {        impl_InvalidateNamedFramebufferData(framebuffer, numAttachments, attachments);                                                     debug_helper(loc, 0, framebuffer, numAttachments, attachments);                                                                           }
+	InvalidateNamedFramebufferSubData        :: #force_inline proc "c" (framebuffer: u32, numAttachments: i32, attachments: [^]u32, x: i32, y: i32, width: i32, height: i32, loc := #caller_location)                                                                  {        impl_InvalidateNamedFramebufferSubData(framebuffer, numAttachments, attachments, x, y, width, height);                             debug_helper(loc, 0, framebuffer, numAttachments, attachments, x, y, width, height);                                                      }
 	ClearNamedFramebufferiv                  :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^i32, loc := #caller_location)                                                                                                        {        impl_ClearNamedFramebufferiv(framebuffer, buffer, drawbuffer, value);                                                              debug_helper(loc, 0, framebuffer, buffer, drawbuffer, value);                                                                             }
 	ClearNamedFramebufferuiv                 :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^u32, loc := #caller_location)                                                                                                        {        impl_ClearNamedFramebufferuiv(framebuffer, buffer, drawbuffer, value);                                                             debug_helper(loc, 0, framebuffer, buffer, drawbuffer, value);                                                                             }
 	ClearNamedFramebufferfv                  :: #force_inline proc "c" (framebuffer: u32, buffer: u32, drawbuffer: i32, value: ^f32, loc := #caller_location)                                                                                                        {        impl_ClearNamedFramebufferfv(framebuffer, buffer, drawbuffer, value);                                                              debug_helper(loc, 0, framebuffer, buffer, drawbuffer, value);                                                                             }
@@ -1537,31 +1525,18 @@ when !ODIN_DEBUG {
 	GetnPixelMapfv                           :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]f32, loc := #caller_location)                                                                                                                            {        impl_GetnPixelMapfv(map_, bufSize, values);                                                                                        debug_helper(loc, 0, map_, bufSize, values);                                                                                              }
 	GetnPixelMapuiv                          :: #force_inline proc "c" (map_: u32, bufSize: i32, values: [^]u32, loc := #caller_location)                                                                                                                            {        impl_GetnPixelMapuiv(map_, bufSize, values);                                                                                       debug_helper(loc, 0, map_, bufSize, values);                                                                                              }
 	GetnPolygonStipple                       :: #force_inline proc "c" (bufSize: i32, pattern: ^u8, loc := #caller_location)                                                                                                                                         {        impl_GetnPolygonStipple(bufSize, pattern);                                                                                         debug_helper(loc, 0, bufSize, pattern);                                                                                                   }
-	GetnColorTable                           :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, table: rawptr, loc := #caller_location)                                                                                                   {        impl_GetnColorTable(target, format, type, bufSize, table);                                                                        debug_helper(loc, 0, target, format, type, bufSize, table);                                                                              }
-	GetnConvolutionFilter                    :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, image: rawptr, loc := #caller_location)                                                                                                   {        impl_GetnConvolutionFilter(target, format, type, bufSize, image);                                                                 debug_helper(loc, 0, target, format, type, bufSize, image);                                                                              }
-	GetnSeparableFilter                      :: #force_inline proc "c" (target: u32, format: u32, type: u32, rowBufSize: i32, row: rawptr, columnBufSize: i32, column: rawptr, span: rawptr, loc := #caller_location)                                                {        impl_GetnSeparableFilter(target, format, type, rowBufSize, row, columnBufSize, column, span);                                     debug_helper(loc, 0, target, format, type, rowBufSize, row, columnBufSize, column, span);                                                }
-	GetnHistogram                            :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr, loc := #caller_location)                                                                                       {        impl_GetnHistogram(target, reset, format, type, bufSize, values);                                                                 debug_helper(loc, 0, target, reset, format, type, bufSize, values);                                                                      }
-	GetnMinmax                               :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr, loc := #caller_location)                                                                                       {        impl_GetnMinmax(target, reset, format, type, bufSize, values);                                                                    debug_helper(loc, 0, target, reset, format, type, bufSize, values);                                                                      }
+	GetnColorTable                           :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, table: rawptr, loc := #caller_location)                                                                                                   {        impl_GetnColorTable(target, format, type, bufSize, table);                                                                        debug_helper(loc, 0, target, format, type, bufSize, table);                                                                                }
+	GetnConvolutionFilter                    :: #force_inline proc "c" (target: u32, format: u32, type: u32, bufSize: i32, image: rawptr, loc := #caller_location)                                                                                                   {        impl_GetnConvolutionFilter(target, format, type, bufSize, image);                                                                 debug_helper(loc, 0, target, format, type, bufSize, image);                                                                                }
+	GetnSeparableFilter                      :: #force_inline proc "c" (target: u32, format: u32, type: u32, rowBufSize: i32, row: rawptr, columnBufSize: i32, column: rawptr, span: rawptr, loc := #caller_location)                                                {        impl_GetnSeparableFilter(target, format, type, rowBufSize, row, columnBufSize, column, span);                                     debug_helper(loc, 0, target, format, type, rowBufSize, row, columnBufSize, column, span);                                                  }
+	GetnHistogram                            :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr, loc := #caller_location)                                                                                       {        impl_GetnHistogram(target, reset, format, type, bufSize, values);                                                                 debug_helper(loc, 0, target, reset, format, type, bufSize, values);                                                                        }
+	GetnMinmax                               :: #force_inline proc "c" (target: u32, reset: u8, format: u32, type: u32, bufSize: i32, values: rawptr, loc := #caller_location)                                                                                       {        impl_GetnMinmax(target, reset, format, type, bufSize, values);                                                                    debug_helper(loc, 0, target, reset, format, type, bufSize, values);                                                                        }
 	TextureBarrier                           :: #force_inline proc "c" (loc := #caller_location)                                                                                                                                                                     {        impl_TextureBarrier();                                                                                                             debug_helper(loc, 0);                                                                                                                     }
-	GetUnsignedBytevEXT                      :: #force_inline proc "c" (pname: u32, data: ^byte, loc := #caller_location)                                                                                                                                            {        impl_glGetUnsignedBytevEXT(pname, data);                                                                                           debug_helper(loc, 0, pname, data);                                                                                                                     }
-	TexPageCommitmentARB                     :: #force_inline proc "c"(
-		target: u32,
-		level: i32,
-		xoffset: i32,
-		yoffset: i32,
-		zoffset: i32,
-		width: i32,
-		height: i32,
-		depth: i32,
-		commit: bool,
-		loc := #caller_location,
-	) {
-		impl_TexPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, commit);
-		debug_helper(loc, 0, target, level, xoffset, yoffset, zoffset, width, height, depth, commit);
-	}
+	GetUnsignedBytevEXT                      :: #force_inline proc "c" (pname: u32, data: ^byte, loc := #caller_location)                                                                                                                                            {        impl_GetUnsignedBytevEXT(pname, data);                                                                                             debug_helper(loc, 0, pname, data);                                                                                                        }
+	TexPageCommitmentARB                     :: #force_inline proc "c"(target: u32, level: i32, xoffset: i32, yoffset: i32, zoffset: i32, width: i32, height: i32, depth: i32, commit: bool, loc := #caller_location) { impl_TexPageCommitmentARB(target, level, xoffset, yoffset, zoffset, width, height, depth, commit); debug_helper(loc, 0, target, level, xoffset, yoffset, zoffset, width, height, depth, commit); }
+	
 	// VERSION_4_6
-	SpecializeShader               :: #force_inline proc "c" (shader: u32, pEntryPoint: ^u8, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32, loc := #caller_location) { impl_SpecializeShader(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); debug_helper(loc, 0, shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); }
-	MultiDrawArraysIndirectCount   :: #force_inline proc "c" (mode: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32, loc := #caller_location)                                     { impl_MultiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride);                     debug_helper(loc, 0, mode, indirect, drawcount, maxdrawcount, stride);                                 }
-	MultiDrawElementsIndirectCount :: #force_inline proc "c" (mode: i32, type: i32, indirect: rawptr, drawcount: int, maxdrawcount, stride: i32, loc := #caller_location)                          { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride);            debug_helper(loc, 0, mode, type, indirect, drawcount, maxdrawcount, stride);                          }
-	PolygonOffsetClamp             :: #force_inline proc "c" (factor, units, clamp: f32, loc := #caller_location)                                                                                  { impl_PolygonOffsetClamp(factor, units, clamp);                                                          debug_helper(loc, 0, factor, units, clamp);                                                            }
+	SpecializeShader               :: #force_inline proc "c" (shader: u32, pEntryPoint: cstring, numSpecializationConstants: u32, pConstantIndex: ^u32, pConstantValue: ^u32, loc := #caller_location) { impl_SpecializeShader(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); debug_helper(loc, 0, shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue); }
+	MultiDrawArraysIndirectCount   :: #force_inline proc "c" (mode: i32, indirect: [^]DrawArraysIndirectCommand, drawcount: int, maxdrawcount, stride: i32, loc := #caller_location)                   { impl_MultiDrawArraysIndirectCount(mode, indirect, drawcount, maxdrawcount, stride);                     debug_helper(loc, 0, mode, indirect, drawcount, maxdrawcount, stride);                                 }
+	MultiDrawElementsIndirectCount :: #force_inline proc "c" (mode: i32, type: i32, indirect: [^]DrawElementsIndirectCommand, drawcount: int, maxdrawcount, stride: i32, loc := #caller_location)      { impl_MultiDrawElementsIndirectCount(mode, type, indirect, drawcount, maxdrawcount, stride);             debug_helper(loc, 0, mode, type, indirect, drawcount, maxdrawcount, stride);                           }
+	PolygonOffsetClamp             :: #force_inline proc "c" (factor, units, clamp: f32, loc := #caller_location)                                                                                      { impl_PolygonOffsetClamp(factor, units, clamp);                                                          debug_helper(loc, 0, factor, units, clamp);                                                            }
 }