mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 21:17:45 +00:00
LibGL: Generate the API wrappers
We now generate all LibGL API wrappers from a single API method definition list stored in `GLAPI.json`. Since a significant portion of the OpenGL API methods are relatively consistent variants, we take advantage of this to generate a lot of these variants at once. The autogenerated methods check for the non-nullness of the current `GLContext`, and only perform an action if a `GLContext` is present. This prevents a crash in ports like GLTron, who assume you can still call the OpenGL API without an active context. This increases our API wrapper method count from 211 to 356. Fixes #15814.
This commit is contained in:
parent
8c094699db
commit
2da1c1c10e
9 changed files with 1787 additions and 1404 deletions
|
@ -1,9 +1,10 @@
|
|||
include(libgl_generators)
|
||||
|
||||
set(SOURCES
|
||||
Buffer/Buffer.cpp
|
||||
Buffer.cpp
|
||||
ClipPlane.cpp
|
||||
ContextParameter.cpp
|
||||
GLAPI.cpp
|
||||
GLContext.cpp
|
||||
Image.cpp
|
||||
Lighting.cpp
|
||||
|
@ -19,5 +20,10 @@ set(SOURCES
|
|||
Vertex.cpp
|
||||
)
|
||||
|
||||
generate_libgl_implementation()
|
||||
|
||||
set(GENERATED_SOURCES
|
||||
GLAPI.cpp)
|
||||
|
||||
serenity_lib(LibGL gl)
|
||||
target_link_libraries(LibGL PRIVATE LibCore LibGfx LibGLSL LibGPU)
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Jesse Buhagiar <jooster669@gmail.com>
|
||||
* Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
|
||||
* Copyright (c) 2021, Jelle Raaijmakers <jelle@gmta.nl>
|
||||
* Copyright (c) 2021-2022, Jelle Raaijmakers <jelle@gmta.nl>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <LibGL/GL/glapi.h>
|
||||
#include <LibGL/GL/glplatform.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -610,231 +611,6 @@ extern "C" {
|
|||
#define GL_INFO_LOG_LENGTH 0x8B84
|
||||
#define GL_SHADER_SOURCE_LENGTH 0x8B88
|
||||
|
||||
GLAPI void glBegin(GLenum mode);
|
||||
GLAPI void glClear(GLbitfield mask);
|
||||
GLAPI void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);
|
||||
GLAPI void glClearDepth(GLdouble depth);
|
||||
GLAPI void glClearDepthf(GLfloat depth);
|
||||
GLAPI void glClearStencil(GLint s);
|
||||
GLAPI void glColor3d(GLdouble r, GLdouble g, GLdouble b);
|
||||
GLAPI void glColor3dv(GLdouble const* v);
|
||||
GLAPI void glColor3f(GLfloat r, GLfloat g, GLfloat b);
|
||||
GLAPI void glColor3fv(GLfloat const* v);
|
||||
GLAPI void glColor3ub(GLubyte r, GLubyte g, GLubyte b);
|
||||
GLAPI void glColor3ubv(GLubyte const* v);
|
||||
GLAPI void glColor4b(GLbyte r, GLbyte g, GLbyte b, GLbyte a);
|
||||
GLAPI void glColor4dv(GLdouble const* v);
|
||||
GLAPI void glColor4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a);
|
||||
GLAPI void glColor4fv(GLfloat const* v);
|
||||
GLAPI void glColor4ub(GLubyte r, GLubyte g, GLubyte b, GLubyte a);
|
||||
GLAPI void glColor4ubv(GLubyte const* v);
|
||||
GLAPI void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);
|
||||
GLAPI void glColorMaterial(GLenum face, GLenum mode);
|
||||
GLAPI void glDeleteTextures(GLsizei n, GLuint const* textures);
|
||||
GLAPI void glEnd();
|
||||
GLAPI void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal);
|
||||
GLAPI void glGenTextures(GLsizei n, GLuint* textures);
|
||||
GLAPI GLenum glGetError();
|
||||
GLAPI GLubyte const* glGetString(GLenum name);
|
||||
GLAPI void glLoadIdentity();
|
||||
GLAPI void glLoadMatrixd(GLdouble const* matrix);
|
||||
GLAPI void glLoadMatrixf(GLfloat const* matrix);
|
||||
GLAPI void glMatrixMode(GLenum mode);
|
||||
GLAPI void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal);
|
||||
GLAPI void glPushMatrix();
|
||||
GLAPI void glPopMatrix();
|
||||
GLAPI void glMultMatrixd(GLdouble const* matrix);
|
||||
GLAPI void glMultMatrixf(GLfloat const* matrix);
|
||||
GLAPI void glRotated(GLdouble angle, GLdouble x, GLdouble y, GLdouble z);
|
||||
GLAPI void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);
|
||||
GLAPI void glScaled(GLdouble x, GLdouble y, GLdouble z);
|
||||
GLAPI void glScalef(GLfloat x, GLfloat y, GLfloat z);
|
||||
GLAPI void glTranslated(GLdouble x, GLdouble y, GLdouble z);
|
||||
GLAPI void glTranslatef(GLfloat x, GLfloat y, GLfloat z);
|
||||
GLAPI void glVertex2d(GLdouble x, GLdouble y);
|
||||
GLAPI void glVertex2dv(GLdouble const* v);
|
||||
GLAPI void glVertex2f(GLfloat x, GLfloat y);
|
||||
GLAPI void glVertex2fv(GLfloat const* v);
|
||||
GLAPI void glVertex2i(GLint x, GLint y);
|
||||
GLAPI void glVertex2iv(GLint const* v);
|
||||
GLAPI void glVertex2s(GLshort x, GLshort y);
|
||||
GLAPI void glVertex2sv(GLshort const* v);
|
||||
GLAPI void glVertex3d(GLdouble x, GLdouble y, GLdouble z);
|
||||
GLAPI void glVertex3dv(GLdouble const* v);
|
||||
GLAPI void glVertex3f(GLfloat x, GLfloat y, GLfloat z);
|
||||
GLAPI void glVertex3fv(GLfloat const* v);
|
||||
GLAPI void glVertex3i(GLint x, GLint y, GLint z);
|
||||
GLAPI void glVertex3iv(GLint const* v);
|
||||
GLAPI void glVertex3s(GLshort x, GLshort y, GLshort z);
|
||||
GLAPI void glVertex3sv(GLshort const* v);
|
||||
GLAPI void glVertex4d(GLdouble x, GLdouble y, GLdouble z, GLdouble w);
|
||||
GLAPI void glVertex4dv(GLdouble const* v);
|
||||
GLAPI void glVertex4f(GLfloat x, GLfloat y, GLfloat z, GLfloat w);
|
||||
GLAPI void glVertex4fv(GLfloat const* v);
|
||||
GLAPI void glVertex4i(GLint x, GLint y, GLint z, GLint w);
|
||||
GLAPI void glVertex4iv(GLint const* v);
|
||||
GLAPI void glVertex4s(GLshort x, GLshort y, GLshort z, GLshort w);
|
||||
GLAPI void glVertex4sv(GLshort const* v);
|
||||
GLAPI void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
GLAPI void glEnable(GLenum cap);
|
||||
GLAPI void glDisable(GLenum cap);
|
||||
GLAPI GLboolean glIsEnabled(GLenum cap);
|
||||
GLAPI void glCullFace(GLenum mode);
|
||||
GLAPI void glFrontFace(GLenum mode);
|
||||
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 GLboolean glIsList(GLuint list);
|
||||
GLAPI void glFlush();
|
||||
GLAPI void glFinish();
|
||||
GLAPI void glBlendFunc(GLenum sfactor, GLenum dfactor);
|
||||
GLAPI void glShadeModel(GLenum mode);
|
||||
GLAPI void glAlphaFunc(GLenum func, GLclampf ref);
|
||||
GLAPI void glHint(GLenum target, GLenum mode);
|
||||
GLAPI void glReadBuffer(GLenum mode);
|
||||
GLAPI void glDrawBuffer(GLenum buffer);
|
||||
GLAPI void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid* pixels);
|
||||
GLAPI void glTexImage1D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, GLvoid const* data);
|
||||
GLAPI void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLvoid const* data);
|
||||
GLAPI void glTexImage3D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, GLvoid const* data);
|
||||
GLAPI void glTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid const* data);
|
||||
GLAPI void glTexCoord1f(GLfloat s);
|
||||
GLAPI void glTexCoord1fv(GLfloat const* v);
|
||||
GLAPI void glTexCoord2d(GLdouble s, GLdouble t);
|
||||
GLAPI void glTexCoord2dv(GLdouble const* v);
|
||||
GLAPI void glTexCoord2f(GLfloat s, GLfloat t);
|
||||
GLAPI void glTexCoord2fv(GLfloat const* v);
|
||||
GLAPI void glTexCoord2i(GLint s, GLint t);
|
||||
GLAPI void glTexCoord3f(GLfloat s, GLfloat t, GLfloat r);
|
||||
GLAPI void glTexCoord3fv(GLfloat const* v);
|
||||
GLAPI void glTexCoord4f(GLfloat s, GLfloat t, GLfloat r, GLfloat q);
|
||||
GLAPI void glTexCoord4fv(GLfloat const* v);
|
||||
GLAPI void glMultiTexCoord1f(GLenum target, GLfloat s);
|
||||
GLAPI void glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t);
|
||||
GLAPI void glMultiTexCoord2fvARB(GLenum target, GLfloat const* v);
|
||||
GLAPI void glMultiTexCoord2fv(GLenum target, GLfloat const* v);
|
||||
GLAPI void glMultiTexCoord2f(GLenum target, GLfloat s, GLfloat t);
|
||||
GLAPI void glMultiTexCoord3f(GLenum target, GLfloat s, GLfloat t, GLfloat r);
|
||||
GLAPI void glMultiTexCoord4f(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);
|
||||
GLAPI void glTexParameteri(GLenum target, GLenum pname, GLint param);
|
||||
GLAPI void glTexParameterf(GLenum target, GLenum pname, GLfloat param);
|
||||
GLAPI void glTexEnvf(GLenum target, GLenum pname, GLfloat param);
|
||||
GLAPI void glTexEnvi(GLenum target, GLenum pname, GLint param);
|
||||
GLAPI void glBindTexture(GLenum target, GLuint texture);
|
||||
GLAPI GLboolean glIsTexture(GLuint texture);
|
||||
GLAPI void glActiveTextureARB(GLenum texture);
|
||||
GLAPI void glActiveTexture(GLenum texture);
|
||||
GLAPI void glGetBooleanv(GLenum pname, GLboolean* data);
|
||||
GLAPI void glGetDoublev(GLenum pname, GLdouble* params);
|
||||
GLAPI void glGetFloatv(GLenum pname, GLfloat* params);
|
||||
GLAPI void glGetIntegerv(GLenum pname, GLint* data);
|
||||
GLAPI void glGetLightfv(GLenum light, GLenum pname, GLfloat* params);
|
||||
GLAPI void glGetLightiv(GLenum light, GLenum pname, GLint* params);
|
||||
GLAPI void glGetMaterialfv(GLenum face, GLenum pname, GLfloat* params);
|
||||
GLAPI void glGetMaterialiv(GLenum face, GLenum pname, GLint* params);
|
||||
GLAPI void glDepthMask(GLboolean flag);
|
||||
GLAPI void glEnableClientState(GLenum cap);
|
||||
GLAPI void glDisableClientState(GLenum cap);
|
||||
GLAPI void glClientActiveTextureARB(GLenum target);
|
||||
GLAPI void glClientActiveTexture(GLenum target);
|
||||
GLAPI void glVertexPointer(GLint size, GLenum type, GLsizei stride, void const* pointer);
|
||||
GLAPI void glColorPointer(GLint size, GLenum type, GLsizei stride, void const* pointer);
|
||||
GLAPI void glTexCoordPointer(GLint size, GLenum type, GLsizei stride, void const* pointer);
|
||||
GLAPI void glDrawArrays(GLenum mode, GLint first, GLsizei count);
|
||||
GLAPI void glDrawElements(GLenum mode, GLsizei count, GLenum type, void const* indices);
|
||||
GLAPI void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, void const* data);
|
||||
GLAPI void glDepthRange(GLdouble nearVal, GLdouble farVal);
|
||||
GLAPI void glDepthFunc(GLenum func);
|
||||
GLAPI void glPolygonMode(GLenum face, GLenum mode);
|
||||
GLAPI void glPolygonOffset(GLfloat factor, GLfloat units);
|
||||
GLAPI void glFogfv(GLenum mode, GLfloat const* params);
|
||||
GLAPI void glFogf(GLenum pname, GLfloat param);
|
||||
GLAPI void glFogi(GLenum pname, GLint param);
|
||||
GLAPI void glPixelStorei(GLenum pname, GLint param);
|
||||
GLAPI void glScissor(GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
GLAPI void glLightf(GLenum light, GLenum pname, GLfloat param);
|
||||
GLAPI void glLightfv(GLenum light, GLenum pname, GLfloat const* params);
|
||||
GLAPI void glLighti(GLenum light, GLenum pname, GLint param);
|
||||
GLAPI void glLightiv(GLenum light, GLenum pname, GLint const* params);
|
||||
GLAPI void glLightModelf(GLenum pname, GLfloat param);
|
||||
GLAPI void glLightModelfv(GLenum pname, GLfloat const* params);
|
||||
GLAPI void glLightModeli(GLenum pname, GLint param);
|
||||
GLAPI void glLightModeliv(GLenum pname, GLint const* params);
|
||||
GLAPI void glStencilFunc(GLenum func, GLint ref, GLuint mask);
|
||||
GLAPI void glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
|
||||
GLAPI void glStencilMask(GLuint mask);
|
||||
GLAPI void glStencilMaskSeparate(GLenum face, GLuint mask);
|
||||
GLAPI void glStencilOp(GLenum sfail, GLenum dpfail, GLenum dppass);
|
||||
GLAPI void glStencilOpSeparate(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);
|
||||
GLAPI void glNormal3d(GLdouble nx, GLdouble ny, GLdouble nz);
|
||||
GLAPI void glNormal3f(GLfloat nx, GLfloat ny, GLfloat nz);
|
||||
GLAPI void glNormal3fv(GLfloat const* v);
|
||||
GLAPI void glNormalPointer(GLenum type, GLsizei stride, void const* pointer);
|
||||
GLAPI void glRasterPos2d(GLdouble x, GLdouble y);
|
||||
GLAPI void glRasterPos2f(GLfloat x, GLfloat y);
|
||||
GLAPI void glRasterPos2i(GLint x, GLint y);
|
||||
GLAPI void glRasterPos2s(GLshort x, GLshort y);
|
||||
GLAPI void glMaterialf(GLenum face, GLenum pname, GLfloat param);
|
||||
GLAPI void glMaterialfv(GLenum face, GLenum pname, GLfloat const* params);
|
||||
GLAPI void glMateriali(GLenum face, GLenum pname, GLint param);
|
||||
GLAPI void glMaterialiv(GLenum face, GLenum pname, GLint const* params);
|
||||
GLAPI void glLineWidth(GLfloat width);
|
||||
GLAPI void glPushAttrib(GLbitfield mask);
|
||||
GLAPI void glPopAttrib();
|
||||
GLAPI void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, GLubyte const* bitmap);
|
||||
GLAPI void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);
|
||||
GLAPI void glMap1d(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, GLdouble const* points);
|
||||
GLAPI void glMap1f(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, GLfloat const* points);
|
||||
GLAPI void glMap2d(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble const* points);
|
||||
GLAPI void glMap2f(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat const* points);
|
||||
GLAPI void glMapGrid1d(GLint un, GLdouble u1, GLdouble u2);
|
||||
GLAPI void glMapGrid1f(GLint un, GLfloat u1, GLfloat u2);
|
||||
GLAPI void glMapGrid2d(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2);
|
||||
GLAPI void glMapGrid2f(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2);
|
||||
GLAPI void glEvalCoord1d(GLdouble u);
|
||||
GLAPI void glEvalCoord1f(GLfloat u);
|
||||
GLAPI void glEvalCoord2d(GLdouble u, GLdouble v);
|
||||
GLAPI void glEvalCoord2f(GLfloat u, GLfloat v);
|
||||
GLAPI void glEvalMesh1(GLenum mode, GLint i1, GLint i2);
|
||||
GLAPI void glEvalMesh2(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2);
|
||||
GLAPI void glEvalPoint1(GLint i);
|
||||
GLAPI void glEvalPoint2(GLint i, GLint j);
|
||||
GLAPI void glTexGend(GLenum coord, GLenum pname, GLdouble param);
|
||||
GLAPI void glTexGenf(GLenum coord, GLenum pname, GLfloat param);
|
||||
GLAPI void glTexGenfv(GLenum coord, GLenum pname, GLfloat const* params);
|
||||
GLAPI void glTexGeni(GLenum coord, GLenum pname, GLint param);
|
||||
GLAPI void glRectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2);
|
||||
GLAPI void glRecti(GLint x1, GLint y1, GLint x2, GLint y2);
|
||||
GLAPI void glGetTexImage(GLenum target, GLint level, GLenum format, GLenum type, void* pixels);
|
||||
GLAPI void glGetTexLevelParameteriv(GLenum target, GLint level, GLenum pname, GLint* params);
|
||||
GLAPI void glPointSize(GLfloat size);
|
||||
GLAPI void glClipPlane(GLenum plane, GLdouble const* equation);
|
||||
GLAPI void glGetClipPlane(GLenum plane, GLdouble* equation);
|
||||
GLAPI void glArrayElement(GLint i);
|
||||
GLAPI void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
|
||||
GLAPI void glBindBuffer(GLenum target, GLuint buffer);
|
||||
GLAPI void glBufferData(GLenum target, GLsizeiptr size, void const* data, GLenum usage);
|
||||
GLAPI void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void const* data);
|
||||
GLAPI void glDeleteBuffers(GLsizei n, GLuint const* buffers);
|
||||
GLAPI void glGenBuffers(GLsizei n, GLuint* buffers);
|
||||
|
||||
GLAPI GLuint glCreateShader(GLenum shader_type);
|
||||
GLAPI void glDeleteShader(GLuint shader);
|
||||
GLAPI void glShaderSource(GLuint shader, GLsizei count, GLchar const** string, GLint const* length);
|
||||
GLAPI void glCompileShader(GLuint shader);
|
||||
GLAPI void glGetShaderiv(GLuint shader, GLenum pname, GLint* params);
|
||||
|
||||
GLAPI GLuint glCreateProgram();
|
||||
GLAPI void glDeleteProgram(GLuint program);
|
||||
GLAPI void glAttachShader(GLuint program, GLuint shader);
|
||||
GLAPI void glLinkProgram(GLuint program);
|
||||
GLAPI void glUseProgram(GLuint program);
|
||||
GLAPI void glGetProgramiv(GLuint program, GLenum pname, GLint* params);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
File diff suppressed because it is too large
Load diff
1162
Userland/Libraries/LibGL/GLAPI.json
Normal file
1162
Userland/Libraries/LibGL/GLAPI.json
Normal file
File diff suppressed because it is too large
Load diff
|
@ -574,6 +574,36 @@ private:
|
|||
RefPtr<Buffer> m_element_array_buffer;
|
||||
};
|
||||
|
||||
// Transposes input matrices (column-major) to our Matrix (row-major).
|
||||
template<typename I>
|
||||
constexpr FloatMatrix4x4 transpose_input_matrix(I const* matrix)
|
||||
{
|
||||
Array<float, 16> elements;
|
||||
for (size_t i = 0; i < 16; ++i)
|
||||
elements[i] = static_cast<float>(matrix[i]);
|
||||
// clang-format off
|
||||
return {
|
||||
elements[0], elements[4], elements[8], elements[12],
|
||||
elements[1], elements[5], elements[9], elements[13],
|
||||
elements[2], elements[6], elements[10], elements[14],
|
||||
elements[3], elements[7], elements[11], elements[15],
|
||||
};
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
template<>
|
||||
constexpr FloatMatrix4x4 transpose_input_matrix(float const* matrix)
|
||||
{
|
||||
// clang-format off
|
||||
return {
|
||||
matrix[0], matrix[4], matrix[8], matrix[12],
|
||||
matrix[1], matrix[5], matrix[9], matrix[13],
|
||||
matrix[2], matrix[6], matrix[10], matrix[14],
|
||||
matrix[3], matrix[7], matrix[11], matrix[15],
|
||||
};
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
ErrorOr<NonnullOwnPtr<GLContext>> create_context(Gfx::Bitmap&);
|
||||
void make_context_current(GLContext*);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue