diff --git a/src/s2/renderer.ml b/src/s2/renderer.ml index 6702fa7..dca514a 100644 --- a/src/s2/renderer.ml +++ b/src/s2/renderer.ml @@ -155,24 +155,20 @@ let set_mat2a : mat2a set_fn = type geometry = { vao : int; draw_mode : Gl.enum; - indices : [`count of int | `elems of int]; + indices : [`range of int * int (* | `elems of int*)]; } let make_geometry ~draw_mode - ~index + ~count vertex_buffers = let vao = Gl.gen_vertex_arrays 1 Gl._i32; Int32.to_int Gl._i32.{0} in Gl.bind_vertex_array vao; - let indices = match index with - | `count n -> - Gl.bind_buffer Gl.element_array_buffer 0; - `count n - | `elems ibuf -> - Gl.bind_buffer Gl.element_array_buffer ibuf.bo; - (* divide by 2 since the buffer should contain int16_unsigned *) - `elems (buffer_size_in_bytes ibuf / 2) + let indices = + Gl.bind_buffer Gl.element_array_buffer 0; + `range (0, count) + (* TODO: index buffer (useful for drawing rect borders) *) in List.iter bind_vertex_buffer vertex_buffers; { @@ -184,12 +180,11 @@ let make_geometry let draw_geometry ?(instances = 1) { vao; draw_mode; indices } = Gl.bind_vertex_array vao; match indices with - | `count n -> - Gl.draw_arrays_instanced draw_mode 0 n instances - | `elems n -> - let offset = `Offset 0 in - let type_ = Gl.unsigned_short in - Gl.draw_elements_instanced draw_mode n type_ offset instances + | `range (ofs, len) -> + Gl.draw_arrays_instanced draw_mode ofs len instances + +(* | `elems n -> *) +(* Gl.draw_elements_instanced draw_mode count type_ offset instances *) (* Texture *) @@ -286,7 +281,7 @@ let make ~(wnd : Sdl.window) : t = ] ] ~draw_mode:Gl.triangle_strip - ~index:(`count 4) + ~count:4 in let sprite = load_shader ~name:"sprite" in @@ -298,7 +293,7 @@ let make ~(wnd : Sdl.window) : t = (* sprite_instances *) ] ~draw_mode:Gl.triangle_strip - ~index:(`count 4) + ~count:4 in {