use logo module to draw characters, remove VAOs/VBOs from gss.d

This commit is contained in:
Josh Holtrop 2013-11-24 13:09:54 -05:00
parent a1ff570721
commit 8e6a3ef870

View File

@ -5,45 +5,26 @@ import glamour.vao;
import glamour.shader; import glamour.shader;
import glamour.vbo; import glamour.vbo;
import gl3n.linalg; import gl3n.linalg;
static import logoobj;
static import logo; static import logo;
enum int WIDTH = 1920; enum int WIDTH = 600;
enum int HEIGHT = 1080; enum int HEIGHT = 450;
GLint position_idx; GLint position_idx;
GLint position2_idx;
GLint color_idx;
GLint view_idx; GLint view_idx;
GLint view2_idx; GLint color_idx;
mat4 view_matrix; mat4 view_matrix;
Shader program; Shader program;
Shader program2; Shader program2;
VAO vao;
void init() void init()
{ {
logo.init(); logo.init();
glClearColor (1.0, 0.7, 0.0, 0.0); // glClearColor (1.0, 0.7, 0.0, 0.0);
glClearColor (0.0, 0.0, 0.0, 0.0);
glViewport(0, 0, WIDTH, HEIGHT); glViewport(0, 0, WIDTH, HEIGHT);
immutable string shader_src = ` immutable string shader_src = `
vertex:
uniform mat4 view;
in vec2 position;
in vec3 color;
out vec3 color_i;
void main(void)
{
gl_Position = view * vec4(position, 0.0, 1.0);
color_i = color;
}
fragment:
in vec3 color_i;
void main(void)
{
gl_FragColor = vec4(color_i, 1.0);
}
`;
immutable string shader2_src = `
vertex: vertex:
uniform mat4 view; uniform mat4 view;
in vec2 position; in vec2 position;
@ -52,34 +33,17 @@ vertex:
gl_Position = view * vec4(position, 0.0, 1.0); gl_Position = view * vec4(position, 0.0, 1.0);
} }
fragment: fragment:
uniform vec3 color;
void main(void) void main(void)
{ {
gl_FragColor = vec4(0, 0.3, 0.8, 1.0); gl_FragColor = vec4(color, 1.0);
} }
`; `;
vao = new VAO();
vao.bind();
program = new Shader("program", shader_src); program = new Shader("program", shader_src);
program2 = new Shader("program2", shader2_src);
program.bind(); program.bind();
position_idx = program.get_attrib_location("position"); position_idx = program.get_attrib_location("position");
position2_idx = program2.get_attrib_location("position");
color_idx = program.get_attrib_location("color");
float[] vertices = [0.4, 0.4, -0.4, 0.4, -0.4, -0.4, 0.4, -0.4];
float[] colors = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0];
ushort[] indices = [0, 1, 2, 3];
Buffer vbo = new Buffer(vertices);
vbo.bind();
glEnableVertexAttribArray(position_idx);
glVertexAttribPointer(position_idx, 2, GL_FLOAT, GL_FALSE, 0, null);
Buffer cbo = new Buffer(colors);
cbo.bind();
glEnableVertexAttribArray(color_idx);
glVertexAttribPointer(color_idx, 3, GL_FLOAT, GL_FALSE, 0, null);
ElementBuffer ibo = new ElementBuffer(indices);
ibo.bind();
view_idx = program.get_uniform_location("view"); view_idx = program.get_uniform_location("view");
view2_idx = program2.get_uniform_location("view"); color_idx = program.get_uniform_location("color");
} }
void display(SDL_Window * window) void display(SDL_Window * window)
@ -87,20 +51,36 @@ void display(SDL_Window * window)
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
view_matrix.make_identity(); view_matrix.make_identity();
view_matrix.rotatez(SDL_GetTicks() / 500.0); // view_matrix.rotatez(SDL_GetTicks() / 500.0);
view_matrix.scale(HEIGHT / cast(float)WIDTH, 1.0, 1.0); view_matrix.scale(HEIGHT / cast(float)WIDTH, 1.0, 1.0);
view_matrix.scale(0.25, 0.25, 0.25);
program.bind(); program.bind();
vao.bind();
glUniformMatrix4fv(view_idx, 1, GL_TRUE, view_matrix.value_ptr); glUniformMatrix4fv(view_idx, 1, GL_TRUE, view_matrix.value_ptr);
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_SHORT, null);
view_matrix.make_identity(); float[] color = [0.0, 0.0, 1.0];
view_matrix.scale(HEIGHT / cast(float)WIDTH, 1.0, 1.0); glUniform3fv(color_idx, 1, color.ptr);
for (int i = 0; i < 6; i++)
{
logo.draw(logo.FACE, logo.GENTEX, i, position_idx);
}
program2.bind(); for (int i = 0; i < 11; i++)
glUniformMatrix4fv(view_idx, 1, GL_TRUE, view_matrix.value_ptr); {
logo.draw(logo.WIRE, logo.GENTEX, 2, position2_idx); logo.draw(logo.FACE, logo.CORPORATION, i, position_idx);
}
color = [1.0, 1.0, 1.0];
glUniform3fv(color_idx, 1, color.ptr);
for (int i = 0; i < 6; i++)
{
logo.draw(logo.WIRE, logo.GENTEX, i, position_idx);
}
for (int i = 0; i < 11; i++)
{
logo.draw(logo.WIRE, logo.CORPORATION, i, position_idx);
}
SDL_GL_SwapWindow(window); SDL_GL_SwapWindow(window);
} }
@ -118,11 +98,12 @@ int main()
} }
SDL_Window * window = SDL_CreateWindow("Gentex ScreenSaver", SDL_Window * window = SDL_CreateWindow("Gentex ScreenSaver",
0, SDL_WINDOWPOS_UNDEFINED,
0, SDL_WINDOWPOS_UNDEFINED,
WIDTH, WIDTH,
HEIGHT, HEIGHT,
SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS); // SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS);
SDL_WINDOW_OPENGL);
SDL_GLContext context = SDL_GL_CreateContext(window); SDL_GLContext context = SDL_GL_CreateContext(window);
if (window == null) if (window == null)