mirror of
https://github.com/barkeser2002/flower.git
synced 2026-09-25 19:36:20 +03:00
100 lines
2.0 KiB
C++
100 lines
2.0 KiB
C++
#pragma once
|
|
#include "Pch.h"
|
|
#include "Widget.h"
|
|
#include "ViewportCamera.h"
|
|
|
|
struct ProfilerViewer
|
|
{
|
|
bool bShowProfilerWindow = true;
|
|
bool bShowMilliseconds = true;
|
|
|
|
static const size_t NUM_FRAMES = 128;
|
|
float FRAME_TIME_ARRAY[NUM_FRAMES] = { 0 };
|
|
|
|
float RECENT_HIGHEST_FRAME_TIME = 0.0f;
|
|
|
|
const static size_t countNum = 14;
|
|
const int FRAME_TIME_GRAPH_MAX_FPS[countNum] = { 800, 240, 120, 90, 60, 45, 30, 15, 10, 5, 4, 3, 2, 1 };
|
|
float FRAME_TIME_GRAPH_MAX_VALUES[countNum] = { 0 };
|
|
|
|
ProfilerViewer()
|
|
{
|
|
for (int i = 0; i < countNum; ++i)
|
|
{
|
|
FRAME_TIME_GRAPH_MAX_VALUES[i] = 1000000.f / FRAME_TIME_GRAPH_MAX_FPS[i];
|
|
}
|
|
}
|
|
};
|
|
|
|
class WidgetViewport : public Widget
|
|
{
|
|
public:
|
|
WidgetViewport();
|
|
virtual ~WidgetViewport() noexcept;
|
|
|
|
float getRenderWidth() const
|
|
{
|
|
return m_cacheWidth;
|
|
}
|
|
|
|
float getRenderHeight() const
|
|
{
|
|
return m_cacheHeight;
|
|
}
|
|
|
|
bool isMouseInViewport() const
|
|
{
|
|
return m_bMouseInViewport;
|
|
}
|
|
|
|
ViewportCamera* getCamera() const
|
|
{
|
|
return m_camera.get();
|
|
}
|
|
|
|
protected:
|
|
// event init.
|
|
virtual void onInit() override;
|
|
|
|
// event always tick.
|
|
virtual void onTick(const Flower::RuntimeModuleTickData& tickData) override;
|
|
|
|
virtual void beforeTick() override;
|
|
virtual void afterTick() override;
|
|
|
|
// event release.
|
|
virtual void onRelease() override;
|
|
|
|
// event when widget visible tick.
|
|
virtual void onVisibleTick(const Flower::RuntimeModuleTickData&) override;
|
|
|
|
private:
|
|
std::unique_ptr<Flower::DeferredRenderer> m_viewportRenderer;
|
|
Flower::DelegateHandle m_rendererDelegate;
|
|
|
|
Flower::Renderer* m_renderer = nullptr;
|
|
std::unique_ptr<ViewportCamera> m_camera;
|
|
float m_cacheWidth = 0.0f;
|
|
float m_cacheHeight = 0.0f;
|
|
|
|
bool m_bMouseInViewport = false;
|
|
|
|
VkSampler m_viewportImageSampler;
|
|
VkDescriptorSet m_descriptorSet = VK_NULL_HANDLE;
|
|
|
|
struct LazyDestroyDescriptorSet
|
|
{
|
|
uint64_t tickTime;
|
|
VkDescriptorSet set;
|
|
};
|
|
std::vector<LazyDestroyDescriptorSet> m_lazyDestroy;
|
|
|
|
void tryReleaseDescriptorSet(uint64_t tickTime);
|
|
|
|
|
|
ProfilerViewer m_profileViewer;
|
|
|
|
|
|
|
|
|
|
}; |