From f497abc8ac57ddfc19ec1fea68725ba5d5b2b61c Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Thu, 11 Jun 2015 20:40:17 -0400 Subject: [PATCH] add a second test program and second set of buffers --- test/frag2.glsl | 6 ++++++ test/test.cpp | 44 +++++++++++++++++++++++++++++++++++++++++++- test/vert2.glsl | 10 ++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 test/frag2.glsl create mode 100644 test/vert2.glsl diff --git a/test/frag2.glsl b/test/frag2.glsl new file mode 100644 index 0000000..df0575d --- /dev/null +++ b/test/frag2.glsl @@ -0,0 +1,6 @@ +varying vec4 color_i; + +void main(void) +{ + gl_FragColor = color_i; +} diff --git a/test/test.cpp b/test/test.cpp index 51026f8..e06c4c5 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -9,9 +9,14 @@ using namespace std; #define HEIGHT 600 shared_ptr vs; +shared_ptr vs2; shared_ptr fs; +shared_ptr fs2; shared_ptr program; +shared_ptr program2; shared_ptr buffer; +shared_ptr buffer2; +shared_ptr buffer3; bool init(void) { @@ -19,20 +24,46 @@ bool init(void) try { vs = make_shared(); + vs2 = make_shared(); fs = make_shared(); + fs2 = make_shared(); program = make_shared(); + program2 = make_shared(); buffer = make_shared(); + buffer2 = make_shared(); + buffer3 = make_shared(); vs->create_from_file(GL_VERTEX_SHADER, "test/vert.glsl"); fs->create_from_file(GL_FRAGMENT_SHADER, "test/frag.glsl"); program->create(vs, fs); +// program->bind_attribute("position", 0); + + vs2->create_from_file(GL_VERTEX_SHADER, "test/vert2.glsl"); + fs2->create_from_file(GL_FRAGMENT_SHADER, "test/frag2.glsl"); + program2->create(vs2, fs2); +// program2->bind_attribute("position", 0); +// program2->bind_attribute("color", 1); + GLfloat coords[] = { -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, - -0.5, 0.5 + -0.5, 0.5, }; buffer->create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, &coords, sizeof(coords)); + + GLfloat coords2[] = { + 0.2, 0.2, + 0.9, 0.2, + 0.9, 0.9, + }; + buffer2->create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, &coords2, sizeof(coords2)); + GLfloat colors[] = { + 1.0, 0.1, 0.1, 1.0, + 0.1, 1.0, 0.1, 1.0, + 0.1, 0.1, 1.0, 1.0, + }; + buffer3->create(GL_ARRAY_BUFFER, GL_STATIC_DRAW, &colors, sizeof(colors)); } catch (glcxx::Error & e) { @@ -45,12 +76,23 @@ bool init(void) void display(SDL_Window * window) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glEnableVertexAttribArray(0); + buffer->bind(); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), NULL); program->use(); GLint uniform_location = program->get_uniform_location("color"); glUniform4f(uniform_location, 1.0, 0.6, 0.2, 1.0); glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + glEnableVertexAttribArray(1); + buffer2->bind(); + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), NULL); + buffer3->bind(); + glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), NULL); + program2->use(); + glDrawArrays(GL_TRIANGLE_FAN, 0, 3); + SDL_GL_SwapWindow(window); } diff --git a/test/vert2.glsl b/test/vert2.glsl new file mode 100644 index 0000000..f4eafc5 --- /dev/null +++ b/test/vert2.glsl @@ -0,0 +1,10 @@ +attribute vec2 position; +attribute vec4 color; + +varying vec4 color_i; + +void main(void) +{ + gl_Position = vec4(position, 0, 1); + color_i = color; +}