Graphics: Add a way to set which passes are enabled in a frame pipeline
This will be replaced soon with a better system
This commit is contained in:
parent
50c90fd725
commit
b09b4d2419
|
|
@ -75,7 +75,7 @@ int main(int argc, char* argv[])
|
||||||
|
|
||||||
Nz::ElementRendererRegistry elementRegistry;
|
Nz::ElementRendererRegistry elementRegistry;
|
||||||
Nz::ForwardFramePipeline framePipeline(elementRegistry);
|
Nz::ForwardFramePipeline framePipeline(elementRegistry);
|
||||||
[[maybe_unused]] std::size_t cameraIndex = framePipeline.RegisterViewer(&camera, 0);
|
[[maybe_unused]] std::size_t cameraIndex = framePipeline.RegisterViewer(&camera, 0, Nz::FramePipelineAllExtraPasses);
|
||||||
std::size_t worldInstanceIndex1 = framePipeline.RegisterWorldInstance(modelInstance);
|
std::size_t worldInstanceIndex1 = framePipeline.RegisterWorldInstance(modelInstance);
|
||||||
framePipeline.RegisterRenderable(worldInstanceIndex1, Nz::FramePipeline::NoSkeletonInstance, &model, 0xFFFFFFFF, scissorBox);
|
framePipeline.RegisterRenderable(worldInstanceIndex1, Nz::FramePipeline::NoSkeletonInstance, &model, 0xFFFFFFFF, scissorBox);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,8 @@ namespace Nz
|
||||||
inline float GetAspectRatio() const;
|
inline float GetAspectRatio() const;
|
||||||
const Color& GetClearColor() const override;
|
const Color& GetClearColor() const override;
|
||||||
inline DegreeAnglef GetFOV() const;
|
inline DegreeAnglef GetFOV() const;
|
||||||
|
inline FramePipelineExtraPassFlags GetFramePipelineExtraPassFlags() const;
|
||||||
|
inline ProjectionType GetProjectionType() const;
|
||||||
UInt32 GetRenderMask() const override;
|
UInt32 GetRenderMask() const override;
|
||||||
inline Int32 GetRenderOrder() const;
|
inline Int32 GetRenderOrder() const;
|
||||||
const RenderTarget& GetRenderTarget() const override;
|
const RenderTarget& GetRenderTarget() const override;
|
||||||
|
|
@ -43,6 +45,7 @@ namespace Nz
|
||||||
|
|
||||||
inline void UpdateClearColor(Color color);
|
inline void UpdateClearColor(Color color);
|
||||||
inline void UpdateFOV(DegreeAnglef fov);
|
inline void UpdateFOV(DegreeAnglef fov);
|
||||||
|
inline void UpdateFramePipelineExtraPassFlags(FramePipelineExtraPassFlags framePipelineExtraFlags);
|
||||||
inline void UpdateProjectionType(ProjectionType projectionType);
|
inline void UpdateProjectionType(ProjectionType projectionType);
|
||||||
inline void UpdateRenderMask(UInt32 renderMask);
|
inline void UpdateRenderMask(UInt32 renderMask);
|
||||||
inline void UpdateRenderOrder(Int32 renderOrder);
|
inline void UpdateRenderOrder(Int32 renderOrder);
|
||||||
|
|
@ -67,6 +70,7 @@ namespace Nz
|
||||||
const RenderTarget* m_renderTarget;
|
const RenderTarget* m_renderTarget;
|
||||||
Color m_clearColor;
|
Color m_clearColor;
|
||||||
DegreeAnglef m_fov;
|
DegreeAnglef m_fov;
|
||||||
|
FramePipelineExtraPassFlags m_framePipelineExtraPassFlags;
|
||||||
Int32 m_renderOrder;
|
Int32 m_renderOrder;
|
||||||
ProjectionType m_projectionType;
|
ProjectionType m_projectionType;
|
||||||
Rectf m_targetRegion;
|
Rectf m_targetRegion;
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ namespace Nz
|
||||||
m_renderTarget(nullptr),
|
m_renderTarget(nullptr),
|
||||||
m_clearColor(Color::Black()),
|
m_clearColor(Color::Black()),
|
||||||
m_fov(90.f),
|
m_fov(90.f),
|
||||||
|
m_framePipelineExtraPassFlags(FramePipelineExtraPass::DebugDraw),
|
||||||
m_renderOrder(0),
|
m_renderOrder(0),
|
||||||
m_projectionType(projectionType),
|
m_projectionType(projectionType),
|
||||||
m_targetRegion(0.f, 0.f, 1.f, 1.f),
|
m_targetRegion(0.f, 0.f, 1.f, 1.f),
|
||||||
|
|
@ -20,6 +21,9 @@ namespace Nz
|
||||||
m_zFar((projectionType == ProjectionType::Perspective) ? 1000.f : 1.f),
|
m_zFar((projectionType == ProjectionType::Perspective) ? 1000.f : 1.f),
|
||||||
m_zNear((projectionType == ProjectionType::Perspective) ? 1.f : -1.f)
|
m_zNear((projectionType == ProjectionType::Perspective) ? 1.f : -1.f)
|
||||||
{
|
{
|
||||||
|
if (projectionType == ProjectionType::Perspective)
|
||||||
|
m_framePipelineExtraPassFlags |= FramePipelineExtraPass::DepthPrepass;
|
||||||
|
|
||||||
UpdateTarget(renderTarget);
|
UpdateTarget(renderTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -27,6 +31,7 @@ namespace Nz
|
||||||
m_renderTarget(nullptr),
|
m_renderTarget(nullptr),
|
||||||
m_clearColor(camera.m_clearColor),
|
m_clearColor(camera.m_clearColor),
|
||||||
m_fov(camera.m_fov),
|
m_fov(camera.m_fov),
|
||||||
|
m_framePipelineExtraPassFlags(camera.m_framePipelineExtraPassFlags),
|
||||||
m_renderOrder(camera.m_renderOrder),
|
m_renderOrder(camera.m_renderOrder),
|
||||||
m_projectionType(camera.m_projectionType),
|
m_projectionType(camera.m_projectionType),
|
||||||
m_targetRegion(camera.m_targetRegion),
|
m_targetRegion(camera.m_targetRegion),
|
||||||
|
|
@ -44,6 +49,7 @@ namespace Nz
|
||||||
m_renderTarget(nullptr),
|
m_renderTarget(nullptr),
|
||||||
m_clearColor(camera.m_clearColor),
|
m_clearColor(camera.m_clearColor),
|
||||||
m_fov(camera.m_fov),
|
m_fov(camera.m_fov),
|
||||||
|
m_framePipelineExtraPassFlags(camera.m_framePipelineExtraPassFlags),
|
||||||
m_renderOrder(camera.m_renderOrder),
|
m_renderOrder(camera.m_renderOrder),
|
||||||
m_projectionType(camera.m_projectionType),
|
m_projectionType(camera.m_projectionType),
|
||||||
m_targetRegion(camera.m_targetRegion),
|
m_targetRegion(camera.m_targetRegion),
|
||||||
|
|
@ -67,6 +73,16 @@ namespace Nz
|
||||||
return m_fov;
|
return m_fov;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline FramePipelineExtraPassFlags Camera::GetFramePipelineExtraPassFlags() const
|
||||||
|
{
|
||||||
|
return m_framePipelineExtraPassFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline ProjectionType Camera::GetProjectionType() const
|
||||||
|
{
|
||||||
|
return m_projectionType;
|
||||||
|
}
|
||||||
|
|
||||||
inline Int32 Camera::GetRenderOrder() const
|
inline Int32 Camera::GetRenderOrder() const
|
||||||
{
|
{
|
||||||
return m_renderOrder;
|
return m_renderOrder;
|
||||||
|
|
@ -103,6 +119,11 @@ namespace Nz
|
||||||
UpdateProjectionMatrix();
|
UpdateProjectionMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void Camera::UpdateFramePipelineExtraPassFlags(FramePipelineExtraPassFlags framePipelineExtraFlags)
|
||||||
|
{
|
||||||
|
m_framePipelineExtraPassFlags = framePipelineExtraFlags;
|
||||||
|
}
|
||||||
|
|
||||||
inline void Camera::UpdateZFar(float zFar)
|
inline void Camera::UpdateZFar(float zFar)
|
||||||
{
|
{
|
||||||
m_zFar = zFar;
|
m_zFar = zFar;
|
||||||
|
|
@ -119,6 +140,7 @@ namespace Nz
|
||||||
|
|
||||||
inline Camera& Camera::operator=(const Camera& camera)
|
inline Camera& Camera::operator=(const Camera& camera)
|
||||||
{
|
{
|
||||||
|
m_framePipelineExtraPassFlags = camera.m_framePipelineExtraPassFlags;
|
||||||
m_fov = camera.m_fov;
|
m_fov = camera.m_fov;
|
||||||
m_projectionType = camera.m_projectionType;
|
m_projectionType = camera.m_projectionType;
|
||||||
m_targetRegion = camera.m_targetRegion;
|
m_targetRegion = camera.m_targetRegion;
|
||||||
|
|
@ -135,6 +157,7 @@ namespace Nz
|
||||||
|
|
||||||
inline Camera& Camera::operator=(Camera&& camera) noexcept
|
inline Camera& Camera::operator=(Camera&& camera) noexcept
|
||||||
{
|
{
|
||||||
|
m_framePipelineExtraPassFlags = camera.m_framePipelineExtraPassFlags;
|
||||||
m_fov = camera.m_fov;
|
m_fov = camera.m_fov;
|
||||||
m_projectionType = camera.m_projectionType;
|
m_projectionType = camera.m_projectionType;
|
||||||
m_targetRegion = camera.m_targetRegion;
|
m_targetRegion = camera.m_targetRegion;
|
||||||
|
|
@ -246,3 +269,4 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <Nazara/Graphics/DebugOff.hpp>
|
#include <Nazara/Graphics/DebugOff.hpp>
|
||||||
|
#include "Camera.hpp"
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,24 @@ namespace Nz
|
||||||
Volume
|
Volume
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class FramePipelineExtraPass
|
||||||
|
{
|
||||||
|
DebugDraw,
|
||||||
|
DepthPrepass,
|
||||||
|
|
||||||
|
Max = DepthPrepass
|
||||||
|
};
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct EnumAsFlags<FramePipelineExtraPass>
|
||||||
|
{
|
||||||
|
static constexpr FramePipelineExtraPass max = FramePipelineExtraPass::Max;
|
||||||
|
};
|
||||||
|
|
||||||
|
using FramePipelineExtraPassFlags = Flags<FramePipelineExtraPass>;
|
||||||
|
|
||||||
|
constexpr FramePipelineExtraPassFlags FramePipelineAllExtraPasses = FramePipelineExtraPass::DebugDraw | FramePipelineExtraPass::DepthPrepass;
|
||||||
|
|
||||||
enum class MaterialPropertyType
|
enum class MaterialPropertyType
|
||||||
{
|
{
|
||||||
Bool,
|
Bool,
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ namespace Nz
|
||||||
std::size_t RegisterLight(const Light* light, UInt32 renderMask) override;
|
std::size_t RegisterLight(const Light* light, UInt32 renderMask) override;
|
||||||
std::size_t RegisterRenderable(std::size_t worldInstanceIndex, std::size_t skeletonInstanceIndex, const InstancedRenderable* instancedRenderable, UInt32 renderMask, const Recti& scissorBox) override;
|
std::size_t RegisterRenderable(std::size_t worldInstanceIndex, std::size_t skeletonInstanceIndex, const InstancedRenderable* instancedRenderable, UInt32 renderMask, const Recti& scissorBox) override;
|
||||||
std::size_t RegisterSkeleton(SkeletonInstancePtr skeletonInstance) override;
|
std::size_t RegisterSkeleton(SkeletonInstancePtr skeletonInstance) override;
|
||||||
std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder) override;
|
std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder, FramePipelineExtraPassFlags passFlags) override;
|
||||||
std::size_t RegisterWorldInstance(WorldInstancePtr worldInstance) override;
|
std::size_t RegisterWorldInstance(WorldInstancePtr worldInstance) override;
|
||||||
|
|
||||||
const Light* RetrieveLight(std::size_t lightIndex) const override;
|
const Light* RetrieveLight(std::size_t lightIndex) const override;
|
||||||
|
|
@ -131,6 +131,7 @@ namespace Nz
|
||||||
|
|
||||||
struct ViewerData
|
struct ViewerData
|
||||||
{
|
{
|
||||||
|
std::size_t finalColorAttachment;
|
||||||
std::size_t forwardColorAttachment;
|
std::size_t forwardColorAttachment;
|
||||||
std::size_t debugColorAttachment;
|
std::size_t debugColorAttachment;
|
||||||
std::size_t depthStencilAttachment;
|
std::size_t depthStencilAttachment;
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@ namespace Nz
|
||||||
virtual std::size_t RegisterLight(const Light* light, UInt32 renderMask) = 0;
|
virtual std::size_t RegisterLight(const Light* light, UInt32 renderMask) = 0;
|
||||||
virtual std::size_t RegisterRenderable(std::size_t worldInstanceIndex, std::size_t skeletonInstanceIndex, const InstancedRenderable* instancedRenderable, UInt32 renderMask, const Recti& scissorBox) = 0;
|
virtual std::size_t RegisterRenderable(std::size_t worldInstanceIndex, std::size_t skeletonInstanceIndex, const InstancedRenderable* instancedRenderable, UInt32 renderMask, const Recti& scissorBox) = 0;
|
||||||
virtual std::size_t RegisterSkeleton(SkeletonInstancePtr skeletonInstance) = 0;
|
virtual std::size_t RegisterSkeleton(SkeletonInstancePtr skeletonInstance) = 0;
|
||||||
virtual std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder) = 0;
|
virtual std::size_t RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder, FramePipelineExtraPassFlags passFlags) = 0;
|
||||||
virtual std::size_t RegisterWorldInstance(WorldInstancePtr worldInstance) = 0;
|
virtual std::size_t RegisterWorldInstance(WorldInstancePtr worldInstance) = 0;
|
||||||
|
|
||||||
virtual const Light* RetrieveLight(std::size_t lightIndex) const = 0;
|
virtual const Light* RetrieveLight(std::size_t lightIndex) const = 0;
|
||||||
|
|
|
||||||
|
|
@ -237,15 +237,13 @@ namespace Nz
|
||||||
return skeletonInstanceIndex;
|
return skeletonInstanceIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t ForwardFramePipeline::RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder)
|
std::size_t ForwardFramePipeline::RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder, FramePipelineExtraPassFlags passFlags)
|
||||||
{
|
{
|
||||||
std::size_t depthPassIndex = Graphics::Instance()->GetMaterialPassRegistry().GetPassIndex("DepthPass");
|
std::size_t depthPassIndex = Graphics::Instance()->GetMaterialPassRegistry().GetPassIndex("DepthPass");
|
||||||
|
|
||||||
std::size_t viewerIndex;
|
std::size_t viewerIndex;
|
||||||
auto& viewerData = *m_viewerPool.Allocate(viewerIndex);
|
auto& viewerData = *m_viewerPool.Allocate(viewerIndex);
|
||||||
viewerData.renderOrder = renderOrder;
|
viewerData.renderOrder = renderOrder;
|
||||||
viewerData.debugDrawPass = std::make_unique<DebugDrawPipelinePass>(*this, viewerInstance);
|
|
||||||
viewerData.depthPrepass = std::make_unique<DepthPipelinePass>(*this, m_elementRegistry, viewerInstance, depthPassIndex, "Depth pre-pass");
|
|
||||||
viewerData.forwardPass = std::make_unique<ForwardPipelinePass>(*this, m_elementRegistry, viewerInstance);
|
viewerData.forwardPass = std::make_unique<ForwardPipelinePass>(*this, m_elementRegistry, viewerInstance);
|
||||||
viewerData.viewer = viewerInstance;
|
viewerData.viewer = viewerInstance;
|
||||||
viewerData.onTransferRequired.Connect(viewerInstance->GetViewerInstance().OnTransferRequired, [this](TransferInterface* transferInterface)
|
viewerData.onTransferRequired.Connect(viewerInstance->GetViewerInstance().OnTransferRequired, [this](TransferInterface* transferInterface)
|
||||||
|
|
@ -253,6 +251,12 @@ namespace Nz
|
||||||
m_transferSet.insert(transferInterface);
|
m_transferSet.insert(transferInterface);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (passFlags.Test(FramePipelineExtraPass::DebugDraw))
|
||||||
|
viewerData.debugDrawPass = std::make_unique<DebugDrawPipelinePass>(*this, viewerInstance);
|
||||||
|
|
||||||
|
if (passFlags.Test(FramePipelineExtraPass::DepthPrepass))
|
||||||
|
viewerData.depthPrepass = std::make_unique<DepthPipelinePass>(*this, m_elementRegistry, viewerInstance, depthPassIndex, "Depth pre-pass");
|
||||||
|
|
||||||
m_transferSet.insert(&viewerInstance->GetViewerInstance());
|
m_transferSet.insert(&viewerInstance->GetViewerInstance());
|
||||||
|
|
||||||
m_rebuildFrameGraph = true;
|
m_rebuildFrameGraph = true;
|
||||||
|
|
@ -394,7 +398,8 @@ namespace Nz
|
||||||
|
|
||||||
viewerData.forwardPass->Prepare(renderFrame, frustum, visibleRenderables, m_visibleLights, visibilityHash);
|
viewerData.forwardPass->Prepare(renderFrame, frustum, visibleRenderables, m_visibleLights, visibilityHash);
|
||||||
|
|
||||||
viewerData.debugDrawPass->Prepare(renderFrame);
|
if (viewerData.debugDrawPass)
|
||||||
|
viewerData.debugDrawPass->Prepare(renderFrame);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frameGraphInvalidated)
|
if (frameGraphInvalidated)
|
||||||
|
|
@ -410,7 +415,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
0,
|
0,
|
||||||
ShaderBinding::SampledTextureBinding {
|
ShaderBinding::SampledTextureBinding {
|
||||||
m_bakedFrameGraph.GetAttachmentTexture(viewerData.debugColorAttachment).get(),
|
m_bakedFrameGraph.GetAttachmentTexture(viewerData.finalColorAttachment).get(),
|
||||||
sampler.get()
|
sampler.get()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -606,7 +611,6 @@ namespace Nz
|
||||||
PixelFormat::RGBA8
|
PixelFormat::RGBA8
|
||||||
});
|
});
|
||||||
|
|
||||||
viewerData.debugColorAttachment = frameGraph.AddAttachmentProxy("Debug draw output", viewerData.forwardColorAttachment);
|
|
||||||
|
|
||||||
viewerData.depthStencilAttachment = frameGraph.AddAttachment({
|
viewerData.depthStencilAttachment = frameGraph.AddAttachment({
|
||||||
"Depth-stencil buffer",
|
"Depth-stencil buffer",
|
||||||
|
|
@ -623,7 +627,14 @@ namespace Nz
|
||||||
lightData->shadowData->RegisterPassInputs(forwardPass);
|
lightData->shadowData->RegisterPassInputs(forwardPass);
|
||||||
}
|
}
|
||||||
|
|
||||||
viewerData.debugDrawPass->RegisterToFrameGraph(frameGraph, viewerData.forwardColorAttachment, viewerData.debugColorAttachment);
|
if (viewerData.debugDrawPass)
|
||||||
|
{
|
||||||
|
viewerData.debugColorAttachment = frameGraph.AddAttachmentProxy("Debug draw output", viewerData.forwardColorAttachment);
|
||||||
|
viewerData.debugDrawPass->RegisterToFrameGraph(frameGraph, viewerData.forwardColorAttachment, viewerData.debugColorAttachment);
|
||||||
|
viewerData.finalColorAttachment = viewerData.debugColorAttachment;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
viewerData.finalColorAttachment = viewerData.forwardColorAttachment;
|
||||||
}
|
}
|
||||||
|
|
||||||
using ViewerPair = std::pair<const RenderTarget*, const ViewerData*>;
|
using ViewerPair = std::pair<const RenderTarget*, const ViewerData*>;
|
||||||
|
|
@ -661,7 +672,7 @@ namespace Nz
|
||||||
});
|
});
|
||||||
|
|
||||||
for (const ViewerData* viewerData : targetViewers)
|
for (const ViewerData* viewerData : targetViewers)
|
||||||
mergePass.AddInput(viewerData->debugColorAttachment);
|
mergePass.AddInput(viewerData->finalColorAttachment);
|
||||||
|
|
||||||
mergePass.AddOutput(renderTargetData.finalAttachment);
|
mergePass.AddOutput(renderTargetData.finalAttachment);
|
||||||
mergePass.SetClearColor(0, Color::Black());
|
mergePass.SetClearColor(0, Color::Black());
|
||||||
|
|
|
||||||
|
|
@ -330,7 +330,7 @@ namespace Nz
|
||||||
CameraEntity* cameraEntity = m_cameraEntityPool.Allocate(poolIndex);
|
CameraEntity* cameraEntity = m_cameraEntityPool.Allocate(poolIndex);
|
||||||
cameraEntity->poolIndex = poolIndex;
|
cameraEntity->poolIndex = poolIndex;
|
||||||
cameraEntity->entity = entity;
|
cameraEntity->entity = entity;
|
||||||
cameraEntity->viewerIndex = m_pipeline->RegisterViewer(&entityCamera, entityCamera.GetRenderOrder());
|
cameraEntity->viewerIndex = m_pipeline->RegisterViewer(&entityCamera, entityCamera.GetRenderOrder(), entityCamera.GetFramePipelineExtraPassFlags());
|
||||||
cameraEntity->onNodeInvalidation.Connect(entityNode.OnNodeInvalidation, [this, cameraEntity](const Node* /*node*/)
|
cameraEntity->onNodeInvalidation.Connect(entityNode.OnNodeInvalidation, [this, cameraEntity](const Node* /*node*/)
|
||||||
{
|
{
|
||||||
m_invalidatedCameraNode.insert(cameraEntity);
|
m_invalidatedCameraNode.insert(cameraEntity);
|
||||||
|
|
|
||||||
|
|
@ -93,7 +93,7 @@ int main()
|
||||||
|
|
||||||
Nz::ElementRendererRegistry elementRegistry;
|
Nz::ElementRendererRegistry elementRegistry;
|
||||||
Nz::ForwardFramePipeline framePipeline(elementRegistry);
|
Nz::ForwardFramePipeline framePipeline(elementRegistry);
|
||||||
[[maybe_unused]] std::size_t cameraIndex = framePipeline.RegisterViewer(&camera, 0);
|
[[maybe_unused]] std::size_t cameraIndex = framePipeline.RegisterViewer(&camera, 0, Nz::FramePipelineAllExtraPasses);
|
||||||
std::size_t worldInstanceIndex1 = framePipeline.RegisterWorldInstance(modelInstance);
|
std::size_t worldInstanceIndex1 = framePipeline.RegisterWorldInstance(modelInstance);
|
||||||
std::size_t worldInstanceIndex2 = framePipeline.RegisterWorldInstance(modelInstance2);
|
std::size_t worldInstanceIndex2 = framePipeline.RegisterWorldInstance(modelInstance2);
|
||||||
framePipeline.RegisterRenderable(worldInstanceIndex1, Nz::FramePipeline::NoSkeletonInstance, &model, 0xFFFFFFFF, scissorBox);
|
framePipeline.RegisterRenderable(worldInstanceIndex1, Nz::FramePipeline::NoSkeletonInstance, &model, 0xFFFFFFFF, scissorBox);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue