Browse Source

debug: more complex vertex buffer test.

legacy
Sam Hocevar sam 13 years ago
parent
commit
20214ecc4b
1 changed files with 60 additions and 26 deletions
  1. +60
    -26
      src/debugquad.cpp

+ 60
- 26
src/debugquad.cpp View File

@@ -28,7 +28,7 @@ namespace lol
* DebugQuad implementation class * DebugQuad implementation class
*/ */


#define NUM_SHADERS 3
#define NUM_SHADERS 4


class DebugQuadData class DebugQuadData
{ {
@@ -71,6 +71,7 @@ void DebugQuad::TickDraw(float deltams)


if (!data->initialised && !IsDestroying()) if (!data->initialised && !IsDestroying())
{ {
#if 0
glGenBuffers(3, data->buflist); glGenBuffers(3, data->buflist);


static char const *vertexshader = static char const *vertexshader =
@@ -99,7 +100,9 @@ void DebugQuad::TickDraw(float deltams)
"}\n"; "}\n";
data->shader[0] = Shader::Create(vertexshader, fragmentshader); data->shader[0] = Shader::Create(vertexshader, fragmentshader);
glGenTextures(1, data->texlist); glGenTextures(1, data->texlist);
#endif


/* Checkerboard texture */
glEnable(GL_TEXTURE_2D); glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, data->texlist[0]); glBindTexture(GL_TEXTURE_2D, data->texlist[0]);
for (int j = 0; j < 32; j++) for (int j = 0; j < 32; j++)
@@ -154,33 +157,59 @@ void DebugQuad::TickDraw(float deltams)
"}"); "}");


/* Quad #6: apply texture in fragment shader */ /* Quad #6: apply texture in fragment shader */
/* Quad #8: vertex buffer, apply texture in fragment shader */
data->shader[2] = Shader::Create( data->shader[2] = Shader::Create(
"#version 120\n"
"void main()" "void main()"
"{" "{"
" gl_TexCoord[0] = gl_MultiTexCoord0;" " gl_TexCoord[0] = gl_MultiTexCoord0;"
" gl_Position = gl_Vertex;" " gl_Position = gl_Vertex;"
"}", "}",


"#version 120\n"
"uniform sampler2D tex;" "uniform sampler2D tex;"
"void main()" "void main()"
"{" "{"
" gl_FragColor = texture2D(tex, gl_TexCoord[0].xy * 0.25);" " gl_FragColor = texture2D(tex, gl_TexCoord[0].xy * 0.25);"
"}"); "}");


/* Quad #8: vertex buffer, apply texture in fragment shader */
data->shader[3] = Shader::Create(
"#version 120\n"
"varying vec4 color;"
"void main()"
"{"
" gl_TexCoord[0] = gl_MultiTexCoord0;"
" color = gl_Color;"
" gl_Position = gl_Vertex;"
"}",

"#version 120\n"
"varying vec4 color;"
"uniform sampler2D tex;"
"void main()"
"{"
" vec4 tmp = texture2D(tex, gl_TexCoord[0].xy * 0.25);"
" gl_FragColor = vec4(abs(tmp.xyz - color.xyz), 1.0);"
"}");


data->initialised = 1; data->initialised = 1;
} }
else if (data->initialised && IsDestroying()) else if (data->initialised && IsDestroying())
{ {
#if 0
glDeleteBuffers(3, data->buflist); glDeleteBuffers(3, data->buflist);
#endif
Shader::Destroy(data->shader[0]); Shader::Destroy(data->shader[0]);
Shader::Destroy(data->shader[1]); Shader::Destroy(data->shader[1]);
Shader::Destroy(data->shader[2]); Shader::Destroy(data->shader[2]);
Shader::Destroy(data->shader[3]);
glDeleteTextures(1, data->texlist); glDeleteTextures(1, data->texlist);


data->initialised = 0; data->initialised = 0;
} }


#if 0
float const st = sinf(0.0005f * data->time); float const st = sinf(0.0005f * data->time);
float const ct = cosf(0.0005f * data->time); float const ct = cosf(0.0005f * data->time);


@@ -272,6 +301,7 @@ void DebugQuad::TickDraw(float deltams)
glDisableVertexAttribArray(attr_pos); glDisableVertexAttribArray(attr_pos);
glDisableVertexAttribArray(attr_col); glDisableVertexAttribArray(attr_col);
glDisableVertexAttribArray(attr_tex); glDisableVertexAttribArray(attr_tex);
#endif
#endif #endif


/* Reset GL states */ /* Reset GL states */
@@ -284,7 +314,7 @@ void DebugQuad::TickDraw(float deltams)
glUseProgram(0); glUseProgram(0);


/* Prepare our quad coordinates */ /* Prepare our quad coordinates */
vec2i const layout(4, 3);
vec2i const layout(3, 3);
data->step = vec2(2.0f, -2.0f) / (3 * layout + vec2i(1)); data->step = vec2(2.0f, -2.0f) / (3 * layout + vec2i(1));
data->orig = vec2(-1.0f, 1.0f) + data->step; data->orig = vec2(-1.0f, 1.0f) + data->step;
data->aa = data->orig; data->aa = data->orig;
@@ -296,6 +326,11 @@ void DebugQuad::TickDraw(float deltams)
float f3 = 0.5f + 0.5f * sinf(0.00072f * data->time + 4.0f); float f3 = 0.5f + 0.5f * sinf(0.00072f * data->time + 4.0f);
float f4 = 0.5f + 0.5f * sinf(0.00091f * data->time + 8.0f); float f4 = 0.5f + 0.5f * sinf(0.00091f * data->time + 8.0f);


GLfloat const colors[] = { f1, f2, f3, f4, f2, f1, f3, f1, f4,
f3, f1, f4, f4, f3, f2, f1, f2, f3 };
GLfloat const texcoords[] = { f1, f3, f3, f2, f2, f4,
f2, f4, f4, f1, f1, f3 };

/* Quad #1: simple glBegin program */ /* Quad #1: simple glBegin program */
glColor3f(0.8f, 0.5f, 0.2f); glColor3f(0.8f, 0.5f, 0.2f);
glBegin(GL_TRIANGLES); glBegin(GL_TRIANGLES);
@@ -415,20 +450,18 @@ void DebugQuad::TickDraw(float deltams)
Advance(); Advance();


/* Quad #7: simple vertex buffer */ /* Quad #7: simple vertex buffer */
GLfloat const v1[] = { data->aa.x, data->bb.y, 0.0f,
data->bb.x, data->bb.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->aa.x, data->aa.y, 0.0f,
data->aa.x, data->bb.y, 0.0f };
GLfloat const c1[] = { f1, f2, f3, f4, f2, f1, f3, f1, f4,
f3, f1, f4, f4, f3, f2, f1, f2, f3 };
GLfloat const vertices1[] = { data->aa.x, data->bb.y, 0.0f,
data->bb.x, data->bb.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->aa.x, data->aa.y, 0.0f,
data->aa.x, data->bb.y, 0.0f };


glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);


glColorPointer(3, GL_FLOAT, 0, c1);
glVertexPointer(3, GL_FLOAT, 0, v1);
glColorPointer(3, GL_FLOAT, 0, colors);
glVertexPointer(3, GL_FLOAT, 0, vertices1);
glDrawArrays(GL_TRIANGLES, 0, 6); glDrawArrays(GL_TRIANGLES, 0, 6);


glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
@@ -436,28 +469,29 @@ void DebugQuad::TickDraw(float deltams)


Advance(); Advance();


/* Quad #8: vertex buffer, apply texture in fragment shader */
data->shader[2]->Bind();
GLfloat const v2[] = { data->aa.x, data->bb.y, 0.0f,
data->bb.x, data->bb.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->aa.x, data->aa.y, 0.0f,
data->aa.x, data->bb.y, 0.0f };
GLfloat const t2[] = { f1, f3, f3, f2, f2, f4, f2, f4, f4, f1, f1, f3 };
/* Quad #8: vertex buffer, apply texture and color in fragment shader */
data->shader[3]->Bind();
GLfloat const vertices2[] = { data->aa.x, data->bb.y, 0.0f,
data->bb.x, data->bb.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->bb.x, data->aa.y, 0.0f,
data->aa.x, data->aa.y, 0.0f,
data->aa.x, data->bb.y, 0.0f };


glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);


glTexCoordPointer(2, GL_FLOAT, 0, t2);
glVertexPointer(3, GL_FLOAT, 0, v2);
glVertexPointer(3, GL_FLOAT, 0, vertices2);
glColorPointer(3, GL_FLOAT, 0, colors);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glDrawArrays(GL_TRIANGLES, 0, 6); glDrawArrays(GL_TRIANGLES, 0, 6);


glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY); glDisableClientState(GL_TEXTURE_COORD_ARRAY);


Advance(); Advance();

} }


void DebugQuad::Advance() void DebugQuad::Advance()


Loading…
Cancel
Save