From 4568dcbb5572b6fb32294be63d15c7be9aa19586 Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Sat, 27 Aug 2022 18:07:07 +0200 Subject: [PATCH] LibGL: Add stubs for shader and program related functions --- Userland/Libraries/LibGL/CMakeLists.txt | 1 + Userland/Libraries/LibGL/GL/gl.h | 10 ++++ Userland/Libraries/LibGL/GLAPI.cpp | 40 ++++++++++++++++ Userland/Libraries/LibGL/GLContext.h | 10 ++++ Userland/Libraries/LibGL/Shader.cpp | 62 +++++++++++++++++++++++++ 5 files changed, 123 insertions(+) create mode 100644 Userland/Libraries/LibGL/Shader.cpp diff --git a/Userland/Libraries/LibGL/CMakeLists.txt b/Userland/Libraries/LibGL/CMakeLists.txt index 4c76ad78545..1b53acb7cb2 100644 --- a/Userland/Libraries/LibGL/CMakeLists.txt +++ b/Userland/Libraries/LibGL/CMakeLists.txt @@ -10,6 +10,7 @@ set(SOURCES List.cpp Matrix.cpp NameAllocator.cpp + Shader.cpp Stencil.cpp Tex/Texture2D.cpp Texture.cpp diff --git a/Userland/Libraries/LibGL/GL/gl.h b/Userland/Libraries/LibGL/GL/gl.h index 0acd40852dd..a5fcfede017 100644 --- a/Userland/Libraries/LibGL/GL/gl.h +++ b/Userland/Libraries/LibGL/GL/gl.h @@ -813,6 +813,16 @@ GLAPI void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void 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 GLuint glCreateProgram(); +GLAPI void glDeleteProgram(GLuint program); +GLAPI void glAttachShader(GLuint program, GLuint shader); +GLAPI void glLinkProgram(GLuint program); + #ifdef __cplusplus } #endif diff --git a/Userland/Libraries/LibGL/GLAPI.cpp b/Userland/Libraries/LibGL/GLAPI.cpp index 6b978904e22..7ded1b00233 100644 --- a/Userland/Libraries/LibGL/GLAPI.cpp +++ b/Userland/Libraries/LibGL/GLAPI.cpp @@ -62,6 +62,11 @@ void glArrayElement(GLint i) g_gl_context->gl_array_element(i); } +void glAttachShader(GLuint program, GLuint shader) +{ + g_gl_context->gl_attach_shader(program, shader); +} + void glBegin(GLenum mode) { g_gl_context->gl_begin(mode); @@ -226,6 +231,11 @@ void glColorPointer(GLint size, GLenum type, GLsizei stride, void const* pointer g_gl_context->gl_color_pointer(size, type, stride, pointer); } +void glCompileShader(GLuint shader) +{ + g_gl_context->gl_compile_shader(shader); +} + void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { g_gl_context->gl_copy_tex_image_2d(target, level, internalformat, x, y, width, height, border); @@ -236,6 +246,16 @@ void glCopyTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffse g_gl_context->gl_copy_tex_sub_image_2d(target, level, xoffset, yoffset, x, y, width, height); } +GLuint glCreateProgram() +{ + return g_gl_context->gl_create_program(); +} + +GLuint glCreateShader(GLenum shader_type) +{ + return g_gl_context->gl_create_shader(shader_type); +} + void glCullFace(GLenum mode) { g_gl_context->gl_cull_face(mode); @@ -266,6 +286,16 @@ void glDeleteLists(GLuint list, GLsizei range) return g_gl_context->gl_delete_lists(list, range); } +void glDeleteProgram(GLuint program) +{ + g_gl_context->gl_delete_program(program); +} + +void glDeleteShader(GLuint shader) +{ + g_gl_context->gl_delete_shader(shader); +} + void glDeleteTextures(GLsizei n, GLuint const* textures) { g_gl_context->gl_delete_textures(n, textures); @@ -563,6 +593,11 @@ void glLineWidth(GLfloat width) g_gl_context->gl_line_width(width); } +void glLinkProgram(GLuint program) +{ + g_gl_context->gl_link_program(program); +} + void glListBase(GLuint base) { return g_gl_context->gl_list_base(base); @@ -841,6 +876,11 @@ void glShadeModel(GLenum mode) g_gl_context->gl_shade_model(mode); } +void glShaderSource(GLuint shader, GLsizei count, GLchar const** string, GLint const* length) +{ + g_gl_context->gl_shader_source(shader, count, string, length); +} + void glStencilFunc(GLenum func, GLint ref, GLuint mask) { g_gl_context->gl_stencil_func_separate(GL_FRONT_AND_BACK, func, ref, mask); diff --git a/Userland/Libraries/LibGL/GLContext.h b/Userland/Libraries/LibGL/GLContext.h index 9f1968f42f0..d7a4e2fc754 100644 --- a/Userland/Libraries/LibGL/GLContext.h +++ b/Userland/Libraries/LibGL/GLContext.h @@ -228,6 +228,16 @@ public: void gl_delete_buffers(GLsizei n, GLuint const* buffers); void gl_gen_buffers(GLsizei n, GLuint* buffers); + GLuint gl_create_shader(GLenum shader_type); + void gl_delete_shader(GLuint shader); + void gl_shader_source(GLuint shader, GLsizei count, GLchar const** string, GLint const* length); + void gl_compile_shader(GLuint shader); + + GLuint gl_create_program(); + void gl_delete_program(GLuint program); + void gl_attach_shader(GLuint program, GLuint shader); + void gl_link_program(GLuint program); + private: void sync_device_config(); void sync_device_sampler_config(); diff --git a/Userland/Libraries/LibGL/Shader.cpp b/Userland/Libraries/LibGL/Shader.cpp new file mode 100644 index 00000000000..e5c1df98f75 --- /dev/null +++ b/Userland/Libraries/LibGL/Shader.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2022, Stephan Unverwerth + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +namespace GL { + +GLuint GLContext::gl_create_shader(GLenum shader_type) +{ + dbgln("gl_create_shader({}) unimplemented ", shader_type); + TODO(); + return 0; +} + +void GLContext::gl_delete_shader(GLuint shader) +{ + dbgln("gl_delete_shader({}) unimplemented ", shader); + TODO(); +} + +void GLContext::gl_shader_source(GLuint shader, GLsizei count, GLchar const** string, GLint const* length) +{ + dbgln("gl_shader_source({}, {}, {#x}, {#x}) unimplemented ", shader, count, string, length); + TODO(); +} + +void GLContext::gl_compile_shader(GLuint shader) +{ + dbgln("gl_compile_shader({}) unimplemented ", shader); + TODO(); +} + +GLuint GLContext::gl_create_program() +{ + dbgln("gl_create_program() unimplemented "); + TODO(); + return 0; +} + +void GLContext::gl_delete_program(GLuint program) +{ + dbgln("gl_delete_program({}) unimplemented ", program); + TODO(); +} + +void GLContext::gl_attach_shader(GLuint program, GLuint shader) +{ + dbgln("gl_attach_shader({}, {}) unimplemented ", program, shader); + TODO(); +} + +void GLContext::gl_link_program(GLuint program) +{ + dbgln("gl_link_program({}) unimplemented ", program); + TODO(); +} + +}