mirror of https://github.com/bjornbytes/lovr.git
Add vertex color attribute;
This commit is contained in:
parent
5cc0fced70
commit
8db7290ed3
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 = ""
|
||||
|
|
Loading…
Reference in New Issue