1use glenum::{Query, QueryParameter, QueryTarget};
3use rendering_context::WebGL2RenderingContext;
4use wasm_bindgen::prelude::*;
5
6impl WebGL2RenderingContext {
7 pub fn create_query(&self) -> WebGLRSQuery {
9 WebGLRSQuery {
10 context: self,
11 inner: self._create_query(),
12 }
13 }
14
15 pub fn query(&self, target: QueryTarget) -> WebGLRSQuery {
21 WebGLRSQuery {
22 context: self,
23 inner: self._get_query(target, Query::Current),
24 }
25 }
26}
27
28#[derive(Clone)]
29pub struct WebGLRSQuery<'ctx> {
30 context: &'ctx WebGL2RenderingContext,
31 inner: WebGLQuery,
32}
33
34impl<'ctx> WebGLRSQuery<'ctx> {
35 pub fn delete(self) {
37 self.context._delete_query(self.inner);
38 }
39
40 pub fn is_valid(&self) -> bool {
42 self.context._is_query(&self.inner)
43 }
44
45 pub fn begin(&self, target: QueryTarget) {
50 self.context._begin_query(target, &self.inner);
51 }
52
53 pub fn result_available(&self) -> bool {
55 self.context
56 ._get_query_parameter_bool(&self.inner, QueryParameter::ResultAvailable)
57 }
58
59 pub fn result(&self) -> u32 {
61 self.context
62 ._get_query_parameter_u32(&self.inner, QueryParameter::Result)
63 }
64}
65
66#[wasm_bindgen]
68#[derive(Clone, Copy)]
69extern "C" {
70 #[derive(Clone)]
71 type WebGLQuery;
72
73 #[wasm_bindgen(method, js_name = createQuery)]
75 fn _create_query(this: &WebGL2RenderingContext) -> WebGLQuery;
76
77 #[wasm_bindgen(method, js_name = deleteQuery)]
79 fn _delete_query(this: &WebGL2RenderingContext, query: WebGLQuery);
80
81 #[wasm_bindgen(method, js_name = isQuery)]
83 fn _is_query(this: &WebGL2RenderingContext, query: &WebGLQuery) -> bool;
84
85 #[wasm_bindgen(method, js_name = beginQuery)]
87 fn _begin_query(this: &WebGL2RenderingContext, target: QueryTarget, query: &WebGLQuery);
88
89 #[wasm_bindgen(method, js_name = getQuery)]
91 fn _get_query(this: &WebGL2RenderingContext, target: QueryTarget, pname: Query) -> WebGLQuery;
92
93 #[wasm_bindgen(method, js_name = getQueryParameter)]
95 fn _get_query_parameter_bool(
96 this: &WebGL2RenderingContext,
97 query: &WebGLQuery,
98 pname: QueryParameter,
99 ) -> bool;
100 #[wasm_bindgen(method, js_name = getQueryParameter)]
102 fn _get_query_parameter_u32(
103 this: &WebGL2RenderingContext,
104 query: &WebGLQuery,
105 pname: QueryParameter,
106 ) -> u32;
107}