96 auto& dispatcher = entt::locator<entt::dispatcher>::value();
97 auto& window = entt::locator<Window>::value();
98 auto& world = entt::locator<World>::value();
102 constexpr const auto dt = std::chrono::duration<long long, std::ratio<1, 60>> {1};
105 using clock = std::chrono::steady_clock;
106 using duration =
decltype(clock::duration {} + dt);
107 using time_point = std::chrono::time_point<clock, duration>;
110 time_point prev = clock::now();
111 time_point now = clock::now();
117 while (window.is_open())
120 auto elapsed = now - prev;
137 m_update(dispatcher, window, world);
141 m_render(dispatcher, window, world);
146 window.append_title(std::format(
" | UPS: {0}, FPS: {1}", updates, frames));
264 if (!SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_JOYSTICK | SDL_INIT_GAMEPAD | SDL_INIT_EVENTS | SDL_INIT_HAPTIC | SDL_INIT_SENSOR))
277 auto& window = entt::locator<Window>::emplace();
282 auto& sampler = entt::locator<Sampler>::emplace();
290 sampler.set(GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);
291 sampler.set(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
294 sampler.set(GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
295 sampler.set(GL_TEXTURE_MAG_FILTER, GL_LINEAR);
298 sampler.set(GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
299 sampler.set(GL_TEXTURE_MAG_FILTER, GL_LINEAR);
307 sampler.set(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
308 sampler.set(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
312 sampler.set(GL_TEXTURE_MIN_FILTER, GL_LINEAR);
313 sampler.set(GL_TEXTURE_MAG_FILTER, GL_LINEAR);
322 else if (ansio > 4 && ansio < 8)
330 sampler.setf(GL_TEXTURE_MAX_ANISOTROPY,
static_cast<float>(ansio));
332 sampler.set(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
333 sampler.set(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
334 sampler.set(GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
335 sampler.set(GL_TEXTURE_LOD_BIAS, GL_NONE);