80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
#include "stdafx.h"
|
|
#include "IShader.h"
|
|
#include "BasisParameterCollection.h"
|
|
|
|
|
|
BasisShaderParameterCollection::BasisShaderParameterCollection()
|
|
{
|
|
}
|
|
|
|
|
|
BasisShaderParameterCollection::~BasisShaderParameterCollection()
|
|
{
|
|
this->RemoveAllShaderParameters();
|
|
}
|
|
|
|
|
|
void BasisShaderParameterCollection::UseParametersOnShader(IShader& argShader)
|
|
{
|
|
if (m_ParameterMap.empty())
|
|
return;
|
|
|
|
tk_ShaderToShaderParameter::iterator shaderPos = m_ShaderToParameterMap.find(argShader.get_InternalShader());
|
|
if (shaderPos == m_ShaderToParameterMap.end())
|
|
{
|
|
tk_ShaderParameterPairs newSet;
|
|
|
|
// (re)create shader entries
|
|
tk_StringToShaderParameter::iterator iter = m_ParameterMap.begin();
|
|
for (; iter != m_ParameterMap.end(); ++iter)
|
|
{
|
|
if (iter->second != NULL)
|
|
{
|
|
ID3D10EffectVariable* var = NULL;
|
|
if (iter->second->get_ParameterNameType() == ParameterBindType::BindByVariable)
|
|
var = argShader.get_InternalShader()->get_DX10Effect()->GetVariableByName(iter->first.c_str());
|
|
else if (iter->second->get_ParameterNameType() == ParameterBindType::BindBySemantic)
|
|
var = argShader.get_InternalShader()->get_DX10Effect()->GetVariableBySemantic(iter->first.c_str());
|
|
|
|
if (var != NULL)
|
|
newSet.push_back(ShaderParameterPair(*iter->second, var));
|
|
}
|
|
}
|
|
|
|
if (newSet.empty())
|
|
return;
|
|
|
|
m_ShaderToParameterMap[argShader.get_InternalShader()] = newSet;
|
|
}
|
|
|
|
tk_ShaderParameterPairs& set = m_ShaderToParameterMap[argShader.get_InternalShader()];
|
|
for (uint32 i = 0; i < set.size(); ++i)
|
|
set[i].Parameter->ApplyValue(*set[i].TargetVariable);
|
|
}
|
|
|
|
|
|
void BasisShaderParameterCollection::SetShaderParameter(const string8& argParameterName, IShaderParameter& argParameter)
|
|
{
|
|
this->RemoveShaderParameter(argParameterName);
|
|
m_ParameterMap[argParameterName] = &argParameter;
|
|
}
|
|
|
|
|
|
void BasisShaderParameterCollection::RemoveShaderParameter(const string8& argParameterName)
|
|
{
|
|
m_ShaderToParameterMap.clear();
|
|
tk_StringToShaderParameter::iterator found = m_ParameterMap.find(argParameterName);
|
|
if (found != m_ParameterMap.end())
|
|
m_ParameterMap.erase(found);
|
|
}
|
|
|
|
|
|
void BasisShaderParameterCollection::RemoveAllShaderParameters()
|
|
{
|
|
while (!m_ParameterMap.empty())
|
|
{
|
|
delete m_ParameterMap.begin()->second;
|
|
m_ParameterMap.erase(m_ParameterMap.begin());
|
|
}
|
|
}
|