1use glenum::{BufferBase, BufferKind};
3use rendering_context::WebGL2RenderingContext;
4use wasm_bindgen::prelude::*;
5
6impl WebGL2RenderingContext {
7 pub fn create_buffer(&self) -> WebGLRSBuffer {
9 WebGLRSBuffer {
10 context: self,
11 inner: self._create_buffer(),
12 }
13 }
14}
15
16#[derive(Clone)]
21pub struct WebGLRSBuffer<'ctx> {
22 context: &'ctx WebGL2RenderingContext,
23 inner: WebGLBuffer,
24}
25
26impl<'ctx> WebGLRSBuffer<'ctx> {
27 pub fn delete(self) {
29 self.context._delete_buffer(self.inner);
30 }
31
32 pub fn is_valid(&self) -> bool {
34 self.context._is_buffer(&self.inner)
35 }
36
37 pub fn bind(&self, target: BufferKind) {
42 self.context._bind_buffer(target, &self.inner);
43 }
44
45 pub fn bind_base(&self, target: BufferBase, index: u32) {
51 self.context._bind_buffer_base(target, index, &self.inner);
52 }
53
54 pub fn bind_range(&self, target: BufferBase, index: u32, offset: u32, size: u32) {
62 self.context
63 ._bind_buffer_range(target, index, &self.inner, offset, size);
64 }
65}
66
67#[wasm_bindgen]
69#[derive(Clone, Copy)]
70extern "C" {
71 #[derive(Clone)]
72 type WebGLBuffer;
73 #[wasm_bindgen(method, js_name = createBuffer)]
75 fn _create_buffer(this: &WebGL2RenderingContext) -> WebGLBuffer;
76
77 #[wasm_bindgen(method, js_name = deleteBuffer)]
79 fn _delete_buffer(this: &WebGL2RenderingContext, buffer: WebGLBuffer);
80
81 #[wasm_bindgen(method, js_name = isBuffer)]
83 fn _is_buffer(this: &WebGL2RenderingContext, buffer: &WebGLBuffer) -> bool;
84
85 #[wasm_bindgen(method, js_name = bindBuffer)]
87 fn _bind_buffer(this: &WebGL2RenderingContext, target: BufferKind, buffer: &WebGLBuffer);
88
89 #[wasm_bindgen(method, js_name = bindBufferBase)]
91 fn _bind_buffer_base(
92 this: &WebGL2RenderingContext,
93 target: BufferBase,
94 index: u32,
95 buffer: &WebGLBuffer,
96 );
97
98 #[wasm_bindgen(method, js_name = bindBufferRange)]
100 fn _bind_buffer_range(
101 this: &WebGL2RenderingContext,
102 target: BufferBase,
103 index: u32,
104 buffer: &WebGLBuffer,
105 offset: u32,
106 size: u32,
107 );
108}