Make window resizable

This commit is contained in:
Josh Holtrop 2024-01-25 21:19:06 -05:00
parent 8dc6e97585
commit eed5ac7586

View File

@ -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;
} }
} }