LibGL: Implement glUseProgram

This commit is contained in:
Stephan Unverwerth 2022-08-28 15:39:44 +02:00 committed by Andrew Kaster
parent 1812a169b8
commit 69171e7a05
Notes: sideshowbarker 2024-07-17 08:34:29 +09:00
4 changed files with 25 additions and 0 deletions

View file

@ -825,6 +825,7 @@ 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);
#ifdef __cplusplus
}

View file

@ -1043,6 +1043,11 @@ void glTranslatef(GLfloat x, GLfloat y, GLfloat 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)
{
g_gl_context->gl_vertex(x, y, 0.0, 1.0);

View file

@ -239,6 +239,7 @@ public:
void gl_delete_program(GLuint program);
void gl_attach_shader(GLuint program, GLuint shader);
void gl_link_program(GLuint program);
void gl_use_program(GLuint program);
private:
void sync_device_config();
@ -414,6 +415,7 @@ private:
NameAllocator m_program_name_allocator;
HashMap<GLuint, RefPtr<Shader>> m_allocated_shaders;
HashMap<GLuint, RefPtr<Program>> m_allocated_programs;
RefPtr<Program> m_current_program;
struct Listing {

View file

@ -118,4 +118,21 @@ void GLContext::gl_link_program(GLuint program)
(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;
}
}