Exemplo n.º 1
0
bool vesMaterial::addAttribute(vesSharedPtr<vesMaterialAttribute> attribute)
{
  if (!attribute) {
    return false;
  }

  if (attribute->type()    != vesMaterialAttribute::Texture &&
      attribute->binding() == vesMaterialAttribute::BindAll) {

    // Shader is a special attribute.
    if (attribute->type() == vesMaterialAttribute::Shader) {
      return this->setShaderProgram(std::tr1::static_pointer_cast<vesShaderProgram>(attribute));
    }

    // Everything else.
    return this->m_internal->addAttribute(
      this->m_internal->m_attributes, attribute);
  }
  else  if(attribute->type() == vesMaterialAttribute::Texture) {
    vesSharedPtr<vesTexture> texture = std::tr1::static_pointer_cast<vesTexture>(attribute);

    // Cache last texture so that we can release graphics resources on it.
    this->m_internal->m_textureAttributes[texture->textureUnit()] = texture;

    return true;
  }
  else if(attribute->binding() == vesMaterialAttribute::BindMinimal)
  {
    return this->m_internal->addAttribute(
      this->m_internal->m_minimalAttributes, attribute);
  }

  return false;
}
Exemplo n.º 2
0
bool vesMaterial::vesInternal::addAttribute(
  Attributes &attributes,
  vesSharedPtr<vesMaterialAttribute> attribute)
{
  if (!attribute) {
    return false;
  }

  vesInternal::Attributes::iterator itr =
    attributes.find(attribute->type());

  if (itr == attributes.end() || ( (itr->second) != attribute )) {

    attributes[attribute->type()] = attribute;

    return true;
  }

  return false;
}
Exemplo n.º 3
0
bool vesMaterial::setShaderProgram(vesSharedPtr<vesShaderProgram> shaderProgram)
{
  if (!shaderProgram || shaderProgram == this->m_shaderProgram) {
    return false;
  }

  this->m_shaderProgram = shaderProgram;
  this->m_internal->m_attributes[shaderProgram->type()] =
    this->m_shaderProgram;

  return true;
}