Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
SceneShaderData.cpp
Go to the documentation of this file.
1
2
5
6namespace Divide
7{
9 : _context( context )
10 {
11 ShaderBufferDescriptor bufferDescriptor = {};
12 bufferDescriptor._ringBufferLength = Config::MAX_FRAMES_IN_FLIGHT + 1u;
16 {
17 bufferDescriptor._bufferParams._elementCount = 1u;
18 bufferDescriptor._bufferParams._elementSize = sizeof( SceneShaderBufferData );
19 bufferDescriptor._initialData = { (Byte*)&_sceneBufferData, bufferDescriptor._bufferParams._elementSize };
20 bufferDescriptor._name = "SCENE_SHADER_DATA";
21 _sceneShaderData = _context.newSB( bufferDescriptor );
22 }
23 {
25 bufferDescriptor._bufferParams._elementSize = sizeof( ProbeData );
26 bufferDescriptor._initialData = { (Byte*)_probeData.data(), bufferDescriptor._bufferParams._elementSize };
27 bufferDescriptor._name = "SCENE_PROBE_DATA";
28 _probeShaderData = _context.newSB( bufferDescriptor );
29 }
30 }
31
33 {
35
36 if ( _probeDataDirty )
37 {
38 _probeShaderData->incQueue();
39 memCmdInOut._bufferLocks.push_back( _probeShaderData->writeData( _probeData.data() ) );
40 _probeDataDirty = false;
41 }
42
43 if ( _sceneDataDirty )
44 {
45 _sceneShaderData->incQueue();
46 memCmdInOut._bufferLocks.push_back( _sceneShaderData->writeData( &_sceneBufferData ) );
47 _sceneDataDirty = false;
48 }
49
50 auto bindCmd = GFX::EnqueueCommand<GFX::BindShaderResourcesCommand>( bufferInOut );
51 bindCmd->_usage = DescriptorSetUsage::PER_FRAME;
52 DescriptorSet& set = bindCmd->_set;
53 {
55 Set( binding._data, _probeShaderData.get(), {0u, GLOBAL_PROBE_COUNT});
56 }
57 {
59 Set( binding._data, _sceneShaderData.get(), {0u, 1u});
60 }
61 }
62
63} //namespace Divide
#define PROFILE_SCOPE_AUTO(CATEGORY)
Definition: Profiler.h:87
Rough around the edges Adapter pattern abstracting the actual rendering API and access to the GPU.
Definition: GFXDevice.h:215
ShaderBuffer_uptr newSB(const ShaderBufferDescriptor &descriptor)
Definition: GFXDevice.inl:214
ProbeBufferData _probeData
SceneShaderBufferData _sceneBufferData
ShaderBuffer_uptr _probeShaderData
SceneShaderData(GFXDevice &context)
void updateSceneDescriptorSet(GFX::CommandBuffer &bufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
ShaderBuffer_uptr _sceneShaderData
Generic scene data that doesn't change per shader.
constexpr U8 MAX_FRAMES_IN_FLIGHT
Maximum number of active frames until we start waiting on a fence/sync.
Definition: config.h:100
constexpr Optick::Category::Type Graphics
Definition: Profiler.h:60
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
std::byte Byte
void Set(DescriptorSetBindingData &dataInOut, ShaderBuffer *buffer, const BufferRange range) noexcept
DescriptorSetBinding & AddBinding(DescriptorSet &setInOut, U8 slot, U16 stageVisibilityMask)
constexpr U16 GLOBAL_PROBE_COUNT
BufferUpdateUsage _updateUsage
Definition: BufferParams.h:40
BufferUsageType _usageType
Definition: BufferParams.h:41
BufferUpdateFrequency _updateFrequency
Definition: BufferParams.h:39
size_t _elementSize
Buffer primitive size in bytes.
Definition: BufferParams.h:50
BufferFlags _flags
Definition: BufferParams.h:48
DescriptorSetBindingData _data
std::pair< bufferPtr, size_t > _initialData
Definition: ShaderBuffer.h:103