Fixed material property setting at runtime #214
|
@ -17,6 +17,7 @@ of DigiPen Institute of Technology is prohibited.
|
|||
// Project Includes
|
||||
#include "Resource/SHHandle.h"
|
||||
#include "SHCommonTypes.h"
|
||||
#include "SH_API.h"
|
||||
|
||||
namespace SHADE
|
||||
{
|
||||
|
@ -35,7 +36,7 @@ namespace SHADE
|
|||
Describes a Pipeline along with it's associated properties for this instance.
|
||||
*/
|
||||
/***********************************************************************************/
|
||||
class SHMaterial
|
||||
class SH_API SHMaterial
|
||||
{
|
||||
public:
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
|
|
|
@ -11,6 +11,7 @@ of DigiPen Institute of Technology is prohibited.
|
|||
*//*************************************************************************************/
|
||||
#pragma once
|
||||
#include "SHMaterialInstance.h"
|
||||
#include "SHMaterial.h"
|
||||
|
||||
namespace SHADE
|
||||
{
|
||||
|
@ -70,11 +71,22 @@ namespace SHADE
|
|||
// Search Override Data for the property
|
||||
uint32_t PROP_IDX = SHADER_INFO->GetVariableIndex(key);
|
||||
auto prop = std::find_if(overrideData.begin(), overrideData.end(), [&](const OverrideData& data)
|
||||
{
|
||||
return PROP_IDX == data.Index;
|
||||
});
|
||||
{
|
||||
return PROP_IDX == data.Index;
|
||||
});
|
||||
|
||||
// No overrides, we get from the base material instead
|
||||
if (prop == overrideData.end())
|
||||
throw std::invalid_argument("Attempted to get an property that was not set previously!");
|
||||
{
|
||||
if (baseMaterial)
|
||||
{
|
||||
return baseMaterial->GetProperty<T>(key);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw std::invalid_argument("Attempted to get an property that was not set previously!");
|
||||
}
|
||||
}
|
||||
|
||||
// Get offset and return the memory directly
|
||||
T* dataPtr = reinterpret_cast<T*>(dataStore.get() + prop->StoredDataOffset);
|
||||
|
|
Loading…
Reference in New Issue