mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 04:47:35 +00:00
LibGL: Implement glUseProgram
This commit is contained in:
parent
1812a169b8
commit
69171e7a05
4 changed files with 25 additions and 0 deletions
|
@ -825,6 +825,7 @@ GLAPI GLuint glCreateProgram();
|
||||||
GLAPI void glDeleteProgram(GLuint program);
|
GLAPI void glDeleteProgram(GLuint program);
|
||||||
GLAPI void glAttachShader(GLuint program, GLuint shader);
|
GLAPI void glAttachShader(GLuint program, GLuint shader);
|
||||||
GLAPI void glLinkProgram(GLuint program);
|
GLAPI void glLinkProgram(GLuint program);
|
||||||
|
GLAPI void glUseProgram(GLuint program);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -1043,6 +1043,11 @@ void glTranslatef(GLfloat x, GLfloat y, GLfloat z)
|
||||||
g_gl_context->gl_translate(x, y, z);
|
g_gl_context->gl_translate(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void glUseProgram(GLuint program)
|
||||||
|
{
|
||||||
|
g_gl_context->gl_use_program(program);
|
||||||
|
}
|
||||||
|
|
||||||
void glVertex2d(GLdouble x, GLdouble y)
|
void glVertex2d(GLdouble x, GLdouble y)
|
||||||
{
|
{
|
||||||
g_gl_context->gl_vertex(x, y, 0.0, 1.0);
|
g_gl_context->gl_vertex(x, y, 0.0, 1.0);
|
||||||
|
|
|
@ -239,6 +239,7 @@ public:
|
||||||
void gl_delete_program(GLuint program);
|
void gl_delete_program(GLuint program);
|
||||||
void gl_attach_shader(GLuint program, GLuint shader);
|
void gl_attach_shader(GLuint program, GLuint shader);
|
||||||
void gl_link_program(GLuint program);
|
void gl_link_program(GLuint program);
|
||||||
|
void gl_use_program(GLuint program);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void sync_device_config();
|
void sync_device_config();
|
||||||
|
@ -414,6 +415,7 @@ private:
|
||||||
NameAllocator m_program_name_allocator;
|
NameAllocator m_program_name_allocator;
|
||||||
HashMap<GLuint, RefPtr<Shader>> m_allocated_shaders;
|
HashMap<GLuint, RefPtr<Shader>> m_allocated_shaders;
|
||||||
HashMap<GLuint, RefPtr<Program>> m_allocated_programs;
|
HashMap<GLuint, RefPtr<Program>> m_allocated_programs;
|
||||||
|
RefPtr<Program> m_current_program;
|
||||||
|
|
||||||
struct Listing {
|
struct Listing {
|
||||||
|
|
||||||
|
|
|
@ -118,4 +118,21 @@ void GLContext::gl_link_program(GLuint program)
|
||||||
(void)program_it->value->link();
|
(void)program_it->value->link();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLContext::gl_use_program(GLuint program)
|
||||||
|
{
|
||||||
|
if (program == 0) {
|
||||||
|
m_current_program = nullptr;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto it = m_allocated_programs.find(program);
|
||||||
|
|
||||||
|
// FIXME: implement check "GL_INVALID_VALUE is generated if program is not a value generated by OpenGL."
|
||||||
|
RETURN_WITH_ERROR_IF(it == m_allocated_programs.end(), GL_INVALID_OPERATION);
|
||||||
|
// FIXME: implement check "GL_INVALID_OPERATION is generated if transform feedback mode is active."
|
||||||
|
RETURN_WITH_ERROR_IF(it->value->link_status() != true, GL_INVALID_OPERATION);
|
||||||
|
|
||||||
|
m_current_program = it->value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue