32#ifndef DVD_HARDWARE_VIDEO_GFX_DEVICE_INL_
33#define DVD_HARDWARE_VIDEO_GFX_DEVICE_INL_
39template <
typename Descriptor,
size_t N>
42 for (
auto& primitive : _debugPrimitives )
48template <
typename Descriptor,
size_t N>
54template <
typename Descriptor,
size_t N>
57 return _debugPrimitives.size();
60template <
typename Descriptor,
size_t N>
70 for (
auto& data : _debugData)
76template <
typename Descriptor,
size_t N>
80 addLocked( ID, data );
83template <
typename Descriptor,
size_t N>
86 const size_t count = _debugData.size();
88 for (
U32 i = 0u; i < count; ++i )
91 if (
entry._id == ID )
93 entry._descriptor = data;
94 entry._frameLifeTime = g_maxFrameLifetime;
99 for (
U32 i = 0u; i < count; ++i )
102 if (
entry._frameLifeTime == 0u )
105 entry._descriptor = data;
106 entry._frameLifeTime = g_maxFrameLifetime;
112 _debugPrimitives.emplace_back(
nullptr );
113 _debugData.emplace_back();
114 addLocked( ID, data );
145 return depthOnly ? _previewRenderTargetDepth : _previewRenderTargetColour;
155 frameDrawCalls(frameDrawCalls() + count);
165 s_deviceInformation = info;
206 return _descriptorSets[
to_base(usage)];
211 return _descriptorSets[
to_base(usage)];
216 return _api->newSB( descriptor );
221 return _api->newGVD( ringBufferLength, name );
231 return _perFrameBuffers[_perFrameBufferIndex];
236 for (
U8 i = 0u; i < PER_FRAME_BUFFER_COUNT; ++i )
240 _perFrameBuffers[i]._camDataBuffer.reset();
245 _perFrameBuffers[i]._cullCounter.reset();
248 crtBuffers()._camWritesThisFrame = 0u;
249 crtBuffers()._renderWritesThisFrame = 0u;
254 _perFrameBufferIndex = (_perFrameBufferIndex + 1u) % PER_FRAME_BUFFER_COUNT;
255 crtBuffers()._camWritesThisFrame = 0u;
256 crtBuffers()._renderWritesThisFrame = 0u;
bool setViewport(const Rect< I32 > &viewport)
Returns true if the viewport was changed.
ShaderBuffer_uptr newSB(const ShaderBufferDescriptor &descriptor)
RenderStateBlock _defaultStateNoDepthTest
The default render state but with depth testing disabled.
static DeviceInformation s_deviceInformation
static bool IsSubmitCommand(GFX::CommandType type) noexcept
static const DeviceInformation & GetDeviceInformation() noexcept
F32 renderingAspectRatio() const noexcept
RenderAPIWrapper_uptr _api
vec2< U16 > renderingResolution() const noexcept
RenderStateBlock _state2DRendering
Special render state for 2D rendering.
GFXRTPool & renderTargetPool() noexcept
Renderer & getRenderer() const
Handle< ShaderProgram > getRTPreviewShader(bool depthOnly) const noexcept
void registerDrawCalls(U32 count) noexcept
const RenderStateBlock & getNoDepthTestBlock() const noexcept
returns the standard state block
void registerDrawCall() noexcept
static void OverrideDeviceInformation(const DeviceInformation &info) noexcept
GenericVertexData_ptr newGVD(U32 ringBufferLength, std::string_view name)
const RenderStateBlock & get2DStateBlock() const noexcept
GFXDescriptorSet & descriptorSet(DescriptorSetUsage usage) noexcept
PerformanceMetrics _performanceMetrics
std::unique_ptr< GFXRTPool > _rtPool
PerformanceMetrics & getPerformanceMetrics() noexcept
bool setScissor(const Rect< I32 > &scissor)
vec2< U16 > _renderingResolution
IMPrimitive replaces immediate mode calls to VB based rendering.
Handle console commands that start with a forward slash.
std::lock_guard< mutex > LockGuard
constexpr F32 to_F32(const T value)
void DestroyIMP(IMPrimitive *&primitive)
Project const SceneEntry & entry
constexpr auto to_base(const Type value) -> Type
DebugPrimitiveHandler() noexcept
void addLocked(const I64 ID, const Descriptor &data) noexcept
void add(const I64 ID, const Descriptor &data) noexcept
size_t size() const noexcept
void reset(const bool camBuffer, const bool cullBuffer) noexcept
size_t _perFrameBufferIndex
PerFrameBuffers & crtBuffers() noexcept
struct Divide::GFXDevice::GFXBuffers::PerFrameBuffers _perFrameBuffers[PER_FRAME_BUFFER_COUNT]
void onEndFrame() noexcept