opengl_x11

Playing with OpenGL
git clone git://bsandro.tech/opengl_x11
Log | Files | Refs | README | LICENSE

commit 2e3cf4e48f6aec3834e75675b2fd7847beabdc3b
parent 9e27f5e0bb85d094da7b93b84b0190f201fa9c1c
Author: bsandro <email@bsandro.tech>
Date:   Sun, 30 Nov 2025 22:39:10 +0200

squares are colored differently now

Diffstat:
Mobj2d.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);