129 lines
2.0 KiB
C++
129 lines
2.0 KiB
C++
#include "main.h"
|
|
|
|
static void _init(State* state);
|
|
static void _draw(State* state);
|
|
static void _loop(State* state);
|
|
static void _quit(State* state);
|
|
static void _tick(State* state);
|
|
|
|
static void
|
|
_init(State* state)
|
|
{
|
|
Shader shader;
|
|
|
|
printf(STRING_INFO_INIT);
|
|
|
|
if (!SDL_Init(SDL_INIT_VIDEO))
|
|
{
|
|
printf(STRING_ERROR_SDL_INIT, SDL_GetError());
|
|
_quit(state);
|
|
}
|
|
|
|
printf(STRING_INFO_SDL_INIT);
|
|
|
|
SDL_CreateWindowAndRenderer
|
|
(
|
|
STRING_WINDOW_TITLE,
|
|
WINDOW_WIDTH,
|
|
WINDOW_HEIGHT,
|
|
WINDOW_FLAGS,
|
|
&state->window,
|
|
&state->renderer
|
|
);
|
|
|
|
state->glContext = SDL_GL_CreateContext(state->window);
|
|
|
|
if (!state->glContext)
|
|
{
|
|
printf(STRING_ERROR_GL_CONTEXT_INIT, SDL_GetError());
|
|
_quit(state);
|
|
}
|
|
|
|
glewInit();
|
|
|
|
printf(STRING_INFO_GLEW_INIT);
|
|
|
|
shader_init(&shader, RESOURCE_SHADER_VERTEX_TEXTURE_QUAD, RESOURCE_SHADER_FRAGMENT_TEXTURE_QUAD);
|
|
|
|
imgui_init(state->window, state->glContext);
|
|
|
|
Anm2 anm2;
|
|
|
|
anm2_init(&anm2, "res/anm2/005.031_key.anm2");
|
|
}
|
|
|
|
void
|
|
_loop(State* state)
|
|
{
|
|
state->tick = SDL_GetTicks();
|
|
|
|
while (state->tick > state->lastTick + TICK_DELAY)
|
|
{
|
|
state->tick = SDL_GetTicks();
|
|
|
|
if (state->tick - state->lastTick < TICK_DELAY)
|
|
SDL_Delay(TICK_DELAY - (state->tick - state->lastTick));
|
|
|
|
_tick(state);
|
|
|
|
imgui_tick(state);
|
|
|
|
_draw(state);
|
|
|
|
state->lastTick = state->tick;
|
|
}
|
|
}
|
|
|
|
void
|
|
_tick(State* state)
|
|
{
|
|
SDL_Event event;
|
|
|
|
while(SDL_PollEvent(&event))
|
|
{
|
|
ImGui_ImplSDL3_ProcessEvent(&event);
|
|
|
|
if (event.type == SDL_EVENT_QUIT)
|
|
state->isRunning = false;
|
|
}
|
|
}
|
|
|
|
void
|
|
_draw(State* state)
|
|
{
|
|
glClearColor(state->clearColor.x, state->clearColor.y, state->clearColor.z, 1.0);
|
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
|
|
imgui_draw();
|
|
|
|
SDL_GL_SwapWindow(state->window);
|
|
}
|
|
|
|
void
|
|
_quit(State* state)
|
|
{
|
|
imgui_free();
|
|
|
|
SDL_GL_DestroyContext(state->glContext);
|
|
SDL_Quit();
|
|
|
|
printf(STRING_INFO_SDL_QUIT);
|
|
|
|
printf(STRING_INFO_QUIT);
|
|
}
|
|
|
|
s32
|
|
main(s32 argc, char* argv[])
|
|
{
|
|
State state;
|
|
|
|
_init(&state);
|
|
|
|
while (state.isRunning)
|
|
_loop(&state);
|
|
|
|
_quit(&state);
|
|
|
|
return EXIT_SUCCESS;
|
|
}
|