Skip to content

Commit

Permalink
#5585: Stage vertex parm exposed
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Apr 11, 2021
1 parent 5861f18 commit 7ef0c65
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 3 deletions.
5 changes: 5 additions & 0 deletions install/scripts/materialtest.py
Expand Up @@ -108,6 +108,11 @@
print('Stage transform expression1: {0}'.format(transform.expression1))
print('Stage transform expression2: {0}'.format(transform.expression2))

for v in range(0, stage.getNumVertexParms()):
parm = stage.getVertexParm(v)
print('Stage Vertex Parm #{0}: {1}'.format(parm.index, ' '.join(parm.expressions)))


newMaterial.swapStagePosition(diffuseStageIndex, bumpStageIndex)

print("The new material has been modified" if newMaterial.isModified() else "The new material is not modified?")
Expand Down
6 changes: 5 additions & 1 deletion plugins/script/interfaces/ShaderSystemInterface.cpp
Expand Up @@ -338,11 +338,14 @@ void ShaderSystemInterface::registerInterface(py::module& scope, py::dict& globa
.export_values();

py::class_<ScriptMaterialStage::Transformation> stageTransform(stage, "Transformation");

stageTransform.def_readwrite("type", &ScriptMaterialStage::Transformation::type);
stageTransform.def_readwrite("expression1", &ScriptMaterialStage::Transformation::expression1);
stageTransform.def_readwrite("expression2", &ScriptMaterialStage::Transformation::expression2);

py::class_<ScriptMaterialStage::VertexParm> stageVertexParm(stage, "VertexParm");
stageVertexParm.def_readwrite("index", &ScriptMaterialStage::VertexParm::index);
stageVertexParm.def_readwrite("expressions", &ScriptMaterialStage::VertexParm::expressions);

// Shader Stage
stage.def(py::init<const IShaderLayer::Ptr&>());
stage.def("getType", &ScriptMaterialStage::getType);
Expand All @@ -362,6 +365,7 @@ void ShaderSystemInterface::registerInterface(py::module& scope, py::dict& globa
stage.def("getFragmentProgram", &ScriptMaterialStage::getFragmentProgram);
stage.def("getNumVertexParms", &ScriptMaterialStage::getNumVertexParms);
stage.def("getNumFragmentMaps", &ScriptMaterialStage::getNumFragmentMaps);
stage.def("getVertexParm", &ScriptMaterialStage::getVertexParm);

// Expose the MaterialVisitor interface

Expand Down
32 changes: 30 additions & 2 deletions plugins/script/interfaces/ShaderSystemInterface.h
Expand Up @@ -119,15 +119,43 @@ class ScriptMaterialStage
return _layer ? _layer->getFragmentProgram() : std::string();
}

int getNumVertexParms()
std::size_t getNumVertexParms()
{
return _layer ? _layer->getNumVertexParms() : 0;
}

int getNumFragmentMaps()
std::size_t getNumFragmentMaps()
{
return _layer ? _layer->getNumFragmentMaps() : 0;
}

struct VertexParm
{
std::size_t index;
std::vector<std::string> expressions;
};

VertexParm getVertexParm(int index)
{
VertexParm parm;

if (_layer && index >= 0 && index < 4)
{
const auto& vp = _layer->getVertexParm(index);

parm.index = vp.index;

for (auto i = 0; i < 4; ++i)
{
if (vp.expressions[i])
{
parm.expressions.emplace_back(vp.expressions[i]->getExpressionString());
}
}
}

return parm;
}
};

/**
Expand Down

0 comments on commit 7ef0c65

Please sign in to comment.