Formalize renderer material contracts and harden backpack import
This commit is contained in:
@@ -62,6 +62,18 @@ std::filesystem::path ResolveRuntimePath(const char* relativePath) {
|
||||
return GetExecutableDirectory() / relativePath;
|
||||
}
|
||||
|
||||
void NormalizeBackpackTestMaterials(Mesh& mesh) {
|
||||
for (Material* material : mesh.GetMaterials()) {
|
||||
if (material == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
MaterialRenderState renderState = material->GetRenderState();
|
||||
renderState.cullMode = MaterialCullMode::None;
|
||||
material->SetRenderState(renderState);
|
||||
}
|
||||
}
|
||||
|
||||
const char* GetScreenshotFilename(RHIType backendType) {
|
||||
switch (backendType) {
|
||||
case RHIType::D3D12:
|
||||
@@ -179,6 +191,7 @@ void BackpackSceneTest::LoadBackpackMesh() {
|
||||
ASSERT_TRUE(mMesh->IsValid());
|
||||
ASSERT_GT(mMesh->GetVertexCount(), 0u);
|
||||
ASSERT_GT(mMesh->GetSections().Size(), 0u);
|
||||
NormalizeBackpackTestMaterials(*mMesh);
|
||||
}
|
||||
|
||||
void BackpackSceneTest::BuildScene() {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Quaternion.h>
|
||||
@@ -19,10 +20,13 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderer.h>
|
||||
#include <XCEngine/Rendering/Materials/RenderMaterialResolve.h>
|
||||
#include <XCEngine/Resources/BuiltinResources.h>
|
||||
#include <XCEngine/Resources/Material/Material.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Mesh/MeshImportSettings.h>
|
||||
#include <XCEngine/Resources/Mesh/MeshLoader.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
@@ -66,6 +70,18 @@ std::filesystem::path ResolveRuntimePath(const char* relativePath) {
|
||||
return GetExecutableDirectory() / relativePath;
|
||||
}
|
||||
|
||||
void NormalizeBackpackTestMaterials(Mesh& mesh) {
|
||||
for (Material* material : mesh.GetMaterials()) {
|
||||
if (material == nullptr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
MaterialRenderState renderState = material->GetRenderState();
|
||||
renderState.cullMode = MaterialCullMode::None;
|
||||
material->SetRenderState(renderState);
|
||||
}
|
||||
}
|
||||
|
||||
Mesh* CreateQuadMesh() {
|
||||
auto* mesh = new Mesh();
|
||||
IResource::ConstructParams params = {};
|
||||
@@ -84,7 +100,7 @@ Mesh* CreateQuadMesh() {
|
||||
vertices[3].position = Vector3(1.0f, 1.0f, 0.0f);
|
||||
vertices[3].uv0 = Vector2(1.0f, 0.0f);
|
||||
|
||||
const uint32_t indices[6] = { 0, 1, 2, 2, 1, 3 };
|
||||
const uint32_t indices[6] = { 0, 2, 1, 2, 3, 1 };
|
||||
mesh->SetVertexData(
|
||||
vertices,
|
||||
sizeof(vertices),
|
||||
@@ -137,7 +153,8 @@ Material* CreateQuadMaterial(Texture* texture) {
|
||||
params.path = "Tests/Rendering/CameraStackQuad.material";
|
||||
params.guid = ResourceGUID::Generate(params.path);
|
||||
material->Initialize(params);
|
||||
material->SetTexture("_BaseColorTexture", ResourceHandle<Texture>(texture));
|
||||
material->SetShader(ResourceManager::Get().Load<Shader>(GetBuiltinForwardLitShaderPath()));
|
||||
material->SetTexture("_MainTex", ResourceHandle<Texture>(texture));
|
||||
return material;
|
||||
}
|
||||
|
||||
@@ -189,6 +206,13 @@ void CameraStackSceneTest::SetUp() {
|
||||
mQuadMesh = CreateQuadMesh();
|
||||
mQuadTexture = CreateCheckerTexture();
|
||||
mQuadMaterial = CreateQuadMaterial(mQuadTexture);
|
||||
ASSERT_NE(mQuadMaterial, nullptr);
|
||||
ASSERT_NE(mQuadMaterial->GetShader(), nullptr);
|
||||
ASSERT_TRUE(mQuadMaterial->HasProperty("_BaseColor"));
|
||||
ASSERT_TRUE(mQuadMaterial->HasProperty("_MainTex"));
|
||||
ASSERT_EQ(mQuadMaterial->GetTexture("_MainTex").Get(), mQuadTexture);
|
||||
ASSERT_EQ(ResolveBuiltinBaseColorTexture(mQuadMaterial), mQuadTexture);
|
||||
ASSERT_TRUE(ResolveSchemaMaterialConstantPayload(mQuadMaterial).IsValid());
|
||||
BuildScene();
|
||||
|
||||
TextureDesc depthDesc = {};
|
||||
@@ -270,6 +294,14 @@ void CameraStackSceneTest::LoadBackpackMesh() {
|
||||
ASSERT_TRUE(mBackpackMesh->IsValid());
|
||||
ASSERT_GT(mBackpackMesh->GetVertexCount(), 0u);
|
||||
ASSERT_GT(mBackpackMesh->GetSections().Size(), 0u);
|
||||
ASSERT_GT(mBackpackMesh->GetMaterials().Size(), 0u);
|
||||
NormalizeBackpackTestMaterials(*mBackpackMesh);
|
||||
|
||||
for (Material* material : mBackpackMesh->GetMaterials()) {
|
||||
ASSERT_NE(material, nullptr);
|
||||
ASSERT_NE(material->GetShader(), nullptr);
|
||||
ASSERT_TRUE(ResolveSchemaMaterialConstantPayload(material).IsValid());
|
||||
}
|
||||
}
|
||||
|
||||
void CameraStackSceneTest::BuildScene() {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Quaternion.h>
|
||||
@@ -16,8 +17,10 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderer.h>
|
||||
#include <XCEngine/Resources/BuiltinResources.h>
|
||||
#include <XCEngine/Resources/Material/Material.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
@@ -110,7 +113,8 @@ Material* CreateMaterial(
|
||||
params.path = path;
|
||||
params.guid = ResourceGUID::Generate(params.path);
|
||||
material->Initialize(params);
|
||||
material->SetTexture("_BaseColorTexture", ResourceHandle<Texture>(texture));
|
||||
material->SetShader(ResourceManager::Get().Load<Shader>(GetBuiltinForwardLitShaderPath()));
|
||||
material->SetTexture("_MainTex", ResourceHandle<Texture>(texture));
|
||||
material->SetRenderQueue(MaterialRenderQueue::Geometry);
|
||||
material->SetRenderState(renderState);
|
||||
return material;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Quaternion.h>
|
||||
@@ -16,8 +17,10 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderer.h>
|
||||
#include <XCEngine/Resources/BuiltinResources.h>
|
||||
#include <XCEngine/Resources/Material/Material.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
@@ -61,7 +64,7 @@ Mesh* CreateQuadMesh() {
|
||||
vertices[3].position = Vector3(1.0f, 1.0f, 0.0f);
|
||||
vertices[3].uv0 = Vector2(1.0f, 0.0f);
|
||||
|
||||
const uint32_t indices[6] = { 0, 1, 2, 2, 1, 3 };
|
||||
const uint32_t indices[6] = { 0, 2, 1, 2, 3, 1 };
|
||||
mesh->SetVertexData(
|
||||
vertices,
|
||||
sizeof(vertices),
|
||||
@@ -111,7 +114,8 @@ Material* CreateMaterial(
|
||||
params.path = path;
|
||||
params.guid = ResourceGUID::Generate(params.path);
|
||||
material->Initialize(params);
|
||||
material->SetTexture("_BaseColorTexture", ResourceHandle<Texture>(texture));
|
||||
material->SetShader(ResourceManager::Get().Load<Shader>(GetBuiltinForwardLitShaderPath()));
|
||||
material->SetTexture("_MainTex", ResourceHandle<Texture>(texture));
|
||||
material->SetRenderQueue(renderQueue);
|
||||
material->SetRenderState(renderState);
|
||||
return material;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Quaternion.h>
|
||||
@@ -16,8 +17,10 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderer.h>
|
||||
#include <XCEngine/Resources/BuiltinResources.h>
|
||||
#include <XCEngine/Resources/Material/Material.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
@@ -112,7 +115,8 @@ Material* CreateMaterial(
|
||||
params.path = path;
|
||||
params.guid = ResourceGUID::Generate(params.path);
|
||||
material->Initialize(params);
|
||||
material->SetTexture("_BaseColorTexture", ResourceHandle<Texture>(texture));
|
||||
material->SetShader(ResourceManager::Get().Load<Shader>(GetBuiltinForwardLitShaderPath()));
|
||||
material->SetTexture("_MainTex", ResourceHandle<Texture>(texture));
|
||||
material->SetRenderQueue(renderQueue);
|
||||
material->SetRenderState(renderState);
|
||||
return material;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Quaternion.h>
|
||||
@@ -16,8 +17,10 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderer.h>
|
||||
#include <XCEngine/Resources/BuiltinResources.h>
|
||||
#include <XCEngine/Resources/Material/Material.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
@@ -61,7 +64,7 @@ Mesh* CreateQuadMesh() {
|
||||
vertices[3].position = Vector3(1.0f, 1.0f, 0.0f);
|
||||
vertices[3].uv0 = Vector2(1.0f, 0.0f);
|
||||
|
||||
const uint32_t indices[6] = { 0, 1, 2, 2, 1, 3 };
|
||||
const uint32_t indices[6] = { 0, 2, 1, 2, 3, 1 };
|
||||
mesh->SetVertexData(
|
||||
vertices,
|
||||
sizeof(vertices),
|
||||
@@ -111,7 +114,8 @@ Material* CreateMaterial(
|
||||
params.path = path;
|
||||
params.guid = ResourceGUID::Generate(params.path);
|
||||
material->Initialize(params);
|
||||
material->SetTexture("_BaseColorTexture", ResourceHandle<Texture>(texture));
|
||||
material->SetShader(ResourceManager::Get().Load<Shader>(GetBuiltinForwardLitShaderPath()));
|
||||
material->SetTexture("_MainTex", ResourceHandle<Texture>(texture));
|
||||
material->SetRenderQueue(renderQueue);
|
||||
material->SetRenderState(renderState);
|
||||
return material;
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Vector2.h>
|
||||
@@ -15,8 +16,11 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderer.h>
|
||||
#include <XCEngine/Rendering/Materials/RenderMaterialResolve.h>
|
||||
#include <XCEngine/Resources/BuiltinResources.h>
|
||||
#include <XCEngine/Resources/Material/Material.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
@@ -61,7 +65,7 @@ Mesh* CreateQuadMesh() {
|
||||
vertices[3].position = Vector3(1.0f, 1.0f, 0.0f);
|
||||
vertices[3].uv0 = Vector2(1.0f, 0.0f);
|
||||
|
||||
const uint32_t indices[6] = { 0, 1, 2, 2, 1, 3 };
|
||||
const uint32_t indices[6] = { 0, 2, 1, 2, 3, 1 };
|
||||
mesh->SetVertexData(
|
||||
vertices,
|
||||
sizeof(vertices),
|
||||
@@ -114,7 +118,8 @@ Material* CreateMaterial(Texture* texture) {
|
||||
params.path = "Tests/Rendering/Quad.material";
|
||||
params.guid = ResourceGUID::Generate(params.path);
|
||||
material->Initialize(params);
|
||||
material->SetTexture("_BaseColorTexture", ResourceHandle<Texture>(texture));
|
||||
material->SetShader(ResourceManager::Get().Load<Shader>(GetBuiltinForwardLitShaderPath()));
|
||||
material->SetTexture("_MainTex", ResourceHandle<Texture>(texture));
|
||||
return material;
|
||||
}
|
||||
|
||||
@@ -162,6 +167,14 @@ void TexturedQuadSceneTest::SetUp() {
|
||||
mMesh = CreateQuadMesh();
|
||||
mTexture = CreateCheckerTexture();
|
||||
mMaterial = CreateMaterial(mTexture);
|
||||
ASSERT_NE(mMaterial, nullptr);
|
||||
ASSERT_NE(mMaterial->GetShader(), nullptr);
|
||||
ASSERT_TRUE(mMaterial->HasProperty("_BaseColor"));
|
||||
ASSERT_TRUE(mMaterial->HasProperty("_Cutoff"));
|
||||
ASSERT_TRUE(mMaterial->HasProperty("_MainTex"));
|
||||
ASSERT_EQ(mMaterial->GetTexture("_MainTex").Get(), mTexture);
|
||||
ASSERT_EQ(ResolveBuiltinBaseColorTexture(mMaterial), mTexture);
|
||||
ASSERT_TRUE(ResolveSchemaMaterialConstantPayload(mMaterial).IsValid());
|
||||
|
||||
GameObject* cameraObject = mScene->CreateGameObject("MainCamera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include <XCEngine/Components/GameObject.h>
|
||||
#include <XCEngine/Components/MeshFilterComponent.h>
|
||||
#include <XCEngine/Components/MeshRendererComponent.h>
|
||||
#include <XCEngine/Core/Asset/ResourceManager.h>
|
||||
#include <XCEngine/Core/Asset/IResource.h>
|
||||
#include <XCEngine/Core/Math/Color.h>
|
||||
#include <XCEngine/Core/Math/Quaternion.h>
|
||||
@@ -16,8 +17,10 @@
|
||||
#include <XCEngine/Rendering/RenderContext.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderer.h>
|
||||
#include <XCEngine/Resources/BuiltinResources.h>
|
||||
#include <XCEngine/Resources/Material/Material.h>
|
||||
#include <XCEngine/Resources/Mesh/Mesh.h>
|
||||
#include <XCEngine/Resources/Shader/Shader.h>
|
||||
#include <XCEngine/Resources/Texture/Texture.h>
|
||||
#include <XCEngine/RHI/RHITexture.h>
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
@@ -61,7 +64,7 @@ Mesh* CreateQuadMesh() {
|
||||
vertices[3].position = Vector3(1.0f, 1.0f, 0.0f);
|
||||
vertices[3].uv0 = Vector2(1.0f, 0.0f);
|
||||
|
||||
const uint32_t indices[6] = { 0, 1, 2, 2, 1, 3 };
|
||||
const uint32_t indices[6] = { 0, 2, 1, 2, 3, 1 };
|
||||
mesh->SetVertexData(
|
||||
vertices,
|
||||
sizeof(vertices),
|
||||
@@ -111,7 +114,8 @@ Material* CreateMaterial(
|
||||
params.path = path;
|
||||
params.guid = ResourceGUID::Generate(params.path);
|
||||
material->Initialize(params);
|
||||
material->SetTexture("_BaseColorTexture", ResourceHandle<Texture>(texture));
|
||||
material->SetShader(ResourceManager::Get().Load<Shader>(GetBuiltinForwardLitShaderPath()));
|
||||
material->SetTexture("_MainTex", ResourceHandle<Texture>(texture));
|
||||
material->SetRenderQueue(renderQueue);
|
||||
material->SetRenderState(renderState);
|
||||
return material;
|
||||
|
||||
Reference in New Issue
Block a user