Selaa lähdekoodia

LibWeb/WebGL2: Implement drawElementsInstanced

Luke Wilde 7 kuukautta sitten
vanhempi
commit
8d1e719e73

+ 2 - 2
Libraries/LibWeb/WebGL/WebGL2RenderingContextBase.idl

@@ -360,12 +360,12 @@ interface mixin WebGL2RenderingContextBase {
     [FIXME] undefined vertexAttribI4iv(GLuint index, Int32List values);
     [FIXME] undefined vertexAttribI4ui(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w);
     [FIXME] undefined vertexAttribI4uiv(GLuint index, Uint32List values);
-    [FIXME] undefined vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
+    undefined vertexAttribIPointer(GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset);
 
     // Writing to the drawing buffer
     undefined vertexAttribDivisor(GLuint index, GLuint divisor);
     [FIXME] undefined drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instanceCount);
-    [FIXME] undefined drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
+    undefined drawElementsInstanced(GLenum mode, GLsizei count, GLenum type, GLintptr offset, GLsizei instanceCount);
     [FIXME] undefined drawRangeElements(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, GLintptr offset);
 
     // Multiple Render Targets

+ 16 - 0
Meta/Lagom/Tools/CodeGenerators/LibWeb/GenerateWebGLRenderingContext.cpp

@@ -32,6 +32,7 @@ static bool gl_function_modifies_framebuffer(StringView function_name)
     return function_name == "clear"sv
         || function_name == "drawArrays"sv
         || function_name == "drawElements"sv
+        || function_name == "drawElementsInstanced"sv
         || function_name == "blitFramebuffer"sv
         || function_name == "invalidateFramebuffer"sv;
 }
@@ -998,6 +999,14 @@ public:
             continue;
         }
 
+        if (function.name == "drawElementsInstanced"sv) {
+            function_impl_generator.append(R"~~~(
+    glDrawElementsInstanced(mode, count, type, reinterpret_cast<void*>(offset), instance_count);
+    needs_to_present();
+)~~~");
+            continue;
+        }
+
         if (function.name == "drawBuffers"sv) {
             function_impl_generator.append(R"~~~(
     glDrawBuffers(buffers.size(), buffers.data());
@@ -1125,6 +1134,13 @@ public:
             continue;
         }
 
+        if (function.name == "vertexAttribIPointer"sv) {
+            function_impl_generator.append(R"~~~(
+    glVertexAttribIPointer(index, size, type, stride, reinterpret_cast<void*>(offset));
+)~~~");
+            continue;
+        }
+
         if (function.name == "getParameter"sv) {
             generate_get_parameter(function_impl_generator, webgl_version);
             continue;