42#include <imgui_internal.h>
44#include <IconsForkAwesome.h>
55 "Please wait while saving current scene! App may appear frozen or stuttery for up to 30 seconds ...",
56 "Saved scene succesfully",
57 "Failed to save the current scene"
63 string _saveMessage =
"";
64 U32 _saveElementCount = 0u;
65 U32 _saveProgress = 0u;
66 bool _closePopup =
false;
85 , _isMainMenu( mainMenu )
86 , _sceneOpenDialog( true, true )
87 , _sceneSaveDialog( true )
96 const bool modifierPressed = imguiContext.IO.KeyShift;
98 if ( ImGui::BeginMainMenuBar() )
110 ImGui::EndMainMenuBar();
128 if ( ImGui::BeginPopupModal(
"Confirm Close",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
130 ImGui::Text(
"Are you sure you want to close the editor? You have unsaved items!" );
133 if ( ImGui::Button(
"Cancel", ImVec2( 120, 0 ) ) )
135 ImGui::CloseCurrentPopup();
138 ImGui::SetItemDefaultFocus();
140 if ( ImGui::Button(
"Yes", ImVec2( 120, 0 ) ) )
143 ImGui::CloseCurrentPopup();
154 if ( ImGui::BeginPopupModal(
"Error!",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
157 if ( ImGui::Button(
"Ok" ) )
159 ImGui::CloseCurrentPopup();
169 if ( ImGui::BeginPopupModal(
"Create New Scene",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
171 static char buf[256];
172 ImGui::Text(
"This will automatically load the newly created scene!\nWARNING: All unsaved changes will be lost!" );
173 ImGui::Text(
"New Scene Name:" ); ImGui::SameLine();
174 if ( ImGui::InputText(
"##New Scene Name:", &buf[0], 254 ) )
179 if ( ImGui::Button(
"Cancel", ImVec2( 120, 0 ) ) )
181 ImGui::CloseCurrentPopup();
184 ImGui::SetItemDefaultFocus();
186 if ( ImGui::Button(
"Create", ImVec2( 120, 0 ) ) )
188 ImGui::CloseCurrentPopup();
191 newScene.
_name = buf;
193 if ( newScene.
_name.empty() )
195 _errorMsg.append(
"Scenes must be named!. \n" );
206 _errorMsg.append(
"Tried to use a reserved name for a new scene! Try a different name. \n" );
216 if ( ImGui::BeginPopupModal(
"Save Scene As ...",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
218 static char buf[256];
219 ImGui::Text(
"Target Name:" ); ImGui::SameLine();
220 if ( ImGui::InputText(
"##Target Name:", &buf[0], 254 ) )
225 if ( ImGui::Button(
"Cancel", ImVec2( 120, 0 ) ) )
227 ImGui::CloseCurrentPopup();
230 ImGui::SetItemDefaultFocus();
232 if ( ImGui::Button(
"Save", ImVec2( 120, 0 ) ) )
234 ImGui::CloseCurrentPopup();
238 newScene.
_name = buf;
240 if ( newScene.
_name.empty() )
242 _errorMsg.append(
"Scenes must be named!. \n" );
246 _errorMsg.append(
"Can't overwrite the default scene!. \n" );
259 if ( ImGui::BeginPopupModal(
"Confirm Quit",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
261 ImGui::Text(
"Are you sure you want to quit?" );
263 static bool clearCache =
false;
264 ImGui::Checkbox(
"Clear All Cache Items", &clearCache );
268 if ( ImGui::Button(
"Cancel", ImVec2( 120, 0 ) ) )
270 ImGui::CloseCurrentPopup();
273 ImGui::SetItemDefaultFocus();
275 if ( ImGui::Button(
"Yes", ImVec2( 120, 0 ) ) )
277 ImGui::CloseCurrentPopup();
287 if ( ImGui::BeginPopupModal(
"Confirm Restart",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
289 ImGui::Text(
"Are you sure you want to restart the application?" );
291 static bool clearCache =
false;
292 ImGui::Checkbox(
"Clear All Cache Items", &clearCache);
296 if ( ImGui::Button(
"Cancel", ImVec2( 120, 0 ) ) )
298 ImGui::CloseCurrentPopup();
301 ImGui::SetItemDefaultFocus();
303 if ( ImGui::Button(
"Yes", ImVec2( 120, 0 ) ) )
305 ImGui::CloseCurrentPopup();
315 if ( ImGui::BeginPopupModal(
"Saving Scene",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
317 constexpr U32 maxSize = 40u;
318 const U32 ident =
MAP( g_saveSceneParams._saveProgress, 0u, g_saveSceneParams._saveElementCount, 0u, maxSize - 5u );
320 ImGui::Text(
"Saving Scene!\n\n%s", g_saveSceneParams._saveMessage.c_str() );
324 for (
U32 i = 0u; i < maxSize; ++i )
326 progress.append( i < ident ?
"~" :
" " );
328 ImGui::Text(
"[%s]", progress.c_str() );
334 ImGui::CloseCurrentPopup();
340 static F32 sphereRadius = 1.f;
341 static U32 resolution = 16u;
343 static bool doubleSided =
true;
345 const auto createPrimitive = [&]()
347 Scene* activeScene =
_context.
kernel().projectManager()->activeProject()->getActiveScene();
357 if ( g_nodeDescriptor.
_name.empty() )
370 nodeDescriptor.ID( resolution );
374 materialHandle =
Get( handleTmp )->getMaterialTpl();
389 materialHandle =
Get( handleTmp )->getMaterialTpl();
398 quadMask.
b[0] = doubleSided ? 0 : 1;
399 nodeDescriptor.mask( quadMask );
400 const vec3<F32> halfSides = sides * 0.5f;
402 materialHandle =
Get( handleTmp )->getMaterialTpl();
406 node->setCorner( Quad3D::CornerLocation::TOP_LEFT,
vec3<F32>( -halfSides.
x, halfSides.
y, 0 ) );
407 node->setCorner( Quad3D::CornerLocation::TOP_RIGHT,
vec3<F32>( halfSides.
x, halfSides.
y, 0 ) );
408 node->setCorner( Quad3D::CornerLocation::BOTTOM_LEFT,
vec3<F32>( -halfSides.
x, -halfSides.
y, 0 ) );
409 node->setCorner( Quad3D::CornerLocation::BOTTOM_RIGHT,
vec3<F32>( halfSides.
x, -halfSides.
y, 0 ) );
419 mat->properties().baseColour(
FColour4( 0.4f, 0.4f, 0.4f, 1.0f ) );
420 mat->properties().roughness( 0.5f );
421 mat->properties().metallic( 0.5f );
424 activeScene->sceneGraph()->getRoot()->addChildNode( g_nodeDescriptor );
432 if ( modifierPressed )
439 if ( ImGui::BeginPopupModal(
"Create Primitive",
nullptr, ImGuiWindowFlags_AlwaysAutoResize ) )
445 ImGui::Text(
"Name:" ); ImGui::SameLine();
446 if ( ImGui::InputText(
"##Name:", &buf[0], 61 ) )
448 g_nodeDescriptor.
_name = buf;
454 ImGui::InputFloat(
"Radius", &sphereRadius );
455 ImGui::InputScalar(
"Resolution", ImGuiDataType_U32, &resolution );
458 Util::DrawVec<F32, 3, false>( ImGuiDataType_Float,
"Side length",
Util::FieldLabels, sides._v,
false,
false, 0.1f, 0.001f, 10000.f );
461 Util::DrawVec<F32, 2, false>( ImGuiDataType_Float,
"Side length",
Util::FieldLabels, sides._v,
false,
false, 0.1f, 0.001f, 10000.f );
462 ImGui::Checkbox(
"Double Sided", &doubleSided );
466 if ( ImGui::Button(
"Cancel", ImVec2( 120, 0 ) ) )
468 ImGui::CloseCurrentPopup();
471 ImGui::SetItemDefaultFocus();
473 if ( g_nodeDescriptor.
_name.empty() )
477 if ( ImGui::Button(
"Create", ImVec2( 120, 0 ) ) )
480 ImGui::CloseCurrentPopup();
483 if ( g_nodeDescriptor.
_name.empty() )
488 std::memset( buf, 0, 64 *
sizeof(
char ) );
506 g_saveSceneParams._targetScene = targetScene;
508 g_saveSceneParams._saveProgress = 0u;
511 const auto messageCbk = [](
const std::string_view msg )
513 g_saveSceneParams._saveMessage = msg;
514 ++g_saveSceneParams._saveProgress;
517 const auto closeDialog = [
this](
const bool success )
526 _errorMsg.append(
"Error occurred while saving the current scene!\n Try again or check the logs for errors!\n" );
532 if ( ImGui::BeginMenu(
"File" ) )
539 if ( ImGui::BeginMenu(
"Open Project", !projectList.empty() ) )
542 for (
size_t i = 0u; i < projectList.size(); ++i )
544 if ( ImGui::MenuItem( projectList[i]._name.c_str() ) )
549 _errorMsg.append(
Util::StringFormat(
"Error occurred while trying to open project [ {} ]\n Try again or check the logs for errors!\n", projectList[i]._name.c_str()) );
551 for (
const auto& backup : projectList)
572 if ( ImGui::MenuItem(
"New Scene",
"Ctrl+N",
false,
true ) )
574 if ( hasUnsavedElements && !isDefaultScene )
582 if ( ImGui::BeginMenu(
"Open Scene", !sceneList.empty()) )
584 for (
size_t i = 0u; i < sceneList.size(); ++i )
586 if ( ImGui::MenuItem( sceneList[i]._name.c_str() ) )
596 if ( ImGui::BeginMenu(
"Open Recent", !recentSceneList.empty() ) )
598 for (
size_t i = 0u; i < recentSceneList.size(); ++i )
600 if ( ImGui::MenuItem( recentSceneList.get( i )._name.c_str() ) )
609 if ( ImGui::MenuItem( modifierPressed ? (ICON_FK_FLOPPY_O
" Save Scene (Forced)") : (ICON_FK_FLOPPY_O
" Save Scene"),
"",
false, hasUnsavedElements || isDefaultScene || modifierPressed ) )
611 if ( isDefaultScene && !modifierPressed )
620 if ( modifierPressed )
625 if ( ImGui::MenuItem( ICON_FK_FLOPPY_O
" Save Scene As",
"",
false, !isDefaultScene ) )
631 if ( ImGui::BeginMenu(
"Options" ) )
636 if ( ImGui::BeginMenu(
"MSAA" ) )
640 const U8 sampleCount = i == 0u ? 0u : 1 << i;
641 if ( sampleCount % 2 == 0 )
665 const U8 sampleCount = i == 0u ? 0u : 1 << i;
666 if ( sampleCount % 2 == 0 )
668 bool msaaEntryEnabled = currentCount == sampleCount;
683 ImGui::MenuItem(
"Editor options",
"", &options );
686 if ( ImGui::BeginMenu(
"Export Game" ) )
691 if ( ImGui::MenuItem( platform,
"",
false,
true ) )
693 if ( hasUnsavedElements )
706 if ( ImGui::MenuItem(
"Close Editor" ) )
708 if ( hasUnsavedElements )
718 if ( ImGui::MenuItem(
"Restart" ) )
723 if ( ImGui::MenuItem(
"Quit",
"Alt+F4" ) )
734 if ( ImGui::BeginMenu(
"Edit" ) )
754 if ( ImGui::MenuItem(
"Cut",
"CTRL+X",
false,
false ) )
758 if ( ImGui::MenuItem(
"Copy",
"CTRL+C",
false,
false ) )
762 if ( ImGui::MenuItem(
"Paste",
"CTRL+V",
false,
false ) )
773 if ( ImGui::BeginMenu(
"Project" ) )
775 if ( ImGui::MenuItem(
"Configuration",
"",
false,
false ) )
784 if ( ImGui::BeginMenu(
"Object" ) )
786 if ( ImGui::BeginMenu(
"New Primitive" ) )
788 if ( ImGui::MenuItem(
"Sphere" ) )
790 g_nodeDescriptor = {};
793 if ( modifierPressed )
797 if ( ImGui::MenuItem(
"Box" ) )
799 g_nodeDescriptor = {};
802 if ( modifierPressed )
806 if ( ImGui::MenuItem(
"Plane" ) )
808 g_nodeDescriptor = {};
811 if ( modifierPressed )
817 if ( ImGui::BeginMenu(
"Debug Objects" ) )
819 if ( ImGui::MenuItem(
"Sponza" ) )
821 g_nodeDescriptor = {};
824 if ( modifierPressed )
837 if ( ImGui::BeginMenu(
"Tools" ) )
840 if ( ImGui::MenuItem(
"Memory Editor",
nullptr, memEditorEnabled ) )
849 if ( ImGui::BeginMenu(
"Render Targets" ) )
854 if ( ImGui::BeginMenu( rt->name().c_str() ) )
856 for (
U8 j = 0u; j < 2u; ++j )
859 const U8 count = rt->getAttachmentCount( type );
861 for (
U8 k = 0; k < count; ++k )
864 if ( attachment ==
nullptr )
869 if ( tex == INVALID_HANDLE<Texture> )
874 if ( ImGui::MenuItem(
Get(tex)->resourceName().c_str() ) )
891 if ( ImGui::BeginMenu(
"Window" ) )
894 if ( ImGui::MenuItem(
"Sample Window",
nullptr, &sampleWindowEnabled ) )
904 if ( ImGui::BeginMenu(
"PostFX" ) )
930 if ( ImGui::BeginMenu(
"Debug" ) )
932 if ( ImGui::BeginMenu(
"BRDF Settings" ) )
939 debug = debugFlag == flag;
951 if ( ImGui::BeginMenu(
"Render Filters" ) )
954 bool configDirty =
false;
955 if ( ImGui::MenuItem(
"MESHES",
"", &renderFilters.
meshes ) )
959 if ( ImGui::MenuItem(
"PARTICLES",
"", &renderFilters.
particles ) )
963 if ( ImGui::MenuItem(
"PRIMITIVES",
"", &renderFilters.
primitives ) )
967 if ( ImGui::MenuItem(
"SKY",
"", &renderFilters.
sky ) )
971 if ( ImGui::MenuItem(
"TERRAIN",
"", &renderFilters.
terrain ) )
975 if ( ImGui::MenuItem(
"VEGETATION",
"", &renderFilters.
vegetation ) )
979 if ( ImGui::MenuItem(
"WATER",
"", &renderFilters.
water ) )
983 if ( ImGui::MenuItem(
"DECALS",
"", &renderFilters.
decals ) )
994 if ( ImGui::BeginMenu(
"Toggle Light Types" ) )
1009 if ( ImGui::BeginMenu(
"Select Env Probe" ) )
1011 constexpr U8 MaxProbesPerPage = 32;
1014 const auto PrintProbeEntry = [&envProbPool, debuggingSkyLight](
const EnvironmentProbeList& probes,
const size_t j )
1017 bool selected = !debuggingSkyLight &&
1018 envProbPool->debugProbe() == crtProbe;
1019 if ( ImGui::MenuItem( crtProbe->parentSGN()->name().c_str(),
"", &selected ) )
1021 envProbPool->debugProbe( selected ? crtProbe :
nullptr );
1026 if ( ImGui::MenuItem(
"Sky Light",
"", &debuggingSkyLight ) )
1028 envProbPool->debugProbe(
nullptr );
1034 const size_t probeCount = probes.size();
1035 if ( probeCount > MaxProbesPerPage )
1037 const size_t pageCount = probeCount > MaxProbesPerPage ? probeCount / MaxProbesPerPage : 1;
1038 const size_t remainder = probeCount > MaxProbesPerPage ? probeCount - pageCount * MaxProbesPerPage : 0;
1039 for (
U8 p = 0; p < pageCount + 1; ++p )
1041 const size_t start = p * MaxProbesPerPage;
1042 const size_t end = start + (p < pageCount ? MaxProbesPerPage : remainder);
1045 for (
size_t j = start; j < end; ++j )
1047 PrintProbeEntry( probes, j );
1055 for (
size_t j = 0; j < probeCount; ++j )
1057 PrintProbeEntry( probes, j );
1064 if ( ImGui::BeginMenu(
"Select Debug light" ) )
1066 constexpr U8 MaxLightsPerPage = 32;
1069 Light* crtLight = lights[j];
1070 bool selected = pool.
debugLight() == crtLight;
1071 if ( ImGui::MenuItem( crtLight->sgn()->name().c_str(),
"", &selected ) )
1081 if ( !lights.empty() )
1083 const size_t lightCount = lights.size();
1087 if ( lightCount > MaxLightsPerPage )
1089 const size_t pageCount = lightCount > MaxLightsPerPage ? lightCount / MaxLightsPerPage : 1;
1090 const size_t remainder = lightCount > MaxLightsPerPage ? lightCount - pageCount * MaxLightsPerPage : 0;
1091 for (
U8 p = 0; p < pageCount + 1; ++p )
1093 const size_t start = p * MaxLightsPerPage;
1094 const size_t end = start + (p < pageCount ? MaxLightsPerPage : remainder);
1097 for (
size_t j = start; j < end; ++j )
1099 PrintLightEntry( lights, j );
1107 for (
size_t j = 0; j < lightCount; ++j )
1109 PrintLightEntry( lights, j );
1121 if ( ImGui::BeginMenu(
"Shadow enabled" ) )
1127 for (
Light* crtLight : lights )
1129 if ( crtLight->castsShadows() )
1131 bool selected = pool.
debugLight() == crtLight;
1132 if ( ImGui::MenuItem( crtLight->sgn()->name().c_str(),
"", &selected ) )
1145 bool lightImpostors = pool.lightImpostorsEnabled();
1146 if ( ImGui::MenuItem(
"Draw Light Impostors",
"", &lightImpostors ) )
1148 pool.lightImpostorsEnabled( lightImpostors );
1151 const ECSManager& ecsManager =
_context.
kernel().projectManager()->activeProject()->getActiveScene()->sceneGraph()->GetECSManager();
1152 bool playAnimations = ecsManager.ecsEngine().GetSystemManager()->GetSystem<
AnimationSystem>()->getAnimationState();
1154 if ( ImGui::MenuItem(
"Play animations",
"", &playAnimations ) )
1156 ecsManager.ecsEngine().GetSystemManager()->GetSystem<
AnimationSystem>()->toggleAnimationState( playAnimations );
1159 if ( ImGui::BeginMenu(
"Debug Gizmos" ) )
1162 SceneRenderState& renderState = projectManager->activeProject()->getActiveScene()->state()->renderState();
1165 if ( ImGui::MenuItem(
"Show AABBs",
"", &temp ) )
1171 if ( ImGui::MenuItem(
"Show OBBs",
"", &temp ) )
1177 if ( ImGui::MenuItem(
"Show bounding spheres",
"", &temp ) )
1183 if ( ImGui::MenuItem(
"Show skeletons",
"", &temp ) )
1189 if ( ImGui::MenuItem(
"Show scene axis",
"", &temp ) )
1195 if ( ImGui::MenuItem(
"Show selection axis",
"", &temp ) )
1200 if ( ImGui::MenuItem(
"Show all axis",
"", &temp ) )
1205 if ( ImGui::MenuItem(
"Render geometry",
"", &temp ) )
1210 if ( ImGui::MenuItem(
"Render wireframe",
"", &temp ) )
1215 if ( ImGui::MenuItem(
"Render custom gismos",
"", &temp ) )
1222 if ( ImGui::BeginMenu(
"Edge Detection Method" ) )
1227 if ( ImGui::MenuItem(
"None",
"", &noneSelected ) )
1236 bool selected = batch.edgeDetectionMethod() == method;
1237 if ( ImGui::MenuItem( EdgeMethodName( method ),
"", &selected ) )
1239 batch.edgeDetectionMethod( method );
1246 if ( ImGui::BeginMenu(
"Debug Views" ) )
1251 eastl::set<I16> groups = {};
1252 for (
auto [name, groupID, index, enabled] : viewNames )
1254 if ( groupID != -1 )
1256 groups.insert( groupID );
1259 const string label = groupID == -1 ? name :
Util::StringFormat(
"({}) {}", groupID, name.c_str() );
1260 if ( ImGui::MenuItem( label.c_str(),
"", &enabled ) )
1265 if ( !groups.empty() )
1268 for (
const I16 group : groups )
1271 if ( ImGui::MenuItem(
Util::StringFormat(
"Enable Group [ {} ]", group ).c_str(),
"", &groupEnabled ) )
1281 if ( ImGui::MenuItem(
"Show CEGUI Debug Cursor",
"", &state ) )
1292 if ( ImGui::BeginMenu(
"Help" ) )
1295 if ( ImGui::MenuItem(
"Sample Window",
nullptr, &sampleWindowEnabled ) )
1301 ImGui::Text(
"Copyright(c) 2018 DIVIDE - Studio" );
1302 ImGui::Text(
"Copyright(c) 2009 Ionut Cava" );
1312 model.assetLocation( Paths::g_modelsLocation );
1313 model.assetName(
"sponza.obj" );
1318 if ( spawnMesh == INVALID_HANDLE<Mesh> )
#define PROFILE_SCOPE_AUTO(CATEGORY)
void RequestRestart(bool clearCache) noexcept
void RequestShutdown(bool clearCache) noexcept
size_t UndoStackSize() const noexcept
static std::array< const char *, 3 > g_supportedExportPlatforms
size_t RedoStackSize() const noexcept
Rough around the edges Adapter pattern abstracting the actual rendering API and access to the GPU.
void setShadowMSAASampleCount(ShadowType type, U8 sampleCount)
void setScreenMSAASampleCount(U8 sampleCount)
GFXRTPool & renderTargetPool() noexcept
Renderer & getRenderer() const
void getDebugViewNames(vector< std::tuple< string, I16, I16, bool > > &namesOut)
void toggleDebugGroup(I16 groupID, bool state)
bool getDebugGroupState(I16 groupID) const
void toggleDebugView(I16 index, bool state)
const vector< RenderTarget_uptr > & getRenderTargets() const noexcept
void showDebugCursor(bool state)
Toggle debug cursor rendering on or off.
A light object placed in the scene at a certain position.
void debugLight(Light *light)
nullptr = disabled
LightList & getLights(const LightType type)
void toggleLightType(const LightType type) noexcept
disable or enable a specific light type
eastl::fixed_vector< Light *, 32u, true > LightList
bool lightTypeEnabled(const LightType type) const noexcept
PlatformContext & context() noexcept
PlatformContext & _context
Application & app() noexcept
Kernel & kernel() noexcept
Editor & editor() noexcept
GFXDevice & gfx() noexcept
Configuration & config() noexcept
void popFilter(const FilterType filter, const bool overrideScene=false)
bool getFilterState(const FilterType filter) const noexcept
PreRenderBatch & getFilterBatch() noexcept
void pushFilter(const FilterType filter, const bool overrideScene=false)
static const char * FilterName(FilterType filter) noexcept
Handle< Texture > texture() const
void unlockProbeList() const noexcept
const EnvironmentProbeList & getLocked() const noexcept
static bool DebuggingSkyLight() noexcept
void lockProbeList() const noexcept
@ RENDER_WIREFRAME
Render wireframe for all scene geometry.
@ RENDER_OBB
Show/hide oriented bounding boxes.
@ RENDER_SKELETONS
Render skeletons for animated geometry.
@ RENDER_CUSTOM_PRIMITIVES
Show/hide custom IMPrimitive elements.
@ RENDER_AABB
Show/hide axis aligned bounding boxes.
@ RENDER_BSPHERES
Show/hide bounding spheres.
@ RENDER_GEOMETRY
Show/hide geometry.
bool isEnabledOption(RenderOptions option) const noexcept
void toggleOption(RenderOptions option) noexcept
constexpr char DEFAULT_PROJECT_NAME[]
constexpr char DEFAULT_SCENE_NAME[]
const char * sceneNodeType[to_base(SceneNodeType::COUNT)+1u]
static const char * shadowType[]
constexpr Optick::Category::Type GUI
const char * LightTypeToString(LightType lightType) noexcept
const char * MaterialDebugFlagToString(const MaterialDebugFlag unitType) noexcept
Str StringFormat(const char *fmt, Args &&...args)
bool CompareIgnoreCase(const char *a, const char *b) noexcept
void OpenCenteredPopup(const char *name, ImGui::ImGuiPopupFlags popup_flags=0)
U32 FLOAT_TO_UINT(F32 src)
constexpr const char * FieldLabels[]
Handle console commands that start with a forward slash.
constexpr U32 to_U32(const T value)
vector< SceneEntry > SceneEntries
void PushReadOnly(const bool fade)
RTAttachmentType
This enum is used when creating render targets to define the channel that the texture will attach to.
eastl::vector< Type > vector
FORCE_INLINE Handle< T > CreateResource(const ResourceDescriptor< T > &descriptor, bool &wasInCache, std::atomic_uint &taskCounter)
::value constexpr T MAP(T input, T in_min, T in_max, T out_min, T out_max, D64 &slopeOut) noexcept
LightType
The different types of lights supported.
constexpr U8 to_U8(const T value)
SceneNodeHandle FromHandle(const Handle< T > handle)
vector< EnvironmentProbeComponent * > EnvironmentProbeList
FORCE_INLINE T * Get(const Handle< T > handle)
constexpr auto to_base(const Type value) -> Type
struct Divide::Configuration::Debug::RenderFilter renderFilter
Divide::Configuration::Rendering::ShadowMapping::CSMSettings csm
struct Divide::Configuration::Rendering::ShadowMapping shadowMapping
struct Divide::Configuration::Rendering rendering
struct Divide::Configuration::Debug debug
static NO_INLINE void d_printfn(const char *format, T &&... args)
static U8 MaxMSAASamples() noexcept
SceneNodeHandle _nodeHandle
NodeUsageContext _usageContext