Add vertex color attribute;

This commit is contained in:
bjorn 2017-10-23 01:33:49 -07:00
parent 5cc0fced70
commit 8db7290ed3
4 changed files with 13 additions and 1 deletions

View File

@ -52,9 +52,11 @@ Mesh* lovrMeshCreate(size_t count, MeshFormat* format, MeshDrawMode drawMode, Me
MeshAttribute position = { .name = "lovrPosition", .type = MESH_FLOAT, .count = 3 };
MeshAttribute normal = { .name = "lovrNormal", .type = MESH_FLOAT, .count = 3 };
MeshAttribute texCoord = { .name = "lovrTexCoord", .type = MESH_FLOAT, .count = 2 };
MeshAttribute vertexColor = { .name = "lovrVertexColor", .type = MESH_BYTE, .count = 4 };
vec_push(&mesh->format, position);
vec_push(&mesh->format, normal);
vec_push(&mesh->format, texCoord);
vec_push(&mesh->format, vertexColor);
}
int stride = 0;

View File

@ -96,6 +96,7 @@ static GLuint linkShaders(GLuint vertexShader, GLuint fragmentShader) {
glBindAttribLocation(program, LOVR_SHADER_POSITION, "lovrPosition");
glBindAttribLocation(program, LOVR_SHADER_NORMAL, "lovrNormal");
glBindAttribLocation(program, LOVR_SHADER_TEX_COORD, "lovrTexCoord");
glBindAttribLocation(program, LOVR_SHADER_VERTEX_COLOR, "lovrVertexColor");
glLinkProgram(program);
int isLinked;
@ -139,6 +140,10 @@ Shader* lovrShaderCreate(const char* vertexSource, const char* fragmentSource) {
lovrGraphicsUseProgram(program);
// Set default vertex color
float defaultVertexColor[4] = { 1., 1., 1., 1. };
glVertexAttrib4fv(LOVR_SHADER_VERTEX_COLOR, defaultVertexColor);
// Uniform introspection
GLint uniformCount;
int textureSlot = 0;

View File

@ -9,6 +9,7 @@
#define LOVR_SHADER_POSITION 0
#define LOVR_SHADER_NORMAL 1
#define LOVR_SHADER_TEX_COORD 2
#define LOVR_SHADER_VERTEX_COLOR 3
#define LOVR_MAX_UNIFORM_LENGTH 256
typedef enum {

View File

@ -19,7 +19,9 @@ const char* lovrShaderVertexPrefix = ""
"in vec3 lovrPosition; \n"
"in vec3 lovrNormal; \n"
"in vec2 lovrTexCoord; \n"
"in vec4 lovrVertexColor; \n"
"out vec2 texCoord; \n"
"out vec4 vertexColor; \n"
"uniform mat4 lovrModel; \n"
"uniform mat4 lovrView; \n"
"uniform mat4 lovrProjection; \n"
@ -37,6 +39,7 @@ const char* lovrShaderFragmentPrefix = ""
"in vec4 gl_FragCoord; \n"
#endif
"in vec2 texCoord; \n"
"in vec4 vertexColor; \n"
"out vec4 lovrFragColor; \n"
"uniform vec4 lovrColor; \n"
"uniform vec4 lovrDiffuseColor; \n"
@ -47,6 +50,7 @@ const char* lovrShaderFragmentPrefix = ""
const char* lovrShaderVertexSuffix = ""
"void main() { \n"
" texCoord = lovrTexCoord; \n"
" vertexColor = lovrVertexColor; \n"
" gl_PointSize = lovrPointSize; \n"
" gl_Position = position(lovrProjection, lovrTransform, vec4(lovrPosition, 1.0)); \n"
"}";
@ -63,7 +67,7 @@ const char* lovrDefaultVertexShader = ""
const char* lovrDefaultFragmentShader = ""
"vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) { \n"
" return graphicsColor * lovrDiffuseColor * texture(image, uv); \n"
" return graphicsColor * lovrDiffuseColor * vertexColor * texture(image, uv); \n"
"}";
const char* lovrSkyboxVertexShader = ""