LibGL: Implement glListBase

This commit is contained in:
Jelle Raaijmakers 2021-12-01 14:34:26 +01:00 committed by Andreas Kling
parent 1056bac49a
commit 11fea6b597
Notes: sideshowbarker 2024-07-17 22:52:09 +09:00
5 changed files with 19 additions and 1 deletions

View file

@ -393,6 +393,7 @@ GLAPI GLuint glGenLists(GLsizei range);
GLAPI void glCallList(GLuint list);
GLAPI void glCallLists(GLsizei n, GLenum type, void const* lists);
GLAPI void glDeleteLists(GLuint list, GLsizei range);
GLAPI void glListBase(GLuint base);
GLAPI void glEndList(void);
GLAPI void glNewList(GLuint list, GLenum mode);
GLAPI void glFlush();

View file

@ -50,6 +50,7 @@ public:
virtual void gl_call_list(GLuint list) = 0;
virtual void gl_call_lists(GLsizei n, GLenum type, void const* lists) = 0;
virtual void gl_delete_lists(GLuint list, GLsizei range) = 0;
virtual void gl_list_base(GLuint base) = 0;
virtual void gl_end_list(void) = 0;
virtual void gl_new_list(GLuint list, GLenum mode) = 0;
virtual void gl_flush() = 0;

View file

@ -29,6 +29,11 @@ void glDeleteLists(GLuint list, GLsizei range)
return g_gl_context->gl_delete_lists(list, range);
}
void glListBase(GLuint base)
{
return g_gl_context->gl_list_base(base);
}
void glEndList(void)
{
return g_gl_context->gl_end_list();

View file

@ -926,7 +926,7 @@ void SoftwareGLContext::gl_call_lists(GLsizei n, GLenum type, void const* lists)
auto invoke_all_lists = [&]<typename T>(T const* lists) {
for (int i = 0; i < n; ++i) {
auto list = static_cast<size_t>(lists[i]);
invoke_list(list);
invoke_list(m_list_base + list);
}
};
switch (type) {
@ -970,6 +970,15 @@ void SoftwareGLContext::gl_delete_lists(GLuint list, GLsizei range)
entry.entries.clear_with_capacity();
}
void SoftwareGLContext::gl_list_base(GLuint base)
{
APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_list_base, base);
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
m_list_base = base;
}
void SoftwareGLContext::gl_end_list()
{
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);

View file

@ -61,6 +61,7 @@ public:
virtual void gl_call_list(GLuint list) override;
virtual void gl_call_lists(GLsizei n, GLenum type, void const* lists) override;
virtual void gl_delete_lists(GLuint list, GLsizei range) override;
virtual void gl_list_base(GLuint base) override;
virtual void gl_end_list(void) override;
virtual void gl_new_list(GLuint list, GLenum mode) override;
virtual void gl_flush() override;
@ -254,6 +255,7 @@ private:
static constexpr size_t max_allowed_gl_call_depth { 128 };
size_t m_gl_call_depth { 0 };
Vector<Listing> m_listings;
size_t m_list_base { 0 };
struct CurrentListing {
Listing listing;
size_t index { 0 };