*
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
#include "render/IConstantMapping.h"
|
||||
|
||||
IConstantMapping::IConstantMapping()
|
||||
:lastSlotId(0)
|
||||
{
|
||||
}
|
||||
IConstantMapping::~IConstantMapping()
|
||||
{
|
||||
}
|
||||
uint32 IConstantMapping::GetAlignedSize()
|
||||
{
|
||||
return (lastSlotId + 1) * HLSL_CONSTANT_SIZE * (mapping.size() > 0 ? 1 : 0);
|
||||
}
|
||||
void IConstantMapping::InsertConstant(const String& name, uint32 numRows, uint32 numCols)
|
||||
{
|
||||
if(!numRows || !numCols) return;
|
||||
|
||||
if(numRows == 1)
|
||||
{
|
||||
//try to insert variable in @white spaces@
|
||||
if(spaces.size() > 0)
|
||||
{
|
||||
for(ConstantCollectionItr it = spaces.begin(); it != spaces.end(); ++it)
|
||||
{
|
||||
if((*it).ColumnCount <= numCols) //found suitable white space! Fill it ^^
|
||||
{
|
||||
mapping.push_back(IConstantMappingData((*it).SlotID, (*it).SlotOffset, 1, numCols));
|
||||
(*it).SlotOffset += numCols;
|
||||
(*it).ColumnCount -= numCols;
|
||||
if((*it).ColumnCount <= 0)
|
||||
spaces.erase(it);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
mapping.push_back(IConstantMappingData(lastSlotId++, 0, 1, numCols));
|
||||
if(numCols < 4)
|
||||
spaces.push_back(IConstantMappingData(lastSlotId, numCols, 1, 4 - numCols));
|
||||
}
|
||||
else
|
||||
{
|
||||
mapping.push_back(IConstantMappingData(lastSlotId, 0, numRows, numCols));
|
||||
lastSlotId+=numRows;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user