From dc56c2bd332bc329a553c3340990d9a3de5c028f Mon Sep 17 00:00:00 2001 From: Alain Greppin Date: Thu, 8 Jul 2021 08:01:07 +0200 Subject: [PATCH 1/4] check shader pass link status --- src/SHADERed/Objects/RenderEngine.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/SHADERed/Objects/RenderEngine.cpp b/src/SHADERed/Objects/RenderEngine.cpp index 8a6c6bc3..8ea2f972 100644 --- a/src/SHADERed/Objects/RenderEngine.cpp +++ b/src/SHADERed/Objects/RenderEngine.cpp @@ -2192,8 +2192,6 @@ namespace ed { m_msgs->Add(MessageStack::Type::Error, items[i]->Name, "Failed to compile the shader"); m_shaders[i] = 0; } else { - m_msgs->ClearGroup(items[i]->Name); - m_shaders[i] = glCreateProgram(); glAttachShader(m_shaders[i], vs); glAttachShader(m_shaders[i], ps); @@ -2201,7 +2199,12 @@ namespace ed { if (data->TSUsed) glAttachShader(m_shaders[i], tcs); if (data->TSUsed) glAttachShader(m_shaders[i], tes); glLinkProgram(m_shaders[i]); - // XXX TODO check link status + + if (!gl::CheckShaderLinkStatus(m_shaders[i], shaderMessage)) { + m_msgs->Add(MessageStack::Type::Error, items[i]->Name, shaderMessage); + m_msgs->Add(MessageStack::Type::Error, items[i]->Name, "Failed to link the shader"); + } else + m_msgs->ClearGroup(items[i]->Name); m_debugShaders[i] = glCreateProgram(); glAttachShader(m_debugShaders[i], m_generalDebugShader); From 93029b4abf8f95c17b82a0c69ec4b941d667d9c2 Mon Sep 17 00:00:00 2001 From: Alain Greppin Date: Thu, 8 Jul 2021 08:14:56 +0200 Subject: [PATCH 2/4] don't flip 2D textures on load, required for texelFetch --- src/SHADERed/Objects/ObjectManager.cpp | 4 ++-- src/SHADERed/UI/ObjectListUI.cpp | 2 ++ src/SHADERed/UI/ObjectPreviewUI.cpp | 6 +++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/SHADERed/Objects/ObjectManager.cpp b/src/SHADERed/Objects/ObjectManager.cpp index 985d6b29..5d6c482a 100644 --- a/src/SHADERed/Objects/ObjectManager.cpp +++ b/src/SHADERed/Objects/ObjectManager.cpp @@ -281,7 +281,7 @@ namespace ed { height = ddsImage->header.height; } else { int nrChannels = 0; - stbi_set_flip_vertically_on_load(1); + stbi_set_flip_vertically_on_load(0); data = stbi_load(path.c_str(), &width, &height, &nrChannels, STBI_rgb_alpha); } @@ -793,7 +793,7 @@ namespace ed { bool ObjectManager::ReloadTexture(ObjectManagerItem* item, const std::string& newPath) { - stbi_set_flip_vertically_on_load(1); + stbi_set_flip_vertically_on_load(0); for (int i = 0; i < m_items.size(); i++) { if (m_items[i] == item) { diff --git a/src/SHADERed/UI/ObjectListUI.cpp b/src/SHADERed/UI/ObjectListUI.cpp index 63c9896f..bab97c11 100644 --- a/src/SHADERed/UI/ObjectListUI.cpp +++ b/src/SHADERed/UI/ObjectListUI.cpp @@ -36,6 +36,8 @@ namespace ed { bool isPluginOwner = (oItem->Type == ObjectType::PluginObject); GLuint tex = oItem->Texture; + if (oItem->Type == ObjectType::Texture) + tex = oItem->FlippedTexture; float imgWH = 0.0f; if (oItem->Type == ObjectType::RenderTexture) { diff --git a/src/SHADERed/UI/ObjectPreviewUI.cpp b/src/SHADERed/UI/ObjectPreviewUI.cpp index c355e403..0f786912 100644 --- a/src/SHADERed/UI/ObjectPreviewUI.cpp +++ b/src/SHADERed/UI/ObjectPreviewUI.cpp @@ -379,8 +379,12 @@ namespace ed { const glm::vec2& zPos = m_zoom[i].GetZoomPosition(); const glm::vec2& zSize = m_zoom[i].GetZoomSize(); + + GLuint tex = item->Texture; + if (item->Type == ObjectType::Texture) + tex = item->FlippedTexture; - ImGui::Image((void*)(intptr_t)item->Texture, aSize, ImVec2(zPos.x, zPos.y + zSize.y), ImVec2(zPos.x + zSize.x, zPos.y)); + ImGui::Image((void*)(intptr_t)tex, aSize, ImVec2(zPos.x, zPos.y + zSize.y), ImVec2(zPos.x + zSize.x, zPos.y)); if (ImGui::IsItemHovered()) { m_curHoveredItem = i; From a012c1bb10be074b1e9dee386bad546ce3951da9 Mon Sep 17 00:00:00 2001 From: Alain Greppin Date: Sun, 25 Jul 2021 00:54:53 +0200 Subject: [PATCH 3/4] PR#232: don't use FlippedTexture, use ImGui::Image UV mapping instead --- src/SHADERed/UI/ObjectListUI.cpp | 6 ++++-- src/SHADERed/UI/ObjectPreviewUI.cpp | 6 +----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/SHADERed/UI/ObjectListUI.cpp b/src/SHADERed/UI/ObjectListUI.cpp index bab97c11..683e1d12 100644 --- a/src/SHADERed/UI/ObjectListUI.cpp +++ b/src/SHADERed/UI/ObjectListUI.cpp @@ -36,8 +36,6 @@ namespace ed { bool isPluginOwner = (oItem->Type == ObjectType::PluginObject); GLuint tex = oItem->Texture; - if (oItem->Type == ObjectType::Texture) - tex = oItem->FlippedTexture; float imgWH = 0.0f; if (oItem->Type == ObjectType::RenderTexture) { @@ -84,6 +82,8 @@ namespace ed { if (oItem->Type == ObjectType::CubeMap) { m_cubePrev.Draw(tex); ImGui::Image((void*)(intptr_t)m_cubePrev.GetTexture(), ImVec2(IMAGE_CONTEXT_WIDTH, ((float)imgWH) * IMAGE_CONTEXT_WIDTH), ImVec2(0, 1), ImVec2(1, 0)); + } else if (oItem->Type == ObjectType::Texture) { + ImGui::Image(*(void **)&tex, ImVec2(IMAGE_CONTEXT_WIDTH, ((float)imgWH) * IMAGE_CONTEXT_WIDTH)); } else if (!isBuf && !isImg3D && !isPluginOwner) ImGui::Image((void*)(intptr_t)tex, ImVec2(IMAGE_CONTEXT_WIDTH, ((float)imgWH) * IMAGE_CONTEXT_WIDTH), ImVec2(0, 1), ImVec2(1, 0)); else if (hasPluginPreview) @@ -107,6 +107,8 @@ namespace ed { m_tex3DPrev.Draw(tex, IMAGE_CONTEXT_WIDTH, ((float)imgWH) * IMAGE_CONTEXT_WIDTH); ImGui::Image((void*)(intptr_t)m_tex3DPrev.GetTexture(), ImVec2(IMAGE_CONTEXT_WIDTH, ((float)imgWH) * IMAGE_CONTEXT_WIDTH)); } + else if (oItem->Type == ObjectType::Texture) + ImGui::Image(*(void **)&tex, ImVec2(IMAGE_CONTEXT_WIDTH, ((float)imgWH) * IMAGE_CONTEXT_WIDTH)); else if (!isBuf && !isImg3D && !isPluginOwner) ImGui::Image((void*)(intptr_t)tex, ImVec2(IMAGE_CONTEXT_WIDTH, ((float)imgWH) * IMAGE_CONTEXT_WIDTH), ImVec2(0, 1), ImVec2(1, 0)); else if (hasPluginPreview) diff --git a/src/SHADERed/UI/ObjectPreviewUI.cpp b/src/SHADERed/UI/ObjectPreviewUI.cpp index 0f786912..5d4c112d 100644 --- a/src/SHADERed/UI/ObjectPreviewUI.cpp +++ b/src/SHADERed/UI/ObjectPreviewUI.cpp @@ -380,11 +380,7 @@ namespace ed { const glm::vec2& zPos = m_zoom[i].GetZoomPosition(); const glm::vec2& zSize = m_zoom[i].GetZoomSize(); - GLuint tex = item->Texture; - if (item->Type == ObjectType::Texture) - tex = item->FlippedTexture; - - ImGui::Image((void*)(intptr_t)tex, aSize, ImVec2(zPos.x, zPos.y + zSize.y), ImVec2(zPos.x + zSize.x, zPos.y)); + ImGui::Image(*(void **)&item->Texture, aSize, ImVec2(zPos.x, zPos.y), ImVec2(zPos.x + zSize.x, zPos.y + zSize.y)); if (ImGui::IsItemHovered()) { m_curHoveredItem = i; From ae1ce8c09f4632ed8df41ab0ee090fb0c3584a5b Mon Sep 17 00:00:00 2001 From: Alain Greppin Date: Sun, 25 Jul 2021 09:00:29 +0200 Subject: [PATCH 4/4] PR#232 followup: don't flip imported model UVs --- src/SHADERed/Engine/Model.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SHADERed/Engine/Model.cpp b/src/SHADERed/Engine/Model.cpp index 6dfb0ce0..c4fa2fe7 100644 --- a/src/SHADERed/Engine/Model.cpp +++ b/src/SHADERed/Engine/Model.cpp @@ -78,7 +78,7 @@ namespace ed { // read file via ASSIMP Assimp::Importer importer; - const aiScene* scene = importer.ReadFile(path, aiProcess_Triangulate | aiProcess_FlipUVs); + const aiScene* scene = importer.ReadFile(path, aiProcess_Triangulate); // check for errors if (!scene || scene->mFlags & AI_SCENE_FLAGS_INCOMPLETE || !scene->mRootNode) // if is Not Zero