Bladeren bron

LibGL: Implement glColorPointer

Stephan Unverwerth 3 jaren geleden
bovenliggende
commit
f52f40925c

+ 1 - 0
Userland/Libraries/LibGL/GL/gl.h

@@ -358,6 +358,7 @@ GLAPI void glDepthMask(GLboolean flag);
 GLAPI void glEnableClientState(GLenum cap);
 GLAPI void glDisableClientState(GLenum cap);
 GLAPI void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void* pointer);
+GLAPI void glColorPointer(GLint size, GLenum type, GLsizei stride, const void* pointer);
 
 #ifdef __cplusplus
 }

+ 1 - 0
Userland/Libraries/LibGL/GLContext.h

@@ -67,6 +67,7 @@ public:
     virtual void gl_enable_client_state(GLenum cap) = 0;
     virtual void gl_disable_client_state(GLenum cap) = 0;
     virtual void gl_vertex_pointer(GLint size, GLenum type, GLsizei stride, const void* pointer) = 0;
+    virtual void gl_color_pointer(GLint size, GLenum type, GLsizei stride, const void* pointer) = 0;
 
     virtual void present() = 0;
 };

+ 5 - 0
Userland/Libraries/LibGL/GLVertexArrays.cpp

@@ -13,3 +13,8 @@ void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void* pointe
 {
     g_gl_context->gl_vertex_pointer(size, type, stride, pointer);
 }
+
+void glColorPointer(GLint size, GLenum type, GLsizei stride, const void* pointer)
+{
+    g_gl_context->gl_color_pointer(size, type, stride, pointer);
+}

+ 24 - 0
Userland/Libraries/LibGL/SoftwareGLContext.cpp

@@ -1461,6 +1461,30 @@ void SoftwareGLContext::gl_vertex_pointer(GLint size, GLenum type, GLsizei strid
     m_client_vertex_pointer.pointer = pointer;
 }
 
+void SoftwareGLContext::gl_color_pointer(GLint size, GLenum type, GLsizei stride, const void* pointer)
+{
+    RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
+
+    RETURN_WITH_ERROR_IF(!(size == 3 || size == 4), GL_INVALID_VALUE);
+
+    RETURN_WITH_ERROR_IF(!(type == GL_BYTE
+                             || type == GL_UNSIGNED_BYTE
+                             || type == GL_SHORT
+                             || type == GL_UNSIGNED_SHORT
+                             || type == GL_INT
+                             || type == GL_UNSIGNED_INT
+                             || type == GL_FLOAT
+                             || type == GL_DOUBLE),
+        GL_INVALID_ENUM);
+
+    RETURN_WITH_ERROR_IF(stride < 0, GL_INVALID_VALUE);
+
+    m_client_color_pointer.size = size;
+    m_client_color_pointer.type = type;
+    m_client_color_pointer.stride = stride;
+    m_client_color_pointer.pointer = pointer;
+}
+
 void SoftwareGLContext::present()
 {
     m_rasterizer.blit_to(*m_frontbuffer);

+ 2 - 0
Userland/Libraries/LibGL/SoftwareGLContext.h

@@ -77,6 +77,7 @@ public:
     virtual void gl_enable_client_state(GLenum cap) override;
     virtual void gl_disable_client_state(GLenum cap) override;
     virtual void gl_vertex_pointer(GLint size, GLenum type, GLsizei stride, const void* pointer) override;
+    virtual void gl_color_pointer(GLint size, GLenum type, GLsizei stride, const void* pointer) override;
 
     virtual void present() override;
 
@@ -233,6 +234,7 @@ private:
     };
 
     VertexAttribPointer m_client_vertex_pointer;
+    VertexAttribPointer m_client_color_pointer;
 };
 
 }