Browse Source

OpenGL code refactoring.

legacy
Sam Hocevar sam 14 years ago
parent
commit
136510f0be
2 changed files with 23 additions and 25 deletions
  1. +8
    -1
      src/scene.cpp
  2. +15
    -24
      src/video.cpp

+ 8
- 1
src/scene.cpp View File

@@ -38,7 +38,7 @@ struct Tile
#if LOL_EXPERIMENTAL #if LOL_EXPERIMENTAL
extern Shader *stdshader; extern Shader *stdshader;
#endif #endif
extern mat4 projection_matrix, view_matrix, model_matrix;
extern mat4 model_matrix;


/* /*
* Scene implementation class * Scene implementation class
@@ -210,6 +210,13 @@ void Scene::Render() // XXX: rename to Blit()
glBindVertexArray(0); glBindVertexArray(0);


#else #else
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GEQUAL, 0.01f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glLoadIdentity(); glLoadIdentity();
glMultMatrixf(&model_matrix[0][0]); glMultMatrixf(&model_matrix[0][0]);




+ 15
- 24
src/video.cpp View File

@@ -31,7 +31,7 @@
#if LOL_EXPERIMENTAL #if LOL_EXPERIMENTAL
Shader *stdshader; Shader *stdshader;
#endif #endif
mat4 projection_matrix, view_matrix, model_matrix;
mat4 proj_matrix, view_matrix, model_matrix;


#if LOL_EXPERIMENTAL #if LOL_EXPERIMENTAL
static char const *vertexshader = static char const *vertexshader =
@@ -41,14 +41,14 @@ static char const *vertexshader =
"in vec3 in_Color;\n" "in vec3 in_Color;\n"
"in vec2 in_TexCoord;\n" "in vec2 in_TexCoord;\n"
"out vec3 pass_Color;\n" "out vec3 pass_Color;\n"
"uniform mat4 projection_matrix;\n"
"uniform mat4 proj_matrix;\n"
"uniform mat4 view_matrix;\n" "uniform mat4 view_matrix;\n"
"uniform mat4 model_matrix;\n" "uniform mat4 model_matrix;\n"
"\n" "\n"
"void main()\n" "void main()\n"
"{\n" "{\n"
" gl_Position = projection_matrix * view_matrix *"
" model_matrix * vec4(in_Position, 1.0f);\n"
" gl_Position = proj_matrix * view_matrix * model_matrix"
" * vec4(in_Position, 1.0f);\n"
" gl_TexCoord[0] = vec4(in_TexCoord, 0.0, 0.0);\n" " gl_TexCoord[0] = vec4(in_TexCoord, 0.0, 0.0);\n"
" pass_Color = in_Color;\n" " pass_Color = in_Color;\n"
"}\n"; "}\n";
@@ -103,7 +103,7 @@ void Video::SetFov(float theta)
if (theta < 1e-4f) if (theta < 1e-4f)
{ {
/* The easy way: purely orthogonal projection. */ /* The easy way: purely orthogonal projection. */
proj = mat4::ortho(0, width, 0, height, near, far);
proj_matrix = mat4::ortho(0, width, 0, height, near, far);
} }
else else
{ {
@@ -123,22 +123,22 @@ void Video::SetFov(float theta)
near = 1.0f; near = 1.0f;
} }


proj = mat4::frustum(-near * t1, near * t1,
-near * t2, near * t2, near, far)
* mat4::translate(-0.5f * width, -0.5f * height, -dist);
proj_matrix = mat4::frustum(-near * t1, near * t1,
-near * t2, near * t2, near, far)
* mat4::translate(-0.5f * width, -0.5f * height, -dist);
} }


#if LOL_EXPERIMENTAL
projection_matrix = proj;
view_matrix = mat4(1.0f); view_matrix = mat4(1.0f);
#else

#if !LOL_EXPERIMENTAL
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
glLoadIdentity(); glLoadIdentity();
glMultMatrixf(&proj[0][0]);
glMultMatrixf(&proj_matrix[0][0]);


/* Reset the model view matrix, just in case */ /* Reset the model view matrix, just in case */
glMatrixMode(GL_MODELVIEW); glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); glLoadIdentity();
glMultMatrixf(&view_matrix[0][0]);
#endif #endif
} }


@@ -152,24 +152,15 @@ void Video::SetDepth(bool set)


void Video::Clear() void Video::Clear()
{ {
#if LOL_EXPERIMENTAL
glViewport(0, 0, GetWidth(), GetHeight()); glViewport(0, 0, GetWidth(), GetHeight());
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);


#if LOL_EXPERIMENTAL
GLuint uni; GLuint uni;
uni = stdshader->GetUniformLocation("projection_matrix");
glUniformMatrix4fv(uni, 1, GL_FALSE, &projection_matrix[0][0]);
uni = stdshader->GetUniformLocation("proj_matrix");
glUniformMatrix4fv(uni, 1, GL_FALSE, &proj_matrix[0][0]);
uni = stdshader->GetUniformLocation("view_matrix"); uni = stdshader->GetUniformLocation("view_matrix");
glUniformMatrix4fv(uni, 1, GL_FALSE, &view_matrix[0][0]); glUniformMatrix4fv(uni, 1, GL_FALSE, &view_matrix[0][0]);
#else
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GEQUAL, 0.01f);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
#endif #endif


SetFov(0.0f); SetFov(0.0f);


Loading…
Cancel
Save