genesis-3d_engine/Engine/foundation/jobs/jobuniformdesc.h

142 lines
3.4 KiB
C
Raw Normal View History

#pragma once
//------------------------------------------------------------------------------
/**
@class Jobs::JobUniformDesc
Descriptor for uniform data of a Job.
(C) 2009 Radon Labs GmbH
*/
#include "core/types.h"
//------------------------------------------------------------------------------
namespace Jobs
{
class JobUniformDesc
{
public:
static const SizeT MaxNumBuffers = 2;
/// default constructor
JobUniformDesc();
/// constructor with 1 uniform buffer
JobUniformDesc(void* ptr, SizeT bufSize, SizeT scratchSize);
/// constructor with 2 uniform buffers
JobUniformDesc(void* ptr0, SizeT bufSize0, void* ptr1, SizeT bufSize1, SizeT scratchSize);
/// update the uniform desc, all sizes in bytes
void Update(IndexT index, void* ptr, SizeT bufSize, SizeT scratchSize);
/// get number of buffers
SizeT GetNumBuffers() const;
/// get buffer pointer
void* GetPointer(IndexT i) const;
/// get buffer size
SizeT GetBufferSize(IndexT i) const;
/// get scratch size
SizeT GetScratchSize() const;
private:
SizeT numBuffers;
void* ptr[MaxNumBuffers];
SizeT bufferSize[MaxNumBuffers];
SizeT scratchSize;
};
//------------------------------------------------------------------------------
/**
*/
inline
JobUniformDesc::JobUniformDesc() :
numBuffers(0),
scratchSize(0)
{
IndexT i;
for (i = 0; i < MaxNumBuffers; i++)
{
this->ptr[i] = 0;
this->bufferSize[i] = 0;
}
}
//------------------------------------------------------------------------------
/**
*/
inline
JobUniformDesc::JobUniformDesc(void* ptr_, SizeT bufSize_, SizeT scratchSize_) :
numBuffers(1)
{
this->ptr[0] = ptr_;
this->bufferSize[0] = bufSize_;
this->ptr[1] = 0;
this->bufferSize[1] = 0;
this->scratchSize = scratchSize_;
}
//------------------------------------------------------------------------------
/**
*/
inline
JobUniformDesc::JobUniformDesc(void* ptr0_, SizeT bufSize0_, void* ptr1_, SizeT bufSize1_, SizeT scratchSize_) :
numBuffers(2)
{
this->ptr[0] = ptr0_;
this->bufferSize[0] = bufSize0_;
this->ptr[1] = ptr1_;
this->bufferSize[1] = bufSize1_;
this->scratchSize = scratchSize_;
}
//------------------------------------------------------------------------------
/**
*/
inline void
JobUniformDesc::Update(IndexT index, void* ptr_, SizeT size_, SizeT scratchSize_)
{
n_assert(index < this->numBuffers);
this->ptr[index] = ptr_;
this->bufferSize[index] = size_;
this->scratchSize = scratchSize_;
}
//------------------------------------------------------------------------------
/**
*/
inline SizeT
JobUniformDesc::GetNumBuffers() const
{
return this->numBuffers;
}
//------------------------------------------------------------------------------
/**
*/
inline void*
JobUniformDesc::GetPointer(IndexT i) const
{
n_assert(i < MaxNumBuffers);
return this->ptr[i];
}
//------------------------------------------------------------------------------
/**
*/
inline SizeT
JobUniformDesc::GetBufferSize(IndexT i) const
{
n_assert(i < MaxNumBuffers);
return this->bufferSize[i];
}
//------------------------------------------------------------------------------
/**
*/
inline SizeT
JobUniformDesc::GetScratchSize() const
{
return this->scratchSize;
}
} // namespace Jobs
//------------------------------------------------------------------------------