commit 2e3cf4e48f6aec3834e75675b2fd7847beabdc3b
parent 9e27f5e0bb85d094da7b93b84b0190f201fa9c1c
Author: bsandro <email@bsandro.tech>
Date: Sun, 30 Nov 2025 22:39:10 +0200
squares are colored differently now
Diffstat:
| M | obj2d.c | | | 31 | +++++++++++++++++++------------ |
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/obj2d.c b/obj2d.c
@@ -36,8 +36,11 @@ static double t_started;
static const GLchar *vertexSrc = R"(
#version 420
layout(location=0) in vec2 position;
+layout(location=1) in vec3 color;
+out vec3 dotColor;
void main() {
gl_Position = vec4(position, 0.0, 1.0);
+ dotColor = color;
}
)";
@@ -45,7 +48,10 @@ static const GLchar *geometrySrc = R"(
#version 420
layout(points) in;
layout(line_strip,max_vertices=6) out;
+in vec3 dotColor[];
+out vec3 fColor;
void main() {
+ fColor = dotColor[0];
vec4 p = gl_in[0].gl_Position;
gl_Position = p+vec4(-0.1, -0.1, 0.0, 0.0);
EmitVertex();
@@ -64,13 +70,10 @@ void main() {
static const GLchar *fragmentSrc = R"(
#version 420
uniform double iTime;
+in vec3 fColor;
out vec4 outColor;
void main() {
- vec3 color;
- color.r = 0.2;
- color.g = 0.6;
- color.b = 0.1;
- outColor = vec4(color, 1.0);
+ outColor = vec4(fColor, 1.0);
}
)";
@@ -94,6 +97,7 @@ static GLuint linkProgram(GLuint vertex, GLuint geometry, GLuint fragment) {
glAttachShader(shaderProgram, geometry);
glAttachShader(shaderProgram, fragment);
glBindAttribLocation(shaderProgram, 0, "position");
+ glBindAttribLocation(shaderProgram, 1, "color");
glLinkProgram(shaderProgram);
return shaderProgram;
}
@@ -151,12 +155,12 @@ int main(int argc, char *argv[]) {
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
- // x,y
- static const GLfloat vertices[][2] = {
- {-0.3, -0.5},
- { 0.6, -0.1},
- { 0.4, 0.4},
- {-0.5, 0.6}
+ // x,y, color(r,g,b)
+ static const GLfloat vertices[][5] = {
+ {-0.3, -0.5, 1.f, 0.f, 0.f},
+ { 0.6, -0.1, 0.f, 1.f, 0.f},
+ { 0.4, 0.4, 0.f, 0.f, 1.f},
+ {-0.5, 0.6, 1.f, 1.f, 0.f}
};
GLuint vbo;
@@ -174,8 +178,11 @@ int main(int argc, char *argv[]) {
printf("shader link status: %s\n", prgStatus == GL_TRUE ? "ok" : "error");
GLint position = glGetAttribLocation(shaderPrg, "position");
- glVertexAttribPointer(position, 2, GL_FLOAT, GL_FALSE, 2*sizeof(GLfloat), (void *)0);
+ glVertexAttribPointer(position, 2, GL_FLOAT, GL_FALSE, 5*sizeof(GLfloat), (void *)0);
glEnableVertexAttribArray(position);
+ GLint color = glGetAttribLocation(shaderPrg, "color");
+ glVertexAttribPointer(color, 3, GL_FLOAT, GL_FALSE, 5*sizeof(GLfloat), (void*)(2*sizeof(GLfloat)));
+ glEnableVertexAttribArray(color);
glLineWidth(1.f);
glPointSize(4.f);