You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Gems/Atom/RPI/Code/Tests/Common/TestFeatureProcessors.h

148 lines
4.7 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
namespace UnitTest
{
// A feature processor which has scene notification enabled
class TestFeatureProcessor1 final
: public AZ::RPI::FeatureProcessor
{
public:
AZ_RTTI(TestFeatureProcessor1, "{CCC3EB15-D80E-4F5A-93F4-B0F993A5E7F5}", AZ::RPI::FeatureProcessor);
static void Reflect(AZ::ReflectContext* context)
{
if (auto* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<TestFeatureProcessor1, AZ::RPI::FeatureProcessor>()
->Version(1)
;
}
}
// Variables
// notification counters
int m_pipelineCount = 0;
int m_viewSetCount = 0;
int m_pipelineChangedCount = 0;
AZ::RPI::RenderPipeline* m_lastPipeline = nullptr;
// FeatureProcessor overrides...
void Activate() override
{
EnableSceneNotification();
}
void Deactivate() override
{
DisableSceneNotification();
}
void Render(const RenderPacket&) override {};
// Overrides for scene notification bus handler
void OnRenderPipelineAdded(AZ::RPI::RenderPipelinePtr pipeline) override
{
m_pipelineCount++;
m_lastPipeline = pipeline.get();
}
void OnRenderPipelineRemoved(AZ::RPI::RenderPipeline* pipeline) override
{
m_pipelineCount--;
m_lastPipeline = pipeline;
}
void OnRenderPipelinePersistentViewChanged(AZ::RPI::RenderPipeline* renderPipeline, AZ::RPI::PipelineViewTag viewTag, AZ::RPI::ViewPtr newView, AZ::RPI::ViewPtr previousView) override
{
m_viewSetCount++;
m_lastPipeline = renderPipeline;
}
void OnRenderPipelinePassesChanged(AZ::RPI::RenderPipeline* renderPipeline) override
{
m_pipelineChangedCount++;
m_lastPipeline = renderPipeline;
}
};
class TestFeatureProcessor2 final
: public AZ::RPI::FeatureProcessor
{
public:
AZ_RTTI(TestFeatureProcessor2, "{1DB411E1-0C0D-4FA1-A0AA-9935CFF671D5}", AZ::RPI::FeatureProcessor);
static void Reflect(AZ::ReflectContext* context)
{
if (auto* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<TestFeatureProcessor2, AZ::RPI::FeatureProcessor>()
->Version(1)
;
}
}
void Render(const RenderPacket&) override {};
};
class TestFeatureProcessorInterface
: public AZ::RPI::FeatureProcessor
{
public:
AZ_RTTI(TestFeatureProcessorInterface, "{F1766CA0-B3A6-40F5-8ADE-5E93EB0DDE9D}", AZ::RPI::FeatureProcessor);
virtual void SetValue(int value) = 0;
virtual int GetValue() const = 0;
};
class TestFeatureProcessorImplementation final
: public TestFeatureProcessorInterface
{
public:
AZ_RTTI(TestFeatureProcessorImplementation, "{2FEB6299-A03E-4341-9234-47786F5A53C3}", TestFeatureProcessorInterface);
static void Reflect(AZ::ReflectContext* context)
{
if (auto* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<TestFeatureProcessorImplementation, TestFeatureProcessorInterface>()
->Version(1)
;
}
}
void Render(const RenderPacket&) override {};
void SetValue(int value) override { m_value = value; }
int GetValue() const override { return m_value; };
private:
int m_value = 0;
};
class TestFeatureProcessorImplementation2 final
: public TestFeatureProcessorInterface
{
public:
AZ_RTTI(TestFeatureProcessorImplementation2, "{48E98E91-373E-43D4-BFD2-991B9FF8CEE8}", TestFeatureProcessorInterface);
static void Reflect(AZ::ReflectContext* context)
{
if (auto* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<TestFeatureProcessorImplementation2, TestFeatureProcessorInterface>()
->Version(1)
;
}
}
void Render(const RenderPacket&) override {};
void SetValue(int value) override { m_value = value; }
int GetValue() const override { return m_value; };
private:
int m_value = 0;
};
} // namespace UnitTest