LibWeb: Implement WebGL2 getQuery

This commit is contained in:
Undefine
2025-11-30 20:35:07 +01:00
committed by Andrew Kaster
parent 42836ea3e4
commit 59e73a9de9
Notes: github-actions[bot] 2026-02-06 10:40:13 +00:00
5 changed files with 54 additions and 1 deletions

View File

@@ -661,15 +661,60 @@ void WebGL2RenderingContextImpl::begin_query(WebIDL::UnsignedLong target, GC::Ro
query_handle = handle_or_error.release_value();
}
switch (target) {
case GL_ANY_SAMPLES_PASSED:
m_any_samples_passed = query;
break;
case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
m_any_samples_passed_conservative = query;
break;
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
m_transform_feedback_primitives_written = query;
break;
}
glBeginQuery(target, query_handle);
}
void WebGL2RenderingContextImpl::end_query(WebIDL::UnsignedLong target)
{
m_context->make_current();
switch (target) {
case GL_ANY_SAMPLES_PASSED:
m_any_samples_passed = nullptr;
break;
case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
m_any_samples_passed_conservative = nullptr;
break;
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
m_transform_feedback_primitives_written = nullptr;
break;
}
glEndQuery(target);
}
GC::Root<WebGLQuery> WebGL2RenderingContextImpl::get_query(WebIDL::UnsignedLong target, WebIDL::UnsignedLong pname)
{
if (pname != GL_CURRENT_QUERY) {
set_error(GL_INVALID_ENUM);
return nullptr;
}
switch (target) {
case GL_ANY_SAMPLES_PASSED:
return m_any_samples_passed;
case GL_ANY_SAMPLES_PASSED_CONSERVATIVE:
return m_any_samples_passed_conservative;
case GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:
return m_transform_feedback_primitives_written;
}
set_error(GL_INVALID_ENUM);
return nullptr;
}
JS::Value WebGL2RenderingContextImpl::get_query_parameter(GC::Root<WebGLQuery> query, WebIDL::UnsignedLong pname)
{
m_context->make_current();