From 68ca4e5cc31135b843af07ff213a94b9ddce64cf Mon Sep 17 00:00:00 2001 From: Jamie Nicol Date: Fri, 31 Jul 2026 10:47:58 +0100 Subject: [PATCH 1/2] Add bindings for ARB/KHR_base_instance --- build.rs | 2 ++ src/gl.rs | 27 +++++++++++++++++++++ src/gl_fns.rs | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ src/gles_fns.rs | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 153 insertions(+) diff --git a/build.rs b/build.rs index 12fd38e..33b8846 100644 --- a/build.rs +++ b/build.rs @@ -33,6 +33,7 @@ fn main() { "GL_KHR_blend_equation_advanced_coherent", "GL_KHR_blend_equation_advanced_coherent", "GL_ARB_shader_storage_buffer_object", + "GL_ARB_base_instance", ]; let gl_reg = Registry::new( Api::Gl, @@ -67,6 +68,7 @@ fn main() { "GL_KHR_blend_equation_advanced_coherent", "GL_ANGLE_copy_texture_3d", "GL_QCOM_tiled_rendering", + "GL_EXT_base_instance", ]; let gles_reg = Registry::new( Api::Gles2, diff --git a/src/gl.rs b/src/gl.rs index 6293d81..19fcf9f 100644 --- a/src/gl.rs +++ b/src/gl.rs @@ -764,6 +764,33 @@ declare_gl_apis! { fn start_tiling_qcom(&self, x: GLuint, y: GLuint, width: GLuint, height: GLuint, preserve_mask: GLbitfield); fn end_tiling_qcom(&self, preserve_mask: GLbitfield); + + fn draw_arrays_instanced_base_instance(&self, + mode: GLenum, + first: GLint, + count: GLsizei, + instance_count: GLsizei, + base_instance: GLuint + ); + + fn draw_elements_instanced_base_instance(&self, + mode: GLenum, + count: GLsizei, + element_type: GLenum, + indices_offset: GLuint, + instance_count: GLsizei, + base_instance: GLuint + ); + + fn draw_elements_instanced_base_vertex_base_instance(&self, + mode: GLenum, + count: GLsizei, + element_type: GLenum, + indices_offset: GLuint, + instance_count: GLsizei, + base_vertex: GLint, + base_instance: GLuint + ); } //#[deprecated(since = "0.6.11", note = "use ErrorReactingGl instead")] diff --git a/src/gl_fns.rs b/src/gl_fns.rs index 19a5db3..015b069 100644 --- a/src/gl_fns.rs +++ b/src/gl_fns.rs @@ -2294,4 +2294,66 @@ impl Gl for GlFns { fn end_tiling_qcom(&self, _preserve_mask: GLbitfield) { } + + fn draw_arrays_instanced_base_instance( + &self, + mode: GLenum, + first: GLint, + count: GLsizei, + instance_count: GLsizei, + base_instance: GLuint + ) { + unsafe { + self.ffi_gl_.DrawArraysInstancedBaseInstance( + mode, + first, + count, + instance_count, + base_instance + ); + } + } + + fn draw_elements_instanced_base_instance( + &self, + mode: GLenum, + count: GLsizei, + element_type: GLenum, + indices_offset: GLuint, + instance_count: GLsizei, + base_instance: GLuint + ) { + unsafe { + self.ffi_gl_.DrawElementsInstancedBaseInstance( + mode, + count, + element_type, + indices_offset as *const GLvoid, + instance_count, + base_instance + ); + } + } + + fn draw_elements_instanced_base_vertex_base_instance( + &self, mode: GLenum, + count: GLsizei, + element_type: GLenum, + indices_offset: GLuint, + instance_count: GLsizei, + base_vertex: GLint, + base_instance: GLuint + ) { + unsafe { + self.ffi_gl_.DrawElementsInstancedBaseVertexBaseInstance( + mode, + count, + element_type, + indices_offset as *const GLvoid, + instance_count, + base_vertex, + base_instance + ); + } + } } diff --git a/src/gles_fns.rs b/src/gles_fns.rs index b06c17c..4a13522 100644 --- a/src/gles_fns.rs +++ b/src/gles_fns.rs @@ -2302,4 +2302,66 @@ impl Gl for GlesFns { self.ffi_gl_.EndTilingQCOM(preserve_mask); } } + + fn draw_arrays_instanced_base_instance( + &self, + mode: GLenum, + first: GLint, + count: GLsizei, + instance_count: GLsizei, + base_instance: GLuint + ) { + unsafe { + self.ffi_gl_.DrawArraysInstancedBaseInstanceEXT( + mode, + first, + count, + instance_count, + base_instance + ); + } + } + + fn draw_elements_instanced_base_instance( + &self, + mode: GLenum, + count: GLsizei, + element_type: GLenum, + indices_offset: GLuint, + instance_count: GLsizei, + base_instance: GLuint + ) { + unsafe { + self.ffi_gl_.DrawElementsInstancedBaseInstanceEXT( + mode, + count, + element_type, + indices_offset as *const GLvoid, + instance_count, + base_instance + ); + } + } + + fn draw_elements_instanced_base_vertex_base_instance( + &self, mode: GLenum, + count: GLsizei, + element_type: GLenum, + indices_offset: GLuint, + instance_count: GLsizei, + base_vertex: GLint, + base_instance: GLuint + ) { + unsafe { + self.ffi_gl_.DrawElementsInstancedBaseVertexBaseInstanceEXT( + mode, + count, + element_type, + indices_offset as *const GLvoid, + instance_count, + base_vertex, + base_instance + ); + } + } } From 2ed7f96360116e9c51e4623e18fa59f2868fb09b Mon Sep 17 00:00:00 2001 From: Jamie Nicol Date: Fri, 31 Jul 2026 10:50:19 +0100 Subject: [PATCH 2/2] Bump version to 0.16.0 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 08cc8b5..a5e8873 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gleam" -version = "0.15.1" +version = "0.16.0" authors = ["The Servo Project Developers"] description = "Generated OpenGL bindings and wrapper for Servo." documentation = "https://docs.rs/gleam"