refactor shader code into DefaultShader class

This commit is contained in:
Josh Holtrop 2013-12-07 22:42:59 -05:00
parent b425c9b8d2
commit 5c4cfad936
2 changed files with 48 additions and 31 deletions

38
src/default_shader.d Normal file
View File

@ -0,0 +1,38 @@
import derelict.opengl3.gl3;
import glamour.shader;
class DefaultShader
{
public GLint view_idx;
public GLint position_idx;
public GLint color_idx;
protected Shader m_program;
this()
{
immutable string shader_src = `
vertex:
uniform mat4 view;
in vec2 position;
void main(void)
{
gl_Position = view * vec4(position, 0.0, 1.0);
}
fragment:
uniform vec3 color;
void main(void)
{
gl_FragColor = vec4(color, 1.0);
}
`;
m_program = new Shader("program", shader_src);
view_idx = m_program.get_uniform_location("view");
position_idx = m_program.get_attrib_location("position");
color_idx = m_program.get_uniform_location("color");
}
void bind()
{
m_program.bind();
}
}

View File

@ -2,10 +2,11 @@ import std.stdio;
import derelict.sdl2.sdl; import derelict.sdl2.sdl;
import derelict.opengl3.gl3; import derelict.opengl3.gl3;
import glamour.vao; import glamour.vao;
import glamour.shader;
import glamour.vbo; import glamour.vbo;
import gl3n.linalg; import gl3n.linalg;
static import logo; static import logo;
import default_shader;
immutable int N_GENTEX = 6; immutable int N_GENTEX = 6;
immutable int N_CORPORATION = 11; immutable int N_CORPORATION = 11;
@ -14,37 +15,16 @@ class ScreenSaver
{ {
protected int m_width; protected int m_width;
protected int m_height; protected int m_height;
protected GLint m_position_idx;
protected GLint m_view_idx;
protected GLint m_color_idx;
protected Shader m_program;
protected SDL_Window * m_window; protected SDL_Window * m_window;
protected SDL_GLContext m_context; protected SDL_GLContext m_context;
DefaultShader m_shader;
protected void init() protected void init()
{ {
glClearColor (0.0, 0.0, 0.0, 0.0); glClearColor (0.0, 0.0, 0.0, 0.0);
glViewport(0, 0, m_width, m_height); glViewport(0, 0, m_width, m_height);
immutable string shader_src = ` m_shader = new DefaultShader();
vertex: m_shader.bind();
uniform mat4 view;
in vec2 position;
void main(void)
{
gl_Position = view * vec4(position, 0.0, 1.0);
}
fragment:
uniform vec3 color;
void main(void)
{
gl_FragColor = vec4(color, 1.0);
}
`;
m_program = new Shader("program", shader_src);
m_program.bind();
m_position_idx = m_program.get_attrib_location("position");
m_view_idx = m_program.get_uniform_location("view");
m_color_idx = m_program.get_uniform_location("color");
} }
protected void draw_letter(int word, int character) protected void draw_letter(int word, int character)
@ -53,12 +33,12 @@ class ScreenSaver
(word == logo.GENTEX) (word == logo.GENTEX)
? [0.0, 93.0/255.0, 171.0/255.0] ? [0.0, 93.0/255.0, 171.0/255.0]
: [187.0/255.0, 188.0/255.0, 190.0/255.0]; : [187.0/255.0, 188.0/255.0, 190.0/255.0];
glUniform3fv(m_color_idx, 1, color.ptr); glUniform3fv(m_shader.color_idx, 1, color.ptr);
logo.draw(logo.FACE, word, character, m_position_idx); logo.draw(logo.FACE, word, character, m_shader.position_idx);
color = [1.0, 1.0, 1.0]; color = [1.0, 1.0, 1.0];
glUniform3fv(m_color_idx, 1, color.ptr); glUniform3fv(m_shader.color_idx, 1, color.ptr);
logo.draw(logo.WIRE, word, character, m_position_idx); logo.draw(logo.WIRE, word, character, m_shader.position_idx);
} }
protected void display() protected void display()
@ -71,8 +51,7 @@ class ScreenSaver
double scale = 0.35 * m_width * 1080.0 / (m_height * 1920.0); double scale = 0.35 * m_width * 1080.0 / (m_height * 1920.0);
view_matrix.scale(scale, scale, scale); view_matrix.scale(scale, scale, scale);
m_program.bind(); glUniformMatrix4fv(m_shader.view_idx, 1, GL_TRUE, view_matrix.value_ptr);
glUniformMatrix4fv(m_view_idx, 1, GL_TRUE, view_matrix.value_ptr);
for (int i = 0; i < N_GENTEX; i++) for (int i = 0; i < N_GENTEX; i++)
{ {