AEResult GameLightsUpdate::ShadowDirLightRenderGameObject() { LightManager* lightManager = m_GameApp->GetLightManager(); GameObjectManager* gameObjectManager = m_GameApp->GetGameObjectManager(); if (lightManager->GetNumDirLightsWithShadows() == 0) { return AEResult::Ok; } Texture2DArray* shadowTextureArray = lightManager->GetDirLightShadowTextureArray(); AETODO("Check return"); RenderTarget* rtsDS[1] = { nullptr }; m_GraphicDevice->SetRenderTargetsAndDepthStencil(1, rtsDS, m_DirLightShadowTexturesDS); for (auto lightIt : *lightManager) { Light* light = lightIt.second; if (light->GetLightType() == LightType::Directional && light->IsShadowEnabled()) { DirectionalLight* dirLight = reinterpret_cast<DirectionalLight*>(light); uint32_t idxs[1] = { light->GetShadowTextureIndex() }; AETODO("Check return"); m_GraphicDevice->SetRenderTargets(1, idxs, shadowTextureArray); m_GraphicDevice->Clear(true, 0, true, true, AEColors::Transparent); for (uint32_t i = 0; i < AE_LIGHT_NUM_CASCADE_MAPS; i++) { AETODO("Check return"); m_GraphicDevice->SetViewport(m_DirLightShadowViewports[i]); const LightCascadeInfo& lightCascadeInfo = dirLight->GetLightCascadeInfo(); for (auto goIt : *gameObjectManager) { AETODO("Check return"); ShadowLightRenderGameObject(goIt.second, lightCascadeInfo.m_CascadeViewMatrix[i], lightCascadeInfo.m_CascadeProjectionMatrix[i]); } } } } AETODO("Check return"); m_GraphicDevice->ResetViewport(); AETODO("Check return"); m_GraphicDevice->ResetRenderTargetAndSetDepthStencil(); return AEResult::Ok; }
AEResult GameLightsUpdate::ShadowSpotLightRenderGameObject() { LightManager* lightManager = m_GameApp->GetLightManager(); GameObjectManager* gameObjectManager = m_GameApp->GetGameObjectManager(); if (lightManager->GetNumSpotLightsWithShadows() == 0) { return AEResult::Ok; } Texture2DArray* shadowTextureArray = lightManager->GetSpotLightShadowTextureArray(); AETODO("Check return"); RenderTarget* rtsDS[1] = { nullptr }; m_GraphicDevice->SetRenderTargetsAndDepthStencil(1, rtsDS, m_SpotLightShadowTexturesDS); AETODO("Check return"); m_GraphicDevice->SetViewport(m_SpotLightShadowViewport); for (auto lightIt : *lightManager) { Light* light = lightIt.second; if (light->GetLightType() == LightType::Spot && light->IsShadowEnabled()) { uint32_t idxs[1] = { light->GetShadowTextureIndex() }; AETODO("Check return"); m_GraphicDevice->SetRenderTargets(1, idxs, shadowTextureArray); m_GraphicDevice->Clear(true, 0, true, true, AEColors::Transparent); for (auto goIt : *gameObjectManager) { AETODO("Check return"); ShadowLightRenderGameObject(goIt.second, light->GetViewMatrix(), light->GetProjectionMatrix()); } } } AETODO("Check return"); m_GraphicDevice->ResetViewport(); AETODO("Check return"); m_GraphicDevice->ResetRenderTargetAndSetDepthStencil(); return AEResult::Ok; }
void GameObjectLightComponentWidget::InitFields() { Light* light = nullptr; //////////////////////////////////////// // Set Ready to false, so Light cannot change // properties while been initialized m_IsReady = false; //////////////////////////////////////// // Check Engine Viewer AEAssert(m_EngineViewer != nullptr); if (m_EngineViewer == nullptr) { return; } //////////////////////////////////////// // Verify LOC and Get Light Object light = GetLight(); if(light == nullptr) { AETODO("Add log"); return; } //////////////////////////////////////// // Set Light Type SetLightTypeComboBoxIndex(light->GetLightType()); //////////////////////////////////////// // Set Enabled m_GameObjectLightComponentWidgetQtUI.m_Enabled->setChecked(light->IsEnabled()); //////////////////////////////////////// // Set Intensity m_GameObjectLightComponentWidgetQtUI.m_IntensitySB->setValue(static_cast<double>(light->GetIntensity())); //////////////////////////////////////// // Set Color QColor qColor = AEQTHelpers::GetQColorFromColor(light->GetColor()); SetColorToColorWidget(qColor); //////////////////////////////////////// // Set Near and Far Attenuation m_GameObjectLightComponentWidgetQtUI.m_NearAttSB->setValue(static_cast<double>(light->GetNearAttenuation())); m_GameObjectLightComponentWidgetQtUI.m_FarAttSB->setValue(static_cast<double>(light->GetFarAttenuation())); //////////////////////////////////////// // Set Shadow Enabled m_GameObjectLightComponentWidgetQtUI.m_ShadowEnabled->setChecked(light->IsShadowEnabled()); m_GameObjectLightComponentWidgetQtUI.m_DrawFrustum->setEnabled(light->IsShadowEnabled()); //////////////////////////////////////// // Enable/Visibility of Angle options if(light->GetLightType() == LightType::Spot) { m_GameObjectLightComponentWidgetQtUI.m_LabelAngle->setVisible(true); m_GameObjectLightComponentWidgetQtUI.m_LabelFalloffAngle->setVisible(true); m_GameObjectLightComponentWidgetQtUI.m_AngleSB->setVisible(true); m_GameObjectLightComponentWidgetQtUI.m_FalloffAngleSB->setVisible(true); //////////////////////////////////////// // Get Spot Light SpotLight* spotLight = reinterpret_cast<SpotLight*>(light); //////////////////////////////////////// // Set Angle and Fall out Angle m_GameObjectLightComponentWidgetQtUI.m_AngleSB->setValue(static_cast<double>(spotLight->GetAngle())); m_GameObjectLightComponentWidgetQtUI.m_FalloffAngleSB->setValue(static_cast<double>(spotLight->GetFallOffAngle())); } else { m_GameObjectLightComponentWidgetQtUI.m_LabelAngle->setVisible(false); m_GameObjectLightComponentWidgetQtUI.m_LabelFalloffAngle->setVisible(false); m_GameObjectLightComponentWidgetQtUI.m_AngleSB->setVisible(false); m_GameObjectLightComponentWidgetQtUI.m_FalloffAngleSB->setVisible(false); } //////////////////////////////////////// // Enable/Visibility of Draw Frustum Cascades if (light->GetLightType() == LightType::Directional) { m_GameObjectLightComponentWidgetQtUI.m_DrawCascadeFrustums->setVisible(true); } else { m_GameObjectLightComponentWidgetQtUI.m_DrawCascadeFrustums->setVisible(false); } //////////////////////////////////////// // Light is Ready to change properties m_IsReady = true; }