use glenum::{Query, QueryParameter, QueryTarget};
use rendering_context::WebGL2RenderingContext;
use wasm_bindgen::prelude::*;
impl WebGL2RenderingContext {
pub fn create_query(&self) -> WebGLRSQuery {
WebGLRSQuery {
context: self,
inner: self._create_query(),
}
}
pub fn query(&self, target: QueryTarget) -> WebGLRSQuery {
WebGLRSQuery {
context: self,
inner: self._get_query(target, Query::Current),
}
}
}
#[derive(Clone)]
pub struct WebGLRSQuery<'ctx> {
context: &'ctx WebGL2RenderingContext,
inner: WebGLQuery,
}
impl<'ctx> WebGLRSQuery<'ctx> {
pub fn delete(self) {
self.context._delete_query(self.inner);
}
pub fn is_valid(&self) -> bool {
self.context._is_query(&self.inner)
}
pub fn begin(&self, target: QueryTarget) {
self.context._begin_query(target, &self.inner);
}
pub fn result_available(&self) -> bool {
self.context
._get_query_parameter_bool(&self.inner, QueryParameter::ResultAvailable)
}
pub fn result(&self) -> u32 {
self.context
._get_query_parameter_u32(&self.inner, QueryParameter::Result)
}
}
#[wasm_bindgen]
#[derive(Clone, Copy)]
extern "C" {
#[derive(Clone)]
type WebGLQuery;
#[wasm_bindgen(method, js_name = createQuery)]
fn _create_query(this: &WebGL2RenderingContext) -> WebGLQuery;
#[wasm_bindgen(method, js_name = deleteQuery)]
fn _delete_query(this: &WebGL2RenderingContext, query: WebGLQuery);
#[wasm_bindgen(method, js_name = isQuery)]
fn _is_query(this: &WebGL2RenderingContext, query: &WebGLQuery) -> bool;
#[wasm_bindgen(method, js_name = beginQuery)]
fn _begin_query(this: &WebGL2RenderingContext, target: QueryTarget, query: &WebGLQuery);
#[wasm_bindgen(method, js_name = getQuery)]
fn _get_query(this: &WebGL2RenderingContext, target: QueryTarget, pname: Query) -> WebGLQuery;
#[wasm_bindgen(method, js_name = getQueryParameter)]
fn _get_query_parameter_bool(
this: &WebGL2RenderingContext,
query: &WebGLQuery,
pname: QueryParameter,
) -> bool;
#[wasm_bindgen(method, js_name = getQueryParameter)]
fn _get_query_parameter_u32(
this: &WebGL2RenderingContext,
query: &WebGLQuery,
pname: QueryParameter,
) -> u32;
}