44 layerField.
_name =
"RT Layer index";
45 layerField.
_data = &_rtLayerIndex;
52 editorComponent().registerField(
MOV(layerField));
55 typeField.
_name =
"Is Local";
66 editorComponent().registerField(
MOV(typeField));
69 bbField.
_name =
"Bounding Box";
73 editorComponent().registerField(
MOV(bbField));
76 updateRateField.
_name =
"Update Rate";
77 updateRateField.
_tooltip =
"[0...TARGET_FPS]. Every Nth frame. 0 = disabled;";
78 updateRateField.
_data = &_updateRate;
85 editorComponent().registerField(
MOV(updateRateField));
88 updateTypeField.
_name =
"Update Type";
92 updateTypeField.
_dataGetter = [
this](
void* dataOut) {
95 updateTypeField.
_dataSetter = [
this](
const void* data)
noexcept {
102 editorComponent().registerField(
MOV(updateTypeField));
105 showBoxField.
_name =
"Show parallax correction AABB";
106 showBoxField.
_data = &_showParallaxAABB;
111 editorComponent().registerField(
MOV(showBoxField));
114 updateProbeNowButton.
_name =
"Update Now";
117 editorComponent().registerField(
MOV(updateProbeNowButton));
119 editorComponent().onChangedCbk([
this](std::string_view field) {
120 if (field ==
"Update Now") {
142 if (parentSGN()->
parent() !=
nullptr)
161 if (!dirty() && updateType() == UpdateType::ON_DIRTY && _aabb.collision(sphere)) {
191 auto cmd = GFX::EnqueueCommand<GFX::BeginDebugScopeCommand>(bufferInOut);
192 Util::StringFormat( cmd->_scopeName,
"EnvironmentProbePass Id: [ {} ]", rtLayerIndex() ),
193 cmd->_scopeId = rtLayerIndex();
216 _context.gfx().generateCubeMap(params,
224 GFX::EnqueueCommand<GFX::EndDebugScopeCommand>(bufferInOut);
234 return Parent::enabled();
239 Parent::enabled(state);
240 const auto& sceneData = _context.gfx().sceneData();
241 if (sceneData !=
nullptr)
243 sceneData->probeState(
poolIndex(), state);
248 const auto& sceneData = _context.gfx().sceneData();
263 _aabb.createFromSphere(center, radius);
284 rtLayerIndex(newSlice);
300 return _aabb.getCenter().distanceSquared(pos);
static void unregisterProbe(Scene *scene, const EnvironmentProbeComponent *const probe)
static void registerProbe(Scene *scene, EnvironmentProbeComponent *probe)
vec3< F32 > getCenter() const noexcept
const vec3< F32 > & getMax() const noexcept
const vec3< F32 > & getMin() const noexcept
vec3< F32 > getHalfExtent() const noexcept
bool checkCollisionAndQueueUpdate(const BoundingSphere &sphere) noexcept
Checks if the given bounding sphere has collided with the probe's AABB and if so, mark it for update ...
void updateType(UpdateType type)
void OnData(const ECS::CustomEvent &data) override
~EnvironmentProbeComponent() override
void loadFromXML(const boost::property_tree::ptree &pt) override
void updateProbeData() const noexcept
bool refresh(GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
Returns true if the probe was updated, false if skipped.
void queueRefresh() noexcept
SceneGraphNode * findNodeToIgnore() const noexcept
void poolIndex(U16 index) noexcept
bool enabled() const override
EnvironmentProbeComponent(SceneGraphNode *sgn, PlatformContext &context)
F32 distanceSqTo(const vec3< F32 > &pos) const noexcept
void setBounds(const vec3< F32 > &min, const vec3< F32 > &max) noexcept
Utility class that adds basic GUID management to objects.
ProjectManager & parent() noexcept
virtual void loadFromXML(const boost::property_tree::ptree &pt)
virtual void OnData(const ECS::CustomEvent &data)
Scene & parentScene() noexcept
static RenderTargetHandle ReflectionTarget() noexcept
static bool ProbesDirty() noexcept
static U16 AllocateSlice(bool lock)
static void UnlockSlice(U16 slice) noexcept
static void ProcessEnvironmentMap(U16 layerID, bool highPriority)
SceneGraph * sceneGraph() noexcept
Return a reference to the parent graph. Operator= should be disabled.
T length() const noexcept
return the vector's length
void get(T *v) const noexcept
constexpr bool IS_DEBUG_BUILD
constexpr U16 TARGET_FRAME_RATE
Application desired framerate for physics and input simulations.
constexpr U8 MAX_REFLECTIVE_NODES_IN_VIEW
constexpr U8 MAX_REFLECTIVE_PROBES_PER_PASS
Maximum number of environment probes we are allowed to update per frame.
EnvironmentProbeComponent::UpdateType StringToEnvProveUpdateType(const char *name) noexcept
const char * EnvProveUpdateTypeToString(const EnvironmentProbeComponent::UpdateType type) noexcept
Str StringFormat(const char *fmt, Args &&...args)
Handle console commands that start with a forward slash.
static constexpr U32 RT_DEPTH_ATTACHMENT_IDX
constexpr U16 to_U16(const T value)
SGNComponent::Registrar< T, C > BaseComponentType
constexpr U8 to_U8(const T value)
RTClearEntry DEFAULT_CLEAR_ENTRY
@ DROPDOWN_TYPE
Only U8 types supported!
constexpr auto to_base(const Type value) -> Type
DELEGATE_STD< void, void * > _dataGetter
DELEGATE_STD< void, const void * > _dataSetter
vec2< F32 > _range
Used by slider_type as a min / max range or dropdown as selected_index / count.
DELEGATE_STD< const char *, U8 > _displayNameGetter
PushConstantType _basicType
PushConstantSize _basicTypeSize
EditorComponentFieldType _type
static const char * updateType[]
const SceneGraphNode * _sourceNode