67 const std::shared_ptr<RenderTarget>& targetRenderTarget);
81 const std::shared_ptr<RenderTarget>& targetRenderTarget);
89 std::shared_ptr<RenderTarget> createRenderTarget(
const std::string& name,
bool depth,
bool stencil,
int samples)
const;
93 struct ScenePassesInfo
95 int lastAddedIndex = -1;
96 bool clearRenderTarget =
true;
98 ScenePassesInfo setupScenePass(
const CameraFrameOptions& options);
99 void setupSsaoPass(
const CameraFrameOptions& options);
100 Texture* setupTaaPass(
const CameraFrameOptions& options);
101 void setupSceneHalfPass(
const CameraFrameOptions& options, Texture* sourceTexture);
102 void setupBloomPass(
const CameraFrameOptions& options, Texture* inputTexture);
103 void setupDofPass(
const CameraFrameOptions& options, Texture* inputTexture, Texture* inputTextureHalf);
104 void setupComposePass(
const CameraFrameOptions& options);
105 void setupAfterPass(
const CameraFrameOptions& options,
const ScenePassesInfo& scenePassesInfo);
107 std::vector<std::shared_ptr<RenderPass>> collectPasses()
const;
108 int appendActionsToPass(
const std::shared_ptr<RenderPassForward>& pass,
int fromIndex,
int toIndex,
109 const std::shared_ptr<RenderTarget>& target,
bool firstLayerClears =
true);
110 int findActionIndex(
int targetLayerId,
bool targetTransparent,
int fromIndex)
const;
111 static std::shared_ptr<RenderAction> cloneActionWithTarget(
const RenderAction* source,
114 CameraFrameOptions _options;
115 LayerComposition* _layerComposition =
nullptr;
116 Scene* _scene =
nullptr;
117 Renderer* _renderer =
nullptr;
118 CameraComponent* _cameraComponent =
nullptr;
119 std::shared_ptr<RenderTarget> _targetRenderTarget;
120 std::vector<RenderAction*> _sourceActions;
123 bool _bloomEnabled =
false;
124 bool _sceneHalfEnabled =
false;
125 float _renderTargetScale = 1.0f;
126 std::shared_ptr<RenderPassOptions> _sceneOptions;
127 bool _needsReset =
false;
129 std::shared_ptr<RenderTarget> _sceneRenderTarget;
130 std::shared_ptr<Texture> _sceneTexture;
131 std::shared_ptr<Texture> _sceneDepthTexture;
132 std::shared_ptr<RenderTarget> _sceneHalfRenderTarget;
133 std::shared_ptr<Texture> _sceneTextureHalf;
135 std::shared_ptr<RenderPassPrepass> _prePass;
136 std::shared_ptr<RenderPassForward> _scenePass;
137 std::shared_ptr<RenderPassColorGrab> _colorGrabPass;
138 std::shared_ptr<RenderPassForward> _scenePassTransparent;
139 std::shared_ptr<RenderPassSsao> _ssaoPass;
140 std::shared_ptr<RenderPassTAA> _taaPass;
141 std::shared_ptr<RenderPassDownsample> _scenePassHalf;
142 std::shared_ptr<RenderPassBloom> _bloomPass;
143 std::shared_ptr<RenderPassDof> _dofPass;
144 std::shared_ptr<RenderPassCompose> _composePass;
145 std::shared_ptr<RenderPassForward> _afterPass;
147 mutable Texture* _sceneTextureResolved =
nullptr;
148 std::vector<std::shared_ptr<RenderAction>> _ownedActions;
RenderPassCameraFrame(const std::shared_ptr< GraphicsDevice > &device, LayerComposition *layerComposition, Scene *scene, Renderer *renderer, const std::vector< RenderAction * > &sourceActions, CameraComponent *cameraComponent, const std::shared_ptr< RenderTarget > &targetRenderTarget)