@@ -3128,6 +3128,65 @@ GC::Root<WebGLUniformLocation> WebGL2RenderingContextImpl::get_uniform_location(
31283128 return WebGLUniformLocation::create (m_realm, location);
31293129}
31303130
3131+ JS::Value WebGL2RenderingContextImpl::get_vertex_attrib (WebIDL::UnsignedLong index, WebIDL::UnsignedLong pname)
3132+ {
3133+ switch (pname) {
3134+ case GL_CURRENT_VERTEX_ATTRIB: {
3135+ Array<GLfloat, 4 > result;
3136+ result.fill (0 );
3137+ glGetVertexAttribfvRobustANGLE (index, GL_CURRENT_VERTEX_ATTRIB, result.size (), nullptr , result.data ());
3138+
3139+ auto byte_buffer = MUST (ByteBuffer::copy (result.span ().reinterpret <u8 >()));
3140+ auto array_buffer = JS::ArrayBuffer::create (m_realm, move (byte_buffer));
3141+ return JS::Float32Array::create (m_realm, result.size (), array_buffer);
3142+ }
3143+ case GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: {
3144+ GLint handle { 0 };
3145+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING, 1 , nullptr , &handle);
3146+ return WebGLBuffer::create (m_realm, *this , handle);
3147+ }
3148+ case GL_VERTEX_ATTRIB_ARRAY_DIVISOR: {
3149+ GLint result { 0 };
3150+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_DIVISOR, 1 , nullptr , &result);
3151+ return JS::Value (result);
3152+ }
3153+ case GL_VERTEX_ATTRIB_ARRAY_ENABLED: {
3154+ GLint result { 0 };
3155+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_ENABLED, 1 , nullptr , &result);
3156+ return JS::Value (result == GL_TRUE);
3157+ }
3158+ case GL_VERTEX_ATTRIB_ARRAY_INTEGER: {
3159+ GLint result { 0 };
3160+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_INTEGER, 1 , nullptr , &result);
3161+ return JS::Value (result == GL_TRUE);
3162+ }
3163+ case GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: {
3164+ GLint result { 0 };
3165+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_NORMALIZED, 1 , nullptr , &result);
3166+ return JS::Value (result == GL_TRUE);
3167+ }
3168+ case GL_VERTEX_ATTRIB_ARRAY_SIZE: {
3169+ GLint result { 0 };
3170+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_SIZE, 1 , nullptr , &result);
3171+ return JS::Value (result);
3172+ }
3173+ case GL_VERTEX_ATTRIB_ARRAY_STRIDE: {
3174+ GLint result { 0 };
3175+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_STRIDE, 1 , nullptr , &result);
3176+ return JS::Value (result);
3177+ }
3178+ case GL_VERTEX_ATTRIB_ARRAY_TYPE: {
3179+ GLint result { 0 };
3180+ glGetVertexAttribivRobustANGLE (index, GL_VERTEX_ATTRIB_ARRAY_TYPE, 1 , nullptr , &result);
3181+ return JS::Value (result);
3182+ }
3183+ default :
3184+ dbgln (" Unknown WebGL vertex attrib name: 0x{:04x}" , pname);
3185+ set_error (GL_INVALID_ENUM);
3186+ return JS::js_null ();
3187+ }
3188+ }
3189+
31313190void WebGL2RenderingContextImpl::hint (WebIDL::UnsignedLong target, WebIDL::UnsignedLong mode)
31323191{
31333192 m_context->make_current ();
0 commit comments