From 5c4cfad9368df7c731c7c6e0203fe65fb455b434 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sat, 7 Dec 2013 22:42:59 -0500 Subject: [PATCH] refactor shader code into DefaultShader class --- src/default_shader.d | 38 ++++++++++++++++++++++++++++++++++++++ src/screensaver.d | 41 ++++++++++------------------------------- 2 files changed, 48 insertions(+), 31 deletions(-) create mode 100644 src/default_shader.d diff --git a/src/default_shader.d b/src/default_shader.d new file mode 100644 index 0000000..6d55388 --- /dev/null +++ b/src/default_shader.d @@ -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(); + } +} diff --git a/src/screensaver.d b/src/screensaver.d index 4f99aec..9ef1cbc 100644 --- a/src/screensaver.d +++ b/src/screensaver.d @@ -2,10 +2,11 @@ import std.stdio; import derelict.sdl2.sdl; import derelict.opengl3.gl3; import glamour.vao; -import glamour.shader; import glamour.vbo; import gl3n.linalg; + static import logo; +import default_shader; immutable int N_GENTEX = 6; immutable int N_CORPORATION = 11; @@ -14,37 +15,16 @@ class ScreenSaver { protected int m_width; 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_GLContext m_context; + DefaultShader m_shader; protected void init() { glClearColor (0.0, 0.0, 0.0, 0.0); glViewport(0, 0, m_width, m_height); - 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); - 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"); + m_shader = new DefaultShader(); + m_shader.bind(); } protected void draw_letter(int word, int character) @@ -53,12 +33,12 @@ class ScreenSaver (word == logo.GENTEX) ? [0.0, 93.0/255.0, 171.0/255.0] : [187.0/255.0, 188.0/255.0, 190.0/255.0]; - glUniform3fv(m_color_idx, 1, color.ptr); - logo.draw(logo.FACE, word, character, m_position_idx); + glUniform3fv(m_shader.color_idx, 1, color.ptr); + logo.draw(logo.FACE, word, character, m_shader.position_idx); color = [1.0, 1.0, 1.0]; - glUniform3fv(m_color_idx, 1, color.ptr); - logo.draw(logo.WIRE, word, character, m_position_idx); + glUniform3fv(m_shader.color_idx, 1, color.ptr); + logo.draw(logo.WIRE, word, character, m_shader.position_idx); } protected void display() @@ -71,8 +51,7 @@ class ScreenSaver double scale = 0.35 * m_width * 1080.0 / (m_height * 1920.0); view_matrix.scale(scale, scale, scale); - m_program.bind(); - glUniformMatrix4fv(m_view_idx, 1, GL_TRUE, view_matrix.value_ptr); + glUniformMatrix4fv(m_shader.view_idx, 1, GL_TRUE, view_matrix.value_ptr); for (int i = 0; i < N_GENTEX; i++) {