mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 14:37:46 +00:00
LibGL: Implement glListBase
This commit is contained in:
parent
1056bac49a
commit
11fea6b597
5 changed files with 19 additions and 1 deletions
|
@ -393,6 +393,7 @@ GLAPI GLuint glGenLists(GLsizei range);
|
||||||
GLAPI void glCallList(GLuint list);
|
GLAPI void glCallList(GLuint list);
|
||||||
GLAPI void glCallLists(GLsizei n, GLenum type, void const* lists);
|
GLAPI void glCallLists(GLsizei n, GLenum type, void const* lists);
|
||||||
GLAPI void glDeleteLists(GLuint list, GLsizei range);
|
GLAPI void glDeleteLists(GLuint list, GLsizei range);
|
||||||
|
GLAPI void glListBase(GLuint base);
|
||||||
GLAPI void glEndList(void);
|
GLAPI void glEndList(void);
|
||||||
GLAPI void glNewList(GLuint list, GLenum mode);
|
GLAPI void glNewList(GLuint list, GLenum mode);
|
||||||
GLAPI void glFlush();
|
GLAPI void glFlush();
|
||||||
|
|
|
@ -50,6 +50,7 @@ public:
|
||||||
virtual void gl_call_list(GLuint list) = 0;
|
virtual void gl_call_list(GLuint list) = 0;
|
||||||
virtual void gl_call_lists(GLsizei n, GLenum type, void const* lists) = 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_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_end_list(void) = 0;
|
||||||
virtual void gl_new_list(GLuint list, GLenum mode) = 0;
|
virtual void gl_new_list(GLuint list, GLenum mode) = 0;
|
||||||
virtual void gl_flush() = 0;
|
virtual void gl_flush() = 0;
|
||||||
|
|
|
@ -29,6 +29,11 @@ void glDeleteLists(GLuint list, GLsizei range)
|
||||||
return g_gl_context->gl_delete_lists(list, 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)
|
void glEndList(void)
|
||||||
{
|
{
|
||||||
return g_gl_context->gl_end_list();
|
return g_gl_context->gl_end_list();
|
||||||
|
|
|
@ -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) {
|
auto invoke_all_lists = [&]<typename T>(T const* lists) {
|
||||||
for (int i = 0; i < n; ++i) {
|
for (int i = 0; i < n; ++i) {
|
||||||
auto list = static_cast<size_t>(lists[i]);
|
auto list = static_cast<size_t>(lists[i]);
|
||||||
invoke_list(list);
|
invoke_list(m_list_base + list);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -970,6 +970,15 @@ void SoftwareGLContext::gl_delete_lists(GLuint list, GLsizei range)
|
||||||
entry.entries.clear_with_capacity();
|
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()
|
void SoftwareGLContext::gl_end_list()
|
||||||
{
|
{
|
||||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||||
|
|
|
@ -61,6 +61,7 @@ public:
|
||||||
virtual void gl_call_list(GLuint list) override;
|
virtual void gl_call_list(GLuint list) override;
|
||||||
virtual void gl_call_lists(GLsizei n, GLenum type, void const* lists) 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_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_end_list(void) override;
|
||||||
virtual void gl_new_list(GLuint list, GLenum mode) override;
|
virtual void gl_new_list(GLuint list, GLenum mode) override;
|
||||||
virtual void gl_flush() override;
|
virtual void gl_flush() override;
|
||||||
|
@ -254,6 +255,7 @@ private:
|
||||||
static constexpr size_t max_allowed_gl_call_depth { 128 };
|
static constexpr size_t max_allowed_gl_call_depth { 128 };
|
||||||
size_t m_gl_call_depth { 0 };
|
size_t m_gl_call_depth { 0 };
|
||||||
Vector<Listing> m_listings;
|
Vector<Listing> m_listings;
|
||||||
|
size_t m_list_base { 0 };
|
||||||
struct CurrentListing {
|
struct CurrentListing {
|
||||||
Listing listing;
|
Listing listing;
|
||||||
size_t index { 0 };
|
size_t index { 0 };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue