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 logoobj; static import logo; enum int WIDTH = 600; enum int HEIGHT = 450; GLint position_idx; GLint view_idx; GLint color_idx; mat4 view_matrix; Shader program; Shader program2; void init() { logo.init(); // glClearColor (1.0, 0.7, 0.0, 0.0); glClearColor (0.0, 0.0, 0.0, 0.0); glViewport(0, 0, WIDTH, 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); } `; program = new Shader("program", shader_src); program.bind(); position_idx = program.get_attrib_location("position"); view_idx = program.get_uniform_location("view"); color_idx = program.get_uniform_location("color"); } void display(SDL_Window * window) { glClear(GL_COLOR_BUFFER_BIT); view_matrix.make_identity(); // view_matrix.rotatez(SDL_GetTicks() / 500.0); view_matrix.scale(HEIGHT / cast(float)WIDTH, 1.0, 1.0); view_matrix.scale(0.25, 0.25, 0.25); program.bind(); glUniformMatrix4fv(view_idx, 1, GL_TRUE, view_matrix.value_ptr); float[] color = [0.0, 93.0/255.0, 171.0/255.0]; glUniform3fv(color_idx, 1, color.ptr); for (int i = 0; i < 6; i++) { logo.draw(logo.FACE, logo.GENTEX, i, position_idx); } color = [187.0/255.0, 188.0/255.0, 190.0/255.0]; glUniform3fv(color_idx, 1, color.ptr); for (int i = 0; i < 11; i++) { 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); } int main() { DerelictSDL2.load(); DerelictGL3.load(); if (SDL_Init(SDL_INIT_EVERYTHING)) { writeln("Failed to initialize SDL!"); return 1; } SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4); SDL_Window * window = SDL_CreateWindow("Gentex ScreenSaver", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, WIDTH, HEIGHT, // SDL_WINDOW_OPENGL | SDL_WINDOW_BORDERLESS); SDL_WINDOW_OPENGL); SDL_GLContext context = SDL_GL_CreateContext(window); if (window == null) { writeln("Failed to create SDL window!"); return 1; } DerelictGL3.reload(); init(); SDL_Event event; for (;;) { if (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) break; else if (event.type == SDL_KEYDOWN) { if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE) break; } } display(window); } SDL_GL_DeleteContext(context); SDL_DestroyWindow(window); SDL_Quit(); return 0; }