ovis: allow up to 4 active texture units

pull/1714/head
Pavel Rojtberg 7 years ago
parent f7e522a1cb
commit c655c31054
  1. 6
      modules/ovis/include/opencv2/ovis.hpp
  2. 9
      modules/ovis/src/ovis.cpp

@ -35,7 +35,11 @@ enum MaterialProperty
MATERIAL_POINT_SIZE,
MATERIAL_OPACITY,
MATERIAL_EMISSIVE,
MATERIAL_TEXTURE
MATERIAL_TEXTURE0,
MATERIAL_TEXTURE = MATERIAL_TEXTURE0,
MATERIAL_TEXTURE1,
MATERIAL_TEXTURE2,
MATERIAL_TEXTURE3,
};
enum EntityProperty

@ -717,20 +717,23 @@ void setMaterialProperty(const String& name, int prop, const Scalar& val)
void setMaterialProperty(const String& name, int prop, const String& value)
{
CV_Assert(prop == MATERIAL_TEXTURE, _app);
CV_Assert(prop >= MATERIAL_TEXTURE0, prop <= MATERIAL_TEXTURE3, _app);
MaterialPtr mat = MaterialManager::getSingleton().getByName(name, RESOURCEGROUP_NAME);
CV_Assert(mat);
Pass* rpass = mat->getTechniques()[0]->getPasses()[0];
if (rpass->getTextureUnitStates().empty())
size_t texUnit = prop - MATERIAL_TEXTURE0;
CV_Assert(texUnit <= rpass->getTextureUnitStates().size());
if (rpass->getTextureUnitStates().size() <= texUnit)
{
rpass->createTextureUnitState(value);
return;
}
rpass->getTextureUnitStates()[0]->setTextureName(value);
rpass->getTextureUnitStates()[texUnit]->setTextureName(value);
}
static bool setShaderProperty(const GpuProgramParametersSharedPtr& params, const String& prop,

Loading…
Cancel
Save