update ModelViewer

This commit is contained in:
MihailRis 2026-08-13 21:58:54 +03:00
parent fe69d31f97
commit 60106d4fb1
2 changed files with 17 additions and 4 deletions

View file

@ -13,6 +13,7 @@
#include "window/Window.hpp" #include "window/Window.hpp"
#include "../GUI.hpp" #include "../GUI.hpp"
// TODO: remove
// TODO: remove // TODO: remove
#include <GL/glew.h> #include <GL/glew.h>
@ -24,8 +25,7 @@ ModelViewer::ModelViewer(
: Container(gui, size), : Container(gui, size),
modelName(modelName), modelName(modelName),
camera(), camera(),
batch(std::make_unique<Batch3D>(1024)), batch(std::make_unique<Batch3D>(1024)) {
fbo(std::make_unique<Framebuffer>(size.x, size.y)) {
camera.perspective = true; camera.perspective = true;
camera.position = glm::vec3(2, 2, 2); camera.position = glm::vec3(2, 2, 2);
} }
@ -116,6 +116,12 @@ void ModelViewer::draw(const DrawContext& pctx, const Assets& assets) {
} }
auto& prevShader = Shader::getUsed(); auto& prevShader = Shader::getUsed();
if (!fbo) {
if (size.x <= 0 || size.y <= 0) {
return;
}
fbo = std::make_unique<Framebuffer>(size.x, size.y);
}
fbo->resize(size.x, size.y); fbo->resize(size.x, size.y);
{ {
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
@ -154,6 +160,13 @@ void ModelViewer::draw(const DrawContext& pctx, const Assets& assets) {
Container::draw(pctx, assets); Container::draw(pctx, assets);
} }
void ModelViewer::setVisible(bool flag) {
if (!flag && fbo) {
fbo.reset();
}
Container::setVisible(flag);
}
void ModelViewer::setCenter(const glm::vec3& center) { void ModelViewer::setCenter(const glm::vec3& center) {
this->center = center; this->center = center;
} }

View file

@ -23,7 +23,6 @@ namespace gui {
bool grabbing = false; bool grabbing = false;
public: public:
ModelViewer(GUI& gui, const glm::vec2& size, const std::string& modelName); ModelViewer(GUI& gui, const glm::vec2& size, const std::string& modelName);
~ModelViewer(); ~ModelViewer();
void setModel(const std::string& modelName); void setModel(const std::string& modelName);
@ -34,6 +33,7 @@ namespace gui {
void act(float delta) override; void act(float delta) override;
void draw(const DrawContext& pctx, const Assets& assets) override; void draw(const DrawContext& pctx, const Assets& assets) override;
void setVisible(bool flag) override;
void setRotation(const glm::vec3& euler); void setRotation(const glm::vec3& euler);
void setCenter(const glm::vec3& center); void setCenter(const glm::vec3& center);