Add mesh caching for unchanging text labels
This commit is contained in:
1 parent
4eda57b4e4
commit
b56fafa0e0
3 files changed
+103
-62
No files matched your search
+19
-4
@@ -208,7 +208,9 @@ namespace ZL
|
||||
// Можно делать масштаб по дальности: чем дальше — тем меньше.
|
||||
// depth в NDC: ближе к -1 (near) и к 1 (far). Стабильнее считать по расстоянию:
|
||||
float dist = (Environment::shipState.position - boxWorld).norm();
|
||||
float scale = std::clamp(120.0f / (dist + 1.0f), 0.6f, 1.2f);
|
||||
float scaleRaw = 120.0f / (dist + 1.0f);
|
||||
float scale = std::round(scaleRaw * 10.0f) / 10.0f;
|
||||
scale = std::clamp(scale, 0.6f, 1.2f);
|
||||
|
||||
textRenderer->drawText(boxLabels[i], uiX, uiY, scale, /*centered*/true);
|
||||
}
|
||||
@@ -465,9 +467,6 @@ namespace ZL
|
||||
|
||||
boxAlive.resize(boxCoordsArr.size(), true);
|
||||
ZL::CheckGlError();
|
||||
textRenderer = std::make_unique<ZL::TextRenderer>();
|
||||
textRenderer->init(renderer, "resources/fonts/DroidSans.ttf", 32, CONST_ZIP_FILE);
|
||||
ZL::CheckGlError();
|
||||
boxLabels.clear();
|
||||
boxLabels.reserve(boxCoordsArr.size());
|
||||
for (size_t i = 0; i < boxCoordsArr.size(); ++i) {
|
||||
@@ -480,6 +479,14 @@ namespace ZL
|
||||
}
|
||||
|
||||
renderer.InitOpenGL();
|
||||
|
||||
// TextRenderer создаём/инициализируем ПОСЛЕ инициализации OpenGL
|
||||
textRenderer = std::make_unique<ZL::TextRenderer>();
|
||||
if (!textRenderer->init(renderer, "resources/fonts/DroidSans.ttf", 32, CONST_ZIP_FILE)) {
|
||||
std::cerr << "Failed to init TextRenderer\n";
|
||||
}
|
||||
ZL::CheckGlError();
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
||||
@@ -1316,6 +1323,14 @@ namespace ZL
|
||||
if (event.type == SDL_QUIT) {
|
||||
Environment::exitGameLoop = true;
|
||||
}
|
||||
#if SDL_VERSION_ATLEAST(2,0,5)
|
||||
else if (event.type == SDL_WINDOWEVENT && event.window.event == SDL_WINDOWEVENT_RESIZED) {
|
||||
// Обновляем размеры и сбрасываем кеш текстов, т.к. меши хранятся в пикселях
|
||||
Environment::width = event.window.data1;
|
||||
Environment::height = event.window.data2;
|
||||
if (textRenderer) textRenderer->ClearCache();
|
||||
}
|
||||
#endif
|
||||
#ifdef __ANDROID__
|
||||
if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_AC_BACK) {
|
||||
Environment::exitGameLoop = true;
|
||||
|
||||
Reference in new issue
Block a user