1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:07:35 +00:00

LibGL: Implement glVertexPointer

This commit is contained in:
Stephan Unverwerth 2021-08-13 13:03:06 +02:00 committed by Andreas Kling
parent 886f154c2a
commit 07b9cba6e6
6 changed files with 43 additions and 0 deletions

View file

@ -13,6 +13,7 @@ set(SOURCES
GLTexture.cpp GLTexture.cpp
GLUtils.cpp GLUtils.cpp
GLVert.cpp GLVert.cpp
GLVertexArrays.cpp
SoftwareGLContext.cpp SoftwareGLContext.cpp
SoftwareRasterizer.cpp SoftwareRasterizer.cpp
DepthBuffer.cpp DepthBuffer.cpp

View file

@ -141,6 +141,7 @@ extern "C" {
#define GL_INT 0x1404 #define GL_INT 0x1404
#define GL_UNSIGNED_INT 0x1405 #define GL_UNSIGNED_INT 0x1405
#define GL_FLOAT 0x1406 #define GL_FLOAT 0x1406
#define GL_DOUBLE 0x140A
// Format enums // Format enums
#define GL_COLOR_INDEX 0x1900 #define GL_COLOR_INDEX 0x1900
@ -356,6 +357,7 @@ GLAPI void glGetFloatv(GLenum pname, GLfloat* params);
GLAPI void glDepthMask(GLboolean flag); GLAPI void glDepthMask(GLboolean flag);
GLAPI void glEnableClientState(GLenum cap); GLAPI void glEnableClientState(GLenum cap);
GLAPI void glDisableClientState(GLenum cap); GLAPI void glDisableClientState(GLenum cap);
GLAPI void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void* pointer);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -66,6 +66,7 @@ public:
virtual void gl_depth_mask(GLboolean flag) = 0; virtual void gl_depth_mask(GLboolean flag) = 0;
virtual void gl_enable_client_state(GLenum cap) = 0; virtual void gl_enable_client_state(GLenum cap) = 0;
virtual void gl_disable_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 present() = 0; virtual void present() = 0;
}; };

View file

@ -0,0 +1,15 @@
/*
* Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "GL/gl.h"
#include "GLContext.h"
extern GL::GLContext* g_gl_context;
void glVertexPointer(GLint size, GLenum type, GLsizei stride, const void* pointer)
{
g_gl_context->gl_vertex_pointer(size, type, stride, pointer);
}

View file

@ -1447,6 +1447,20 @@ void SoftwareGLContext::gl_disable_client_state(GLenum cap)
} }
} }
void SoftwareGLContext::gl_vertex_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 == 1 || size == 2 || size == 4), GL_INVALID_VALUE);
RETURN_WITH_ERROR_IF(!(type == GL_SHORT || type == GL_INT || type == GL_FLOAT || type == GL_DOUBLE), GL_INVALID_ENUM);
RETURN_WITH_ERROR_IF(stride < 0, GL_INVALID_VALUE);
m_client_vertex_pointer.size = size;
m_client_vertex_pointer.type = type;
m_client_vertex_pointer.stride = stride;
m_client_vertex_pointer.pointer = pointer;
}
void SoftwareGLContext::present() void SoftwareGLContext::present()
{ {
m_rasterizer.blit_to(*m_frontbuffer); m_rasterizer.blit_to(*m_frontbuffer);

View file

@ -76,6 +76,7 @@ public:
virtual void gl_depth_mask(GLboolean flag) override; virtual void gl_depth_mask(GLboolean flag) override;
virtual void gl_enable_client_state(GLenum cap) override; virtual void gl_enable_client_state(GLenum cap) override;
virtual void gl_disable_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 present() override; virtual void present() override;
@ -223,6 +224,15 @@ private:
GLenum mode { GL_COMPILE }; GLenum mode { GL_COMPILE };
}; };
Optional<CurrentListing> m_current_listing_index; Optional<CurrentListing> m_current_listing_index;
struct VertexAttribPointer {
GLint size { 4 };
GLenum type { GL_FLOAT };
GLsizei stride { 0 };
const void* pointer { 0 };
};
VertexAttribPointer m_client_vertex_pointer;
}; };
} }