From 5dd1200a6e73df2240dd7843eb2a5e9dc1b9e29f Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Sun, 18 Dec 2022 23:47:12 +0800 Subject: [PATCH] [CORE][CHG] Use thumbnail shader - Fix no texture in thumbnail after main shader changed --- FinalProject/modelthumbnailwidget.cpp | 28 +++++++++++++++------------ FinalProject/modelthumbnailwidget.h | 3 +++ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/FinalProject/modelthumbnailwidget.cpp b/FinalProject/modelthumbnailwidget.cpp index 992eb05..2c0f140 100644 --- a/FinalProject/modelthumbnailwidget.cpp +++ b/FinalProject/modelthumbnailwidget.cpp @@ -19,21 +19,25 @@ ModelThumbnailWidget::ModelThumbnailWidget(Model* model, QWidget* parent) : } // Copy the shaders to the folder - if (QFile::exists("./temp/shaders/vertexshader.vs")) { - QFile::remove("./temp/shaders/vertexshader.vs"); - } - QFile::copy(":/shaders/vertexshader.vs", "./temp/shaders/vertexshader.vs"); - QFile::setPermissions("./temp/shaders/vertexshader.vs", QFileDevice::ReadOwner | QFileDevice::WriteOwner); - if (QFile::exists("./temp/shaders/fragmentshader.fs")) { - QFile::remove("./temp/shaders/fragmentshader.fs"); - } - QFile::copy(":/shaders/fragmentshader.fs", "./temp/shaders/fragmentshader.fs"); - QFile::setPermissions("./temp/shaders/fragmentshader.fs", QFile::ReadOwner | QFile::WriteOwner); + extractShaderResource("thumbnailvertexshader.glsl"); + extractShaderResource("thumbnailfragmentshader.glsl"); } ModelThumbnailWidget::~ModelThumbnailWidget() { } +void ModelThumbnailWidget::extractShaderResource(const QString& shaderName) { + QString shaderResourcePath = ":/shaders/" + shaderName; + QString shaderTempPath = "./temp/shaders/" + shaderName; + + if (QFile::exists(shaderTempPath)) + { + QFile::remove(shaderTempPath); + } + QFile::copy(shaderResourcePath, shaderTempPath); + QFile::setPermissions(shaderTempPath, QFile::ReadOwner | QFile::WriteOwner); +} + void ModelThumbnailWidget::initializeGL() { initializeOpenGLFunctions(); @@ -44,8 +48,8 @@ void ModelThumbnailWidget::initializeGL() { _shaderProgram.ensureInitialized(); - VertexShader vertexShader("./temp/shaders/vertexshader.vs"); - FragmentShader fragmentShader("./temp/shaders/fragmentshader.fs"); + VertexShader vertexShader("./temp/shaders/thumbnailvertexshader.glsl"); + FragmentShader fragmentShader("./temp/shaders/thumbnailfragmentshader.glsl"); _shaderProgram.attachShader(vertexShader); _shaderProgram.attachShader(fragmentShader); vertexShader.dispose(); diff --git a/FinalProject/modelthumbnailwidget.h b/FinalProject/modelthumbnailwidget.h index 05377ed..b571b8e 100644 --- a/FinalProject/modelthumbnailwidget.h +++ b/FinalProject/modelthumbnailwidget.h @@ -22,6 +22,9 @@ private: Renderable _object = Renderable::empty(); ShaderProgram _shaderProgram = ShaderProgram::empty(); Camera _camera; + +private: + void extractShaderResource(const QString& shaderName); protected: virtual void initializeGL() override;