Make window resizable
This commit is contained in:
parent
8dc6e97585
commit
eed5ac7586
48
src/app.d
48
src/app.d
@ -13,15 +13,16 @@ ColorShader color_shader;
|
||||
Array spinny_vao;
|
||||
GLuint program_id;
|
||||
mat4 view_matrix;
|
||||
int window_width;
|
||||
int window_height;
|
||||
|
||||
void init()
|
||||
private void init()
|
||||
{
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
glClearColor (1.0, 0.6, 0.0, 0.0);
|
||||
glViewport(0, 0, WIDTH, HEIGHT);
|
||||
glClearColor(1.0, 0.6, 0.0, 0.0);
|
||||
|
||||
spinny_vao = new Array();
|
||||
spinny_vao.bind();
|
||||
@ -69,14 +70,21 @@ fragment:
|
||||
ibo.bind();
|
||||
}
|
||||
|
||||
void display(SDL_Window * window)
|
||||
private void resize(int width, int height)
|
||||
{
|
||||
window_width = width;
|
||||
window_height = height;
|
||||
glViewport(0, 0, width, height);
|
||||
}
|
||||
|
||||
private void display(SDL_Window * window)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
color_shader.use();
|
||||
spinny_vao.bind();
|
||||
view_matrix.make_identity();
|
||||
view_matrix.scale(HEIGHT / cast(float)WIDTH, 1.0, 1.0);
|
||||
view_matrix.scale(window_height / cast(float)window_width, 1.0, 1.0);
|
||||
view_matrix.rotatez(SDL_GetTicks() / 500.0);
|
||||
color_shader.set_view(view_matrix.value_ptr);
|
||||
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_SHORT, null);
|
||||
@ -99,7 +107,7 @@ int main()
|
||||
SDL_WINDOWPOS_UNDEFINED,
|
||||
WIDTH,
|
||||
HEIGHT,
|
||||
SDL_WINDOW_OPENGL);
|
||||
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
|
||||
|
||||
if (window == null)
|
||||
{
|
||||
@ -116,16 +124,38 @@ int main()
|
||||
}
|
||||
|
||||
init();
|
||||
resize(WIDTH, HEIGHT);
|
||||
SDL_Event event;
|
||||
outer:
|
||||
for (;;)
|
||||
{
|
||||
if (SDL_PollEvent(&event))
|
||||
{
|
||||
if (event.type == SDL_QUIT)
|
||||
break;
|
||||
else if (event.type == SDL_KEYDOWN)
|
||||
switch (event.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
break outer;
|
||||
|
||||
case SDL_KEYDOWN:
|
||||
if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE)
|
||||
{
|
||||
break outer;
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_WINDOWEVENT:
|
||||
switch (event.window.event)
|
||||
{
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
resize(event.window.data1, event.window.data2);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user