Sync editor rendering and UI workspace updates
This commit is contained in:
@@ -26,6 +26,7 @@ public:
|
||||
bool Compile(
|
||||
const void* sourceData,
|
||||
size_t sourceSize,
|
||||
const wchar_t* sourcePath,
|
||||
const D3D_SHADER_MACRO* macros,
|
||||
const char* entryPoint,
|
||||
const char* target);
|
||||
|
||||
@@ -59,6 +59,9 @@ inline bool TryBuildBuiltinPassResourceBindingPlan(
|
||||
case BuiltinPassResourceSemantic::PassConstants:
|
||||
location = &outPlan.passConstants;
|
||||
break;
|
||||
case BuiltinPassResourceSemantic::VolumeField:
|
||||
location = &outPlan.volumeField;
|
||||
break;
|
||||
case BuiltinPassResourceSemantic::BaseColorTexture:
|
||||
location = &outPlan.baseColorTexture;
|
||||
break;
|
||||
@@ -305,6 +308,24 @@ inline bool TryBuildBuiltinPassDefaultResourceBindings(
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ShaderPassMatchesBuiltinPass(shaderPass, BuiltinMaterialPass::Volumetric)) {
|
||||
AppendBuiltinPassResourceBinding(
|
||||
outBindings,
|
||||
"PerObjectConstants",
|
||||
Resources::ShaderResourceType::ConstantBuffer,
|
||||
0u,
|
||||
0u,
|
||||
"PerObject");
|
||||
AppendBuiltinPassResourceBinding(
|
||||
outBindings,
|
||||
"MaterialConstants",
|
||||
Resources::ShaderResourceType::ConstantBuffer,
|
||||
1u,
|
||||
0u,
|
||||
"Material");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (ShaderPassMatchesBuiltinPass(shaderPass, BuiltinMaterialPass::PostProcess)) {
|
||||
AppendBuiltinPassResourceBinding(
|
||||
outBindings,
|
||||
@@ -538,6 +559,9 @@ inline bool TryBuildBuiltinPassSetLayouts(
|
||||
case BuiltinPassResourceSemantic::PassConstants:
|
||||
setLayout.usesPassConstants = true;
|
||||
break;
|
||||
case BuiltinPassResourceSemantic::VolumeField:
|
||||
setLayout.usesVolumeField = true;
|
||||
break;
|
||||
case BuiltinPassResourceSemantic::BaseColorTexture:
|
||||
setLayout.usesTexture = true;
|
||||
setLayout.usesBaseColorTexture = true;
|
||||
|
||||
@@ -25,6 +25,8 @@ inline const char* GetBuiltinPassCanonicalName(BuiltinMaterialPass pass) {
|
||||
return "objectid";
|
||||
case BuiltinMaterialPass::Skybox:
|
||||
return "skybox";
|
||||
case BuiltinMaterialPass::Volumetric:
|
||||
return "volumetric";
|
||||
case BuiltinMaterialPass::PostProcess:
|
||||
return "colorscale";
|
||||
case BuiltinMaterialPass::FinalColor:
|
||||
@@ -136,6 +138,11 @@ inline BuiltinPassResourceSemantic ResolveBuiltinPassResourceSemantic(
|
||||
return BuiltinPassResourceSemantic::PassConstants;
|
||||
}
|
||||
|
||||
if (semantic == Containers::String("volumefield") ||
|
||||
semantic == Containers::String("volumedata")) {
|
||||
return BuiltinPassResourceSemantic::VolumeField;
|
||||
}
|
||||
|
||||
if (semantic == Containers::String("basecolortexture") ||
|
||||
semantic == Containers::String("maintex")) {
|
||||
return BuiltinPassResourceSemantic::BaseColorTexture;
|
||||
@@ -196,6 +203,8 @@ inline const char* BuiltinPassResourceSemanticToString(BuiltinPassResourceSemant
|
||||
return "Environment";
|
||||
case BuiltinPassResourceSemantic::PassConstants:
|
||||
return "PassConstants";
|
||||
case BuiltinPassResourceSemantic::VolumeField:
|
||||
return "VolumeField";
|
||||
case BuiltinPassResourceSemantic::BaseColorTexture:
|
||||
return "BaseColorTexture";
|
||||
case BuiltinPassResourceSemantic::SourceColorTexture:
|
||||
@@ -281,6 +290,9 @@ inline bool IsBuiltinPassResourceTypeCompatible(
|
||||
type == Resources::ShaderResourceType::RawBuffer ||
|
||||
type == Resources::ShaderResourceType::RWStructuredBuffer ||
|
||||
type == Resources::ShaderResourceType::RWRawBuffer;
|
||||
case BuiltinPassResourceSemantic::VolumeField:
|
||||
return type == Resources::ShaderResourceType::StructuredBuffer ||
|
||||
type == Resources::ShaderResourceType::RawBuffer;
|
||||
case BuiltinPassResourceSemantic::BaseColorTexture:
|
||||
case BuiltinPassResourceSemantic::SourceColorTexture:
|
||||
case BuiltinPassResourceSemantic::SkyboxPanoramicTexture:
|
||||
|
||||
@@ -19,6 +19,7 @@ enum class BuiltinMaterialPass : Core::uint32 {
|
||||
ShadowCaster,
|
||||
ObjectId,
|
||||
Skybox,
|
||||
Volumetric,
|
||||
PostProcess,
|
||||
FinalColor,
|
||||
Forward = ForwardLit
|
||||
@@ -42,6 +43,7 @@ enum class BuiltinPassResourceSemantic : Core::uint8 {
|
||||
ShadowReceiver,
|
||||
Environment,
|
||||
PassConstants,
|
||||
VolumeField,
|
||||
BaseColorTexture,
|
||||
SourceColorTexture,
|
||||
SkyboxPanoramicTexture,
|
||||
@@ -70,6 +72,7 @@ struct BuiltinPassResourceBindingPlan {
|
||||
bool usesMaterialBuffers = false;
|
||||
PassResourceBindingLocation perObject = {};
|
||||
PassResourceBindingLocation material = {};
|
||||
PassResourceBindingLocation volumeField = {};
|
||||
PassResourceBindingLocation lighting = {};
|
||||
PassResourceBindingLocation shadowReceiver = {};
|
||||
PassResourceBindingLocation environment = {};
|
||||
@@ -106,6 +109,7 @@ struct BuiltinPassSetLayoutMetadata {
|
||||
bool usesEnvironment = false;
|
||||
bool usesPassConstants = false;
|
||||
bool usesMaterialBuffers = false;
|
||||
bool usesVolumeField = false;
|
||||
bool usesTexture = false;
|
||||
bool usesBaseColorTexture = false;
|
||||
bool usesSourceColorTexture = false;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/Resources/Volume/VolumeField.h>
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
@@ -36,12 +37,24 @@ public:
|
||||
RHI::RHIResourceView* resourceView = nullptr;
|
||||
};
|
||||
|
||||
struct CachedVolumeField {
|
||||
RHI::RHIBuffer* payloadBuffer = nullptr;
|
||||
RHI::RHIResourceView* shaderResourceView = nullptr;
|
||||
uint32_t elementStride = 0;
|
||||
uint32_t elementCount = 0;
|
||||
uint64_t payloadSize = 0;
|
||||
Resources::VolumeStorageKind storageKind = Resources::VolumeStorageKind::Unknown;
|
||||
};
|
||||
|
||||
~RenderResourceCache();
|
||||
|
||||
void Shutdown();
|
||||
|
||||
const CachedMesh* GetOrCreateMesh(RHI::RHIDevice* device, const Resources::Mesh* mesh);
|
||||
const CachedTexture* GetOrCreateTexture(RHI::RHIDevice* device, const Resources::Texture* texture);
|
||||
const CachedVolumeField* GetOrCreateVolumeField(
|
||||
RHI::RHIDevice* device,
|
||||
const Resources::VolumeField* volumeField);
|
||||
const CachedBufferView* GetOrCreateBufferView(
|
||||
RHI::RHIDevice* device,
|
||||
RHI::RHIBuffer* buffer,
|
||||
@@ -77,6 +90,10 @@ private:
|
||||
|
||||
bool UploadMesh(RHI::RHIDevice* device, const Resources::Mesh* mesh, CachedMesh& cachedMesh);
|
||||
bool UploadTexture(RHI::RHIDevice* device, const Resources::Texture* texture, CachedTexture& cachedTexture);
|
||||
bool UploadVolumeField(
|
||||
RHI::RHIDevice* device,
|
||||
const Resources::VolumeField* volumeField,
|
||||
CachedVolumeField& cachedVolumeField);
|
||||
bool CreateBufferView(
|
||||
RHI::RHIDevice* device,
|
||||
RHI::RHIBuffer* buffer,
|
||||
@@ -86,6 +103,7 @@ private:
|
||||
|
||||
std::unordered_map<const Resources::Mesh*, CachedMesh> m_meshCache;
|
||||
std::unordered_map<const Resources::Texture*, CachedTexture> m_textureCache;
|
||||
std::unordered_map<const Resources::VolumeField*, CachedVolumeField> m_volumeFieldCache;
|
||||
std::unordered_map<BufferViewCacheKey, CachedBufferView, BufferViewCacheKeyHash> m_bufferViewCache;
|
||||
};
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ Containers::String GetBuiltinShadowCasterShaderPath();
|
||||
Containers::String GetBuiltinObjectIdShaderPath();
|
||||
Containers::String GetBuiltinObjectIdOutlineShaderPath();
|
||||
Containers::String GetBuiltinSkyboxShaderPath();
|
||||
Containers::String GetBuiltinVolumetricShaderPath();
|
||||
Containers::String GetBuiltinColorScalePostProcessShaderPath();
|
||||
Containers::String GetBuiltinFinalColorShaderPath();
|
||||
Containers::String GetBuiltinDefaultPrimitiveTexturePath();
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace UI {
|
||||
@@ -11,14 +13,26 @@ class UISelectionModel {
|
||||
public:
|
||||
bool HasSelection() const;
|
||||
const std::string& GetSelectedId() const;
|
||||
const std::vector<std::string>& GetSelectedIds() const;
|
||||
std::size_t GetSelectionCount() const;
|
||||
bool HasMultipleSelection() const;
|
||||
bool IsSelected(std::string_view id) const;
|
||||
|
||||
bool SetSelection(std::string selectionId);
|
||||
bool SetSelections(
|
||||
std::vector<std::string> selectionIds,
|
||||
std::string primarySelectionId = {});
|
||||
bool SetPrimarySelection(std::string selectionId);
|
||||
bool AddSelection(std::string selectionId, bool makePrimary = false);
|
||||
bool RemoveSelection(std::string_view selectionId);
|
||||
bool ClearSelection();
|
||||
bool ToggleSelection(std::string selectionId);
|
||||
|
||||
private:
|
||||
std::string m_selectedId = {};
|
||||
static void NormalizeSelectionIds(std::vector<std::string>& selectionIds);
|
||||
|
||||
std::vector<std::string> m_selectedIds = {};
|
||||
std::string m_primarySelectedId = {};
|
||||
};
|
||||
|
||||
} // namespace Widgets
|
||||
|
||||
Reference in New Issue
Block a user