refactor shader code into DefaultShader class
This commit is contained in:
parent
b425c9b8d2
commit
5c4cfad936
38
src/default_shader.d
Normal file
38
src/default_shader.d
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
@ -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++)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user