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