Allow camera render target to be null

This commit is contained in:
2023-05-10 07:43:02 -07:00
parent 9f5c39b8d0
commit cdc3e89f8a
6 changed files with 23 additions and 12 deletions

View File

@ -10,7 +10,7 @@ using namespace Dawn;
Camera::Camera(SceneItem *item) :
SceneItemComponent(item),
renderTarget(nullptr),
renderTarget(item->scene->game->renderManager.getBackBuffer()),
fov(0.785398f),// 45 degrees,
type(CAMERA_TYPE_PERSPECTIVE),
orthoLeft(0.0f),
@ -52,10 +52,6 @@ glm::mat4 Camera::getProjection() {
}
RenderTarget * Camera::getRenderTarget() {
auto v = this->renderTarget;
if(this->renderTarget == nullptr) {
return this->getGame()->renderManager.getBackBuffer();
}
return (RenderTarget*)this->renderTarget;
}
@ -80,6 +76,11 @@ void Camera::onStart() {
useEffectWithTeardown([&]{
auto rt = this->getRenderTarget();
this->projectionNeedsUpdating = true;
if(rt == nullptr) {
return evtResized = [&]{
};
}
this->eventRenderTargetResized.invoke(rt->getWidth(), rt->getHeight());
// Subscribe to new render target resized.
@ -100,6 +101,7 @@ void Camera::onStart() {
// Sub to evt legacy, we don't invoke the useTeardown to avoid invoking
// the state event for this camera when we don't need to.
if(!this->getRenderTarget()) return;
evtResized = useEventLegacy([&](RenderTarget *rt, float_t w, float_t h){
this->projectionNeedsUpdating = true;
this->eventRenderTargetResized.invoke(w, h);