|
|
@@ -14,6 +14,7 @@ |
|
|
|
|
|
|
|
#include <cmath> |
|
|
|
#include <cstdio> |
|
|
|
#include <cstring> |
|
|
|
|
|
|
|
#include "core.h" |
|
|
|
#include "lolgl.h" |
|
|
@@ -28,11 +29,12 @@ namespace lol |
|
|
|
* DebugQuad implementation class |
|
|
|
*/ |
|
|
|
|
|
|
|
static int const NUM_ARRAYS = 2; |
|
|
|
static int const NUM_BUFFERS = 9; |
|
|
|
static int const NUM_ATTRS = 6; |
|
|
|
static int const NUM_SHADERS = 6; |
|
|
|
static int const NUM_TEXTURES = 1; |
|
|
|
static int const NUM_ARRAYS = 10; |
|
|
|
static int const NUM_BUFFERS = 20; |
|
|
|
static int const NUM_ATTRS = 20; |
|
|
|
static int const NUM_UNIFORMS = 20; |
|
|
|
static int const NUM_SHADERS = 20; |
|
|
|
static int const NUM_TEXTURES = 10; |
|
|
|
|
|
|
|
static int const TEX_SIZE = 32; |
|
|
|
|
|
|
@@ -51,8 +53,18 @@ private: |
|
|
|
GLuint buffer[NUM_BUFFERS]; |
|
|
|
Shader *shader[NUM_SHADERS]; |
|
|
|
GLuint attr[NUM_ATTRS]; |
|
|
|
GLuint uni[NUM_UNIFORMS]; |
|
|
|
GLuint texture[NUM_TEXTURES]; |
|
|
|
uint8_t image[1][TEX_SIZE * TEX_SIZE * 4]; |
|
|
|
|
|
|
|
GLfloat const *GetVertexArray() |
|
|
|
{ |
|
|
|
GLfloat tmp[18] = { aa.x, bb.y, 0, bb.x, bb.y, 0, bb.x, aa.y, 0, |
|
|
|
bb.x, aa.y, 0, aa.x, aa.y, 0, aa.x, bb.y, 0 }; |
|
|
|
memcpy(vertices, tmp, sizeof(tmp)); |
|
|
|
return vertices; |
|
|
|
} |
|
|
|
GLfloat vertices[18]; /* To cache quad coordinates */ |
|
|
|
}; |
|
|
|
|
|
|
|
/* |
|
|
@@ -125,7 +137,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
} |
|
|
|
|
|
|
|
/* Prepare our quad coordinates */ |
|
|
|
vec2i const layout(4, 3); |
|
|
|
vec2i const layout(5, 4); |
|
|
|
data->step = vec2(2.0f, -2.0f) / (4 * layout + vec2i(1)); |
|
|
|
data->orig = vec2(-1.0f, 1.0f) + data->step; |
|
|
|
data->aa = data->orig; |
|
|
@@ -149,15 +161,16 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
GLuint *buffer = data->buffer; |
|
|
|
Shader **shader = data->shader; |
|
|
|
GLuint *attr = data->attr; |
|
|
|
GLuint *uni = data->uni; |
|
|
|
|
|
|
|
ResetState(); |
|
|
|
|
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW |
|
|
|
/* |
|
|
|
* Test #1: simple glBegin code |
|
|
|
* |
|
|
|
* Renders an orange square. |
|
|
|
*/ |
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW |
|
|
|
glColor3f(0.8f, 0.5f, 0.2f); |
|
|
|
glBegin(GL_TRIANGLES); |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
@@ -168,6 +181,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glVertex3f(data->aa.x, data->aa.y, 0.0f); |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
|
glEnd(); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
@@ -177,7 +191,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* |
|
|
|
* Renders a multicoloured square with varying colors. |
|
|
|
*/ |
|
|
|
|
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW |
|
|
|
glBegin(GL_TRIANGLES); |
|
|
|
glColor3f(f1, f2, f3); |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
@@ -192,6 +206,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glColor3f(f1, f2, f3); |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
|
glEnd(); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
@@ -202,6 +217,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* Renders a multicoloured square with varying colors multiplied with an |
|
|
|
* animated distorted checkerboard. |
|
|
|
*/ |
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW |
|
|
|
glEnable(GL_TEXTURE_2D); |
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture[0]); |
|
|
|
glColor3f(1.0f, 1.0f, 1.0f); |
|
|
@@ -226,6 +242,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
|
glEnd(); |
|
|
|
glDisable(GL_TEXTURE_2D); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
@@ -235,6 +252,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* |
|
|
|
* Renders a static, coloured and tiled pattern. |
|
|
|
*/ |
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW |
|
|
|
if (!shader[0]) |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"#version 110\n" |
|
|
@@ -263,7 +281,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glVertex3f(data->aa.x, data->aa.y, 0.0f); |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
|
glEnd(); |
|
|
|
glUseProgram(0); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
@@ -274,6 +292,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* |
|
|
|
* Renders a multicoloured square with varying colors. |
|
|
|
*/ |
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW |
|
|
|
if (!shader[0]) |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"#version 110\n" |
|
|
@@ -310,7 +329,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glTexCoord3f(f1, f2, f3); |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
|
glEnd(); |
|
|
|
glUseProgram(0); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
@@ -324,6 +343,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* Note: there is no need to glEnable(GL_TEXTURE_2D) when the |
|
|
|
* texture lookup is done in a shader. |
|
|
|
*/ |
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW |
|
|
|
if (!shader[0]) |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"#version 110\n" |
|
|
@@ -358,11 +378,10 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glTexCoord2f(f1, f3); |
|
|
|
glVertex3f(data->aa.x, data->bb.y, 0.0f); |
|
|
|
glEnd(); |
|
|
|
glUseProgram(0); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #7: simple vertex buffer |
|
|
@@ -370,24 +389,17 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* Renders an orange square. |
|
|
|
*/ |
|
|
|
#if !defined ANDROID_NDK |
|
|
|
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 }; |
|
|
|
|
|
|
|
glColor4f(0.8f, 0.5f, 0.2f, 1.0f); |
|
|
|
glEnableClientState(GL_VERTEX_ARRAY); |
|
|
|
|
|
|
|
glVertexPointer(3, GL_FLOAT, 0, vertices1); |
|
|
|
glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray()); |
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 6); |
|
|
|
|
|
|
|
glDisableClientState(GL_VERTEX_ARRAY); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #8: vertex buffer + per-vertex coloring |
|
|
@@ -395,26 +407,19 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* Renders a multicoloured square with varying colors. |
|
|
|
*/ |
|
|
|
#if !defined ANDROID_NDK |
|
|
|
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_VERTEX_ARRAY); |
|
|
|
glEnableClientState(GL_COLOR_ARRAY); |
|
|
|
|
|
|
|
glVertexPointer(3, GL_FLOAT, 0, vertices2); |
|
|
|
glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray()); |
|
|
|
glColorPointer(3, GL_FLOAT, 0, colors); |
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 6); |
|
|
|
|
|
|
|
glDisableClientState(GL_VERTEX_ARRAY); |
|
|
|
glDisableClientState(GL_COLOR_ARRAY); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #9: vertex buffer + per-vertex coloring + texture |
|
|
@@ -423,20 +428,13 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
* animated distorted checkerboard. |
|
|
|
*/ |
|
|
|
#if !defined ANDROID_NDK |
|
|
|
GLfloat const vertices3[] = { 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 }; |
|
|
|
|
|
|
|
glEnable(GL_TEXTURE_2D); |
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture[0]); |
|
|
|
glEnableClientState(GL_VERTEX_ARRAY); |
|
|
|
glEnableClientState(GL_COLOR_ARRAY); |
|
|
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
|
|
|
|
|
|
glVertexPointer(3, GL_FLOAT, 0, vertices3); |
|
|
|
glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray()); |
|
|
|
glColorPointer(3, GL_FLOAT, 0, colors); |
|
|
|
glTexCoordPointer(2, GL_FLOAT, 0, texcoords); |
|
|
|
|
|
|
@@ -446,19 +444,176 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glDisableClientState(GL_COLOR_ARRAY); |
|
|
|
glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
|
|
|
glDisable(GL_TEXTURE_2D); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #10: vertex buffer + hardcoded color in 1.10 fragment shader |
|
|
|
* (GLSL) or in Cg fragment shader (PS3) |
|
|
|
* |
|
|
|
* Renders an orange square. |
|
|
|
*/ |
|
|
|
#if !defined ANDROID_NDK |
|
|
|
if (!shader[0]) |
|
|
|
#if !defined __CELLOS_LV2__ |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"#version 110\n" |
|
|
|
"void main()" |
|
|
|
"{" |
|
|
|
" gl_Position = gl_Vertex;" |
|
|
|
"}", |
|
|
|
|
|
|
|
"#version 110\n" |
|
|
|
"void main()" |
|
|
|
"{" |
|
|
|
" gl_FragColor = vec4(0.8, 0.5, 0.2, 1.0);" |
|
|
|
"}"); |
|
|
|
#else |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"void main(float4 in_Position : POSITION," |
|
|
|
" out float4 out_Position : POSITION)" |
|
|
|
"{" |
|
|
|
" out_Position = in_Position;" |
|
|
|
"}", |
|
|
|
|
|
|
|
"void main(out float4 out_FragColor : COLOR)" |
|
|
|
"{" |
|
|
|
" out_FragColor = float4(0.8, 0.5, 0.2, 1.0);" |
|
|
|
"}"); |
|
|
|
#endif |
|
|
|
shader[0]->Bind(); |
|
|
|
shader++; |
|
|
|
|
|
|
|
glEnableClientState(GL_VERTEX_ARRAY); |
|
|
|
glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray()); |
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 6); |
|
|
|
glDisableClientState(GL_VERTEX_ARRAY); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #10: vertex buffer + texture & color in 1.10 fragment shader |
|
|
|
* Test #11: vertex buffer + uniform color in 1.10 fragment shader |
|
|
|
* (GLSL) or in Cg fragment shader (PS3) |
|
|
|
* |
|
|
|
* Renders an orange square. |
|
|
|
*/ |
|
|
|
#if !defined ANDROID_NDK |
|
|
|
if (!shader[0]) |
|
|
|
{ |
|
|
|
#if !defined __CELLOS_LV2__ |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"#version 110\n" |
|
|
|
"void main()" |
|
|
|
"{" |
|
|
|
" gl_Position = gl_Vertex;" |
|
|
|
"}", |
|
|
|
|
|
|
|
"#version 110\n" |
|
|
|
"uniform vec4 in_Color;" |
|
|
|
"void main()" |
|
|
|
"{" |
|
|
|
" gl_FragColor = in_Color;" |
|
|
|
"}"); |
|
|
|
#else |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"void main(float4 in_Position : POSITION," |
|
|
|
" out float4 out_Position : POSITION)" |
|
|
|
"{" |
|
|
|
" out_Position = in_Position;" |
|
|
|
"}", |
|
|
|
|
|
|
|
"uniform float4 in_Color;" |
|
|
|
"void main(out float4 out_FragColor : COLOR)" |
|
|
|
"{" |
|
|
|
" out_FragColor = in_Color;" |
|
|
|
"}"); |
|
|
|
#endif |
|
|
|
uni[0] = shader[0]->GetUniformLocation("in_Color"); |
|
|
|
} |
|
|
|
shader[0]->Bind(); |
|
|
|
shader++; |
|
|
|
#if !defined __CELLOS_LV2__ |
|
|
|
glUniform4f(uni[0], 0.8f, 0.5f, 0.2f, 1.0f); |
|
|
|
#else |
|
|
|
cgGLSetParameter4f((CGparameter)(intptr_t)uni[0], 0.8f, 0.5f, 0.2f, 1.0f); |
|
|
|
#endif |
|
|
|
uni++; |
|
|
|
|
|
|
|
glEnableClientState(GL_VERTEX_ARRAY); |
|
|
|
glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray()); |
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 6); |
|
|
|
glDisableClientState(GL_VERTEX_ARRAY); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #12: vertex buffer + color in 1.10 fragment shader (GLSL) or |
|
|
|
* in Cg fragment shader (PS3) |
|
|
|
* |
|
|
|
* Renders a static, coloured and tiled pattern. |
|
|
|
*/ |
|
|
|
#if !defined ANDROID_NDK |
|
|
|
if (!shader[0]) |
|
|
|
#if !defined __CELLOS_LV2__ |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"#version 110\n" |
|
|
|
"void main()" |
|
|
|
"{" |
|
|
|
" gl_Position = gl_Vertex;" |
|
|
|
"}", |
|
|
|
|
|
|
|
"#version 110\n" |
|
|
|
"void main()" |
|
|
|
"{" |
|
|
|
" float dx = mod(gl_FragCoord.x * gl_FragCoord.y, 2.0);" |
|
|
|
" float dy = mod(gl_FragCoord.x * 0.125, 1.0);" |
|
|
|
" float dz = mod(gl_FragCoord.y * 0.125, 1.0);" |
|
|
|
" gl_FragColor = vec4(dx, dy, dz, 1.0);" |
|
|
|
"}"); |
|
|
|
#else |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"void main(float4 in_Position : POSITION," |
|
|
|
" out float4 out_Position : POSITION)" |
|
|
|
"{" |
|
|
|
" out_Position = in_Position;" |
|
|
|
"}", |
|
|
|
|
|
|
|
"void main(float4 in_FragCoord : WPOS," |
|
|
|
" out float4 out_FragColor : COLOR)" |
|
|
|
"{" |
|
|
|
" float dx = frac(in_FragCoord.x * in_FragCoord.y * 0.5) * 2.0;" |
|
|
|
" float dy = frac(in_FragCoord.x * 0.125);" |
|
|
|
" float dz = frac(in_FragCoord.y * 0.125);" |
|
|
|
" out_FragColor = float4(dx, dy, dz, 1.0);" |
|
|
|
"}"); |
|
|
|
#endif |
|
|
|
shader[0]->Bind(); |
|
|
|
shader++; |
|
|
|
|
|
|
|
glEnableClientState(GL_VERTEX_ARRAY); |
|
|
|
glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray()); |
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 6); |
|
|
|
glDisableClientState(GL_VERTEX_ARRAY); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #13: vertex buffer + texture & color in 1.10 fragment shader |
|
|
|
* |
|
|
|
* Renders a multicoloured square with varying colors xored with an |
|
|
|
* animated distorted checkerboard. |
|
|
|
*/ |
|
|
|
#if !defined __CELLOS_LV2__ && !defined ANDROID_NDK |
|
|
|
#if !defined ANDROID_NDK |
|
|
|
if (!shader[0]) |
|
|
|
#if !defined __CELLOS_LV2__ |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"#version 110\n" |
|
|
|
"varying vec4 pass_Color;" |
|
|
@@ -477,15 +632,32 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
" vec4 tmp = texture2D(tex, gl_TexCoord[0].xy * 0.25);" |
|
|
|
" gl_FragColor = vec4(abs(tmp.xyz - pass_Color.xyz), 1.0);" |
|
|
|
"}"); |
|
|
|
#else |
|
|
|
shader[0] = Shader::Create( |
|
|
|
"void main(float4 in_Position : POSITION," |
|
|
|
" float2 in_TexCoord : TEXCOORD0," |
|
|
|
" float4 in_Color : COLOR," |
|
|
|
" out float4 out_Color : COLOR," |
|
|
|
" out float4 out_Position : POSITION," |
|
|
|
" out float2 out_TexCoord : TEXCOORD0)" |
|
|
|
"{" |
|
|
|
" out_TexCoord = in_TexCoord;" |
|
|
|
" out_Color = in_Color;" |
|
|
|
" out_Position = in_Position;" |
|
|
|
"}", |
|
|
|
|
|
|
|
"void main(float2 in_TexCoord : TEXCOORD0," |
|
|
|
" float4 in_Color : COLOR," |
|
|
|
" uniform sampler2D tex," |
|
|
|
" out float4 out_FragColor : COLOR)" |
|
|
|
"{" |
|
|
|
" float4 tmp = tex2D(tex, in_TexCoord * 0.25);" |
|
|
|
" out_FragColor = float4(abs(tmp.xyz - in_Color.xyz), 1);" |
|
|
|
"}"); |
|
|
|
#endif |
|
|
|
|
|
|
|
shader[0]->Bind(); |
|
|
|
shader++; |
|
|
|
GLfloat const vertices4[] = { 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 }; |
|
|
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture[0]); |
|
|
|
|
|
|
@@ -493,7 +665,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glEnableClientState(GL_COLOR_ARRAY); |
|
|
|
glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
|
|
|
|
|
|
|
glVertexPointer(3, GL_FLOAT, 0, vertices4); |
|
|
|
glVertexPointer(3, GL_FLOAT, 0, data->GetVertexArray()); |
|
|
|
glColorPointer(3, GL_FLOAT, 0, colors); |
|
|
|
glTexCoordPointer(2, GL_FLOAT, 0, texcoords); |
|
|
|
glDrawArrays(GL_TRIANGLES, 0, 6); |
|
|
@@ -501,14 +673,13 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glDisableClientState(GL_VERTEX_ARRAY); |
|
|
|
glDisableClientState(GL_COLOR_ARRAY); |
|
|
|
glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
|
|
|
glUseProgram(0); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #11: vertex buffer + texture & color in 1.20 fragment shader |
|
|
|
* Test #14: vertex buffer + texture & color in 1.20 fragment shader |
|
|
|
* |
|
|
|
* Renders a multicoloured square with varying colors xored with an |
|
|
|
* animated distorted checkerboard. |
|
|
@@ -543,20 +714,14 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
} |
|
|
|
shader[0]->Bind(); |
|
|
|
shader++; |
|
|
|
GLfloat const vertices5[] = { 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 }; |
|
|
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture[0]); |
|
|
|
|
|
|
|
glBindVertexArray(*array++); |
|
|
|
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, *buffer++); |
|
|
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices5), vertices5, |
|
|
|
GL_DYNAMIC_DRAW); |
|
|
|
glBufferData(GL_ARRAY_BUFFER, 3 * 6 * sizeof(GLfloat), |
|
|
|
data->GetVertexArray(), GL_DYNAMIC_DRAW); |
|
|
|
glVertexAttribPointer(attr[0], 3, GL_FLOAT, GL_FALSE, 0, 0); |
|
|
|
glEnableVertexAttribArray(attr[0]); |
|
|
|
|
|
|
@@ -578,14 +743,13 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glDisableVertexAttribArray(*attr++); |
|
|
|
glDisableVertexAttribArray(*attr++); |
|
|
|
glDisableVertexAttribArray(*attr++); |
|
|
|
glUseProgram(0); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* |
|
|
|
* Test #12: vertex buffer + texture & color in 1.30 fragment shader |
|
|
|
* Test #15: vertex buffer + texture & color in 1.30 fragment shader |
|
|
|
* |
|
|
|
* Renders a multicoloured square with varying colors xored with an |
|
|
|
* animated distorted checkerboard. |
|
|
@@ -620,20 +784,14 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
} |
|
|
|
shader[0]->Bind(); |
|
|
|
shader++; |
|
|
|
GLfloat const vertices6[] = { 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 }; |
|
|
|
|
|
|
|
glBindTexture(GL_TEXTURE_2D, data->texture[0]); |
|
|
|
|
|
|
|
glBindVertexArray(*array++); |
|
|
|
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, *buffer++); |
|
|
|
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices6), vertices6, |
|
|
|
GL_DYNAMIC_DRAW); |
|
|
|
glBufferData(GL_ARRAY_BUFFER, 3 * 6 * sizeof(GLfloat), |
|
|
|
data->GetVertexArray(), GL_DYNAMIC_DRAW); |
|
|
|
glVertexAttribPointer(attr[0], 3, GL_FLOAT, GL_FALSE, 0, 0); |
|
|
|
glEnableVertexAttribArray(attr[0]); |
|
|
|
|
|
|
@@ -655,11 +813,10 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
glDisableVertexAttribArray(*attr++); |
|
|
|
glDisableVertexAttribArray(*attr++); |
|
|
|
glDisableVertexAttribArray(*attr++); |
|
|
|
glUseProgram(0); |
|
|
|
#endif |
|
|
|
|
|
|
|
Advance(); |
|
|
|
ResetState(); |
|
|
|
#endif |
|
|
|
|
|
|
|
/* Check that we didn't overflow our list */ |
|
|
|
#if !defined __CELLOS_LV2__ && !defined ANDROID_NDK |
|
|
@@ -677,6 +834,7 @@ void DebugQuad::TickDraw(float deltams) |
|
|
|
void DebugQuad::ResetState() |
|
|
|
{ |
|
|
|
/* Reset GL states to something reasonably safe */ |
|
|
|
|
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW || defined __CELLOS_LV2__ |
|
|
|
glMatrixMode(GL_PROJECTION); |
|
|
|
glLoadIdentity(); |
|
|
@@ -684,6 +842,8 @@ void DebugQuad::ResetState() |
|
|
|
glLoadIdentity(); |
|
|
|
#endif |
|
|
|
|
|
|
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); |
|
|
|
|
|
|
|
glEnable(GL_TEXTURE_2D); |
|
|
|
glBindTexture(GL_TEXTURE_2D, 0); |
|
|
|
#if defined HAVE_GLBEGIN || defined USE_GLEW || defined __CELLOS_LV2__ |
|
|
@@ -694,6 +854,9 @@ void DebugQuad::ResetState() |
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, 0); |
|
|
|
#if !defined __CELLOS_LV2__ |
|
|
|
glUseProgram(0); |
|
|
|
#else |
|
|
|
cgGLDisableProfile(cgGLGetLatestProfile(CG_GL_VERTEX)); |
|
|
|
cgGLDisableProfile(cgGLGetLatestProfile(CG_GL_FRAGMENT)); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|