|
From: Johnny O. <js...@us...> - 2010-10-27 01:21:19
|
Module: performous
Branch: opengl2
Commit: 214bc938de8b7abb88b1a1664ff8ae2ffcf9276e
Author: Johnny Oskarsson <js...@us...>
Date: Wed Oct 27 02:27:43 2010 +0200
Initial opengl2 branch commit.
Already much of the code has been ported to use Vertex Arrays and VBOs, but it will
need more work/cleanup.
TODO:
* Lighting (haven't added shader code for that yet, so everything is shadeless)
* The guitar screen wont show up when starting a new game. Don't know why really.
* This branch needs to get up-to-date with the master branch.
* Cleanup code and create sensible (in both naming and usability) functions in glutil.hh,
it is somewhat spread here and there right now.
* There are still a few glBegin()s left. Should be quite easy to exterminate. :)
---
game/glshader.cc | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
game/glshader.hh | 11 +++++++++
2 files changed, 73 insertions(+), 0 deletions(-)
diff --git a/game/glshader.cc b/game/glshader.cc
new file mode 100644
index 0000000..6c9c971
--- /dev/null
+++ b/game/glshader.cc
@@ -0,0 +1,62 @@
+#include "glutil.hh"
+
+namespace {
+ const char *vertex_glsl =
+ "void main()"
+ "{"
+ " gl_FrontColor = gl_Color;"
+ " gl_BackColor = gl_Color;"
+ " gl_TexCoord[0] = gl_MultiTexCoord0;"
+ " gl_Position = ftransform();"
+ "}\000";
+
+ const char *fragment_glsl =
+ "uniform int texMode;"
+ "uniform sampler2D tex;"
+ "uniform sampler2DRect texrect;"
+ "void main()"
+ "{"
+ " vec4 texel;"
+ " vec4 color;"
+ " if (texMode == 1) {"
+ " texel = texture2D(tex,gl_TexCoord[0].st).rgba;"
+ " } else if (texMode == 2) {"
+ " texel = texture(texrect,gl_TexCoord[0].st).rgba;"
+ " } else if (texMode == 0) {"
+ " texel = gl_Color;"
+ " } else {"
+ " texel = vec4(1.0,0.0,0.0,1.0);"
+ " }"
+ " gl_FragColor = vec4(texel.rgb*gl_Color.rgb,texel.a*gl_Color.a);"
+ "}\000";
+}
+
+void glshader::newShader(struct glshader::Shader *s) {
+ s->vert_shader = glCreateShader(GL_VERTEX_SHADER);
+ s->frag_shader = glCreateShader(GL_FRAGMENT_SHADER);
+
+ glShaderSource(s->vert_shader, 1, &vertex_glsl, NULL);
+ glShaderSource(s->frag_shader, 1, &fragment_glsl, NULL);
+
+ glCompileShader(s->vert_shader);
+ glGetShaderiv(s->vert_shader,GL_COMPILE_STATUS,&(s->gl_response));
+ if (s->gl_response != GL_TRUE) std::cerr << "Something went wrong compiling the vertex shader." << std::endl;
+
+ glCompileShader(s->frag_shader);
+ glGetShaderiv(s->frag_shader,GL_COMPILE_STATUS,&(s->gl_response));
+ if (s->gl_response != GL_TRUE) std::cerr << "Something went wrong compiling the fragment shader." << std::endl;
+
+ s->program = glCreateProgram();
+
+ glAttachShader(s->program,s->vert_shader);
+ glAttachShader(s->program,s->frag_shader);
+
+ glLinkProgram(s->program);
+ glUseProgram(s->program);
+}
+
+void glshader::deleteShader(struct glshader::Shader *s) {
+ glDeleteProgram(s->program);
+ glDeleteShader(s->vert_shader);
+ glDeleteShader(s->frag_shader);
+}
diff --git a/game/glshader.hh b/game/glshader.hh
new file mode 100644
index 0000000..073d6d2
--- /dev/null
+++ b/game/glshader.hh
@@ -0,0 +1,11 @@
+#pragma once
+
+namespace glshader {
+ struct Shader {
+ GLuint program, vert_shader, frag_shader;
+ int gl_response;
+ };
+
+ void newShader(struct Shader *s);
+ void deleteShader(struct Shader *s);
+}
|