17
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-10-17 01:39:20 +02:00

Merge branch 'master' into feat/modern-editor

This commit is contained in:
2026-10-08 17:44:58 +02:00
41 changed files with 479 additions and 319 deletions

View File

@@ -1,10 +1,15 @@
#pragma once
#include <limits>
#include "model/Texture.h"
#include "rendering/renderer.h"
class deferred_image {
public:
// value returned by get() when the image isn't (yet) available
static constexpr GLuint invalid_id { std::numeric_limits<GLuint>::max() };
deferred_image() = default;
deferred_image(const std::string &p) : path(p) { }
deferred_image(const deferred_image&) = delete;
@@ -15,7 +20,8 @@ public:
return image != null_handle || !path.empty();
}
GLuint get() const
// loads the texture on first use
GLuint get()
{
if (!path.empty()) {
image = GfxRenderer->Fetch_Texture(path, true);
@@ -30,7 +36,7 @@ public:
return tex.get_id();
}
return -1;
return invalid_id;
}
glm::ivec2 size() const
@@ -43,6 +49,6 @@ public:
}
private:
mutable std::string path;
mutable texture_handle image = 0;
std::string path;
texture_handle image = 0;
};

View File

@@ -285,7 +285,7 @@ void ui::scenerylist_panel::draw_trainset(trainset_desc &trainset)
for (auto &dyn_desc : trainset.vehicles) {
deferred_image *mini = nullptr;
if (dyn_desc.skin && dyn_desc.skin->mini.get() != (GLuint)-1)
if (dyn_desc.skin && dyn_desc.skin->mini.get() != deferred_image::invalid_id)
mini = &dyn_desc.skin->mini;
else
mini = &placeholder_mini;

View File

@@ -37,7 +37,7 @@ void ui::vehiclepicker_panel::render_contents()
if (ImGui::RadioButton(STR_C("texture group"), display_by_groups))
display_by_groups = true;
std::vector<const skin_set*> skinset_list;
std::vector<skin_set*> skinset_list;
if (display_by_groups) {
std::vector<const std::string*> model_list;
@@ -114,7 +114,7 @@ void ui::vehiclepicker_panel::render_contents()
for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++) {
auto &desc = model_list[i];
const deferred_image *image = nullptr;
deferred_image *image = nullptr;
for (auto const &skinset : desc->matching_skinsets) {
if (skinset->mini) {
image = &skinset->mini;
@@ -256,7 +256,7 @@ bool ui::vehiclepicker_panel::skin_filter(const skin_set *skin, std::vector<sear
return alternative_present ? !any : false;
}
bool ui::vehiclepicker_panel::selectable_image(const char *desc, bool selected, const deferred_image* image, const skin_set *pickable)
bool ui::vehiclepicker_panel::selectable_image(const char *desc, bool selected, deferred_image *image, const skin_set *pickable)
{
ImGui::PushID(pickable);
@@ -270,7 +270,7 @@ bool ui::vehiclepicker_panel::selectable_image(const char *desc, bool selected,
}
GLuint tex = image->get();
if (tex != (GLuint)-1) {
if (tex != deferred_image::invalid_id) {
glm::ivec2 size = image->size();
float width = 30.0f / size.y * size.x;
ImGui::SameLine(ImGui::GetContentRegionAvail().x - width);

View File

@@ -14,7 +14,7 @@ class vehiclepicker_panel : public ui_panel
void render_contents() override;
private:
bool selectable_image(const char *desc, bool selected, const deferred_image *image, const skin_set *pickable = nullptr);
bool selectable_image(const char *desc, bool selected, deferred_image *image, const skin_set *pickable = nullptr);
vehicle_type selected_type = vehicle_type::none;
std::shared_ptr<const vehicle_desc> selected_vehicle;