Gawain: immediate mode set uniforms for active program
Start simple with vec4 uniforms. Add more later.
This commit is contained in:
@@ -58,6 +58,9 @@ extern PER_THREAD VertexFormat immVertexFormat; // so we don't have to copy or p
|
||||
void immInit(void);
|
||||
void immDestroy(void);
|
||||
|
||||
void immBindProgram(GLuint program);
|
||||
void immUnbindProgram(void);
|
||||
|
||||
void immBegin(GLenum primitive, unsigned vertex_ct);
|
||||
void immEnd(void);
|
||||
|
||||
@@ -73,3 +76,6 @@ void immEndVertex(void); // and move on to the next vertex
|
||||
// provide 2D or 3D attribute value and end the current vertex, similar to glVertex:
|
||||
void immVertex2f(unsigned attrib_id, float x, float y);
|
||||
void immVertex3f(unsigned attrib_id, float x, float y, float z);
|
||||
|
||||
// provide values that don't change for the entire draw call
|
||||
void immUniform4f(const char* name, float x, float y, float z, float w);
|
||||
|
||||
@@ -187,6 +187,8 @@ typedef struct {
|
||||
|
||||
GLuint vbo_id;
|
||||
GLuint vao_id;
|
||||
|
||||
GLuint bound_program;
|
||||
} Immediate;
|
||||
|
||||
// size of internal buffer -- make this adjustable?
|
||||
@@ -237,6 +239,27 @@ void immDestroy()
|
||||
initialized = false;
|
||||
}
|
||||
|
||||
void immBindProgram(GLuint program)
|
||||
{
|
||||
#if TRUST_NO_ONE
|
||||
assert(imm.bound_program == 0);
|
||||
#endif
|
||||
|
||||
glUseProgram(program);
|
||||
bind_attrib_locations(&immVertexFormat, program);
|
||||
imm.bound_program = program;
|
||||
}
|
||||
|
||||
void immUnbindProgram()
|
||||
{
|
||||
#if TRUST_NO_ONE
|
||||
assert(imm.bound_program != 0);
|
||||
#endif
|
||||
|
||||
glUseProgram(0);
|
||||
imm.bound_program = 0;
|
||||
}
|
||||
|
||||
void immBegin(GLenum primitive, unsigned vertex_ct)
|
||||
{
|
||||
#if TRUST_NO_ONE
|
||||
@@ -531,3 +554,14 @@ void immVertex3f(unsigned attrib_id, float x, float y, float z)
|
||||
immAttrib3f(attrib_id, x, y, z);
|
||||
immEndVertex();
|
||||
}
|
||||
|
||||
void immUniform4f(const char* name, float x, float y, float z, float w)
|
||||
{
|
||||
int loc = glGetUniformLocation(imm.bound_program, name);
|
||||
|
||||
#if TRUST_NO_ONE
|
||||
assert(loc != -1);
|
||||
#endif
|
||||
|
||||
glUniform4f(loc, x, y, z, w);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user