ImGuiMaterialDetails.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <Utils/ImGuiMaterialDetails.h>
  9. #include <Utils/ImGuiShaderUtils.h>
  10. #include <imgui/imgui.h>
  11. #include <Atom/RPI.Public/Material/Material.h>
  12. #include <AzCore/Casting/numeric_cast.h>
  13. namespace AtomSampleViewer
  14. {
  15. void ImGuiMaterialDetails::SetMaterial(AZ::Data::Instance<AZ::RPI::Material> material)
  16. {
  17. m_material = material;
  18. }
  19. void ImGuiMaterialDetails::OpenDialog()
  20. {
  21. m_dialogIsOpen = true;
  22. }
  23. void ImGuiMaterialDetails::Tick()
  24. {
  25. if (m_dialogIsOpen)
  26. {
  27. if (ImGui::Begin("Material Details", &m_dialogIsOpen, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings))
  28. {
  29. if (m_material)
  30. {
  31. const ImGuiTreeNodeFlags flagDefaultOpen = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_DefaultOpen;
  32. if (ImGui::TreeNodeEx("Shaders", flagDefaultOpen))
  33. {
  34. for (size_t i = 0; i < m_material->GetShaderCollection().size(); i++)
  35. {
  36. const AZ::RPI::ShaderCollection::Item& shaderItem = m_material->GetShaderCollection()[i];
  37. if (ImGui::TreeNodeEx(AZStd::string::format("Shader[%d] - Enabled=%d - %s", aznumeric_cast<int>(i), shaderItem.IsEnabled(), shaderItem.GetShaderAsset()->GetName().GetCStr()).c_str(), flagDefaultOpen))
  38. {
  39. if (shaderItem.IsEnabled())
  40. {
  41. AZ::RPI::ShaderVariantId requestedVariantId = shaderItem.GetShaderVariantId();
  42. AZ::Data::Asset<AZ::RPI::ShaderVariantAsset> selectedVariantAsset =
  43. shaderItem.GetShaderAsset()->GetVariant(requestedVariantId);
  44. if (selectedVariantAsset)
  45. {
  46. AZ::RPI::ShaderVariantId selectedVariantId = selectedVariantAsset->GetShaderVariantId();
  47. ImGui::Indent();
  48. ImGuiShaderUtils::DrawShaderVariantTable(
  49. shaderItem.GetShaderAsset()->GetShaderOptionGroupLayout(), requestedVariantId,
  50. selectedVariantId);
  51. ImGui::Unindent();
  52. }
  53. }
  54. ImGui::TreePop();
  55. }
  56. }
  57. ImGui::TreePop();
  58. }
  59. }
  60. else
  61. {
  62. ImGui::Text("No material selected");
  63. }
  64. }
  65. ImGui::End();
  66. }
  67. }
  68. } // namespace AtomSampleViewer