Browse Source

Trade: add forgotten OcclusionTextureStrength attribute.

Whoops, again.
pull/459/head
Vladimír Vondruš 6 years ago
parent
commit
829e9b6d0f
  1. 1
      src/Magnum/Trade/Implementation/materialAttributeProperties.hpp
  2. 26
      src/Magnum/Trade/MaterialData.h
  3. 6
      src/Magnum/Trade/PbrMetallicRoughnessMaterialData.cpp
  4. 11
      src/Magnum/Trade/PbrMetallicRoughnessMaterialData.h
  5. 6
      src/Magnum/Trade/PbrSpecularGlossinessMaterialData.cpp
  6. 11
      src/Magnum/Trade/PbrSpecularGlossinessMaterialData.h
  7. 10
      src/Magnum/Trade/Test/MaterialDataTest.cpp

1
src/Magnum/Trade/Implementation/materialAttributeProperties.hpp

@ -70,6 +70,7 @@ _ct(NormalTextureSwizzle,TextureSwizzle,MaterialTextureSwizzle)
_c(NormalTextureMatrix,Matrix3x3)
_c(NormalTextureCoordinates,UnsignedInt)
_c(OcclusionTexture,UnsignedInt)
_c(OcclusionTextureStrength,Float)
_ct(OcclusionTextureSwizzle,TextureSwizzle,MaterialTextureSwizzle)
_c(OcclusionTextureMatrix,Matrix3x3)
_c(OcclusionTextureCoordinates,UnsignedInt)

26
src/Magnum/Trade/MaterialData.h

@ -678,12 +678,36 @@ enum class MaterialAttribute: UnsignedInt {
/**
* Occlusion texture index,
* @ref MaterialAttributeType::UnsignedInt.
*
* Single-channel texture that multiplies the resulting material color
* @f$ \boldsymbol{c} @f$: @f[
* \boldsymbol{c}_o = o \boldsymbol{c}
* @f]
*
* If @ref MaterialAttribute::OcclusionTextureStrength is present as well,
* it's used as an interpolation factor @f$ \color{m-success} s @f$ between
* material color @f$ \boldsymbol{c} @f$ and color with occlusion applied
* @f$ o \boldsymbol{c} @f$: @f[
* \boldsymbol{c}_o = \operatorname{lerp}(\boldsymbol{c}, o \boldsymbol{c}, {\color{m-success} s}) =
* \boldsymbol{c} (1 - {\color{m-success} s}) + o \boldsymbol{c} {\color{m-success} s}
* @f]
* @see @ref PbrMetallicRoughnessMaterialData::hasOcclusionRoughnessMetallicTexture(),
* @ref PbrMetallicRoughnessMaterialData::occlusionTexture(),
* @ref PbrSpecularGlossinessMaterialData::occlusionTexture()
* @ref PbrSpecularGlossinessMaterialData::occlusionTexture(),
* @ref Math::lerp()
*/
OcclusionTexture,
/**
* Occlusion texture strength, @ref MaterialAttributeType::Float.
*
* Affects the texture defined by @ref MaterialAttribute::OcclusionTexture,
* see above for details.
* @see @ref PbrMetallicRoughnessMaterialData::occlusionTextureStrength(),
* @ref PbrSpecularGlossinessMaterialData::occlusionTextureStrength()
*/
OcclusionTextureStrength,
/**
* Occlusion texture swizzle, @ref MaterialAttributeType::TextureSwizzle.
*

6
src/Magnum/Trade/PbrMetallicRoughnessMaterialData.cpp

@ -259,6 +259,12 @@ UnsignedInt PbrMetallicRoughnessMaterialData::occlusionTexture() const {
return attribute<UnsignedInt>(MaterialAttribute::OcclusionTexture);
}
Float PbrMetallicRoughnessMaterialData::occlusionTextureStrength() const {
CORRADE_ASSERT(hasAttribute(MaterialAttribute::OcclusionTexture),
"Trade::PbrMetallicRoughnessMaterialData::occlusionTextureStrength(): the material doesn't have an occlusion texture", {});
return attributeOr(MaterialAttribute::OcclusionTextureStrength, 1.0f);
}
MaterialTextureSwizzle PbrMetallicRoughnessMaterialData::occlusionTextureSwizzle() const {
CORRADE_ASSERT(hasAttribute(MaterialAttribute::OcclusionTexture),
"Trade::PbrMetallicRoughnessMaterialData::occlusionTextureSwizzle(): the material doesn't have an occlusion texture", {});

11
src/Magnum/Trade/PbrMetallicRoughnessMaterialData.h

@ -478,6 +478,17 @@ class MAGNUM_TRADE_EXPORT PbrMetallicRoughnessMaterialData: public MaterialData
*/
UnsignedInt occlusionTexture() const;
/**
* @brief Occlusion texture strength
*
* Convenience access to the @ref MaterialAttribute::OcclusionTextureStrength
* attribute. If not present, the default is @cpp 1.0f @ce.
* Available only if @ref MaterialAttribute::OcclusionTexture is
* present.
* @see @ref hasAttribute()
*/
Float occlusionTextureStrength() const;
/**
* @brief Occlusion texture swizzle
*

6
src/Magnum/Trade/PbrSpecularGlossinessMaterialData.cpp

@ -208,6 +208,12 @@ UnsignedInt PbrSpecularGlossinessMaterialData::occlusionTexture() const {
return attribute<UnsignedInt>(MaterialAttribute::OcclusionTexture);
}
Float PbrSpecularGlossinessMaterialData::occlusionTextureStrength() const {
CORRADE_ASSERT(hasAttribute(MaterialAttribute::OcclusionTexture),
"Trade::PbrSpecularGlossinessMaterialData::occlusionTextureStrength(): the material doesn't have an occlusion texture", {});
return attributeOr(MaterialAttribute::OcclusionTextureStrength, 1.0f);
}
MaterialTextureSwizzle PbrSpecularGlossinessMaterialData::occlusionTextureSwizzle() const {
CORRADE_ASSERT(hasAttribute(MaterialAttribute::OcclusionTexture),
"Trade::PbrSpecularGlossinessMaterialData::occlusionTextureSwizzle(): the material doesn't have an occlusion texture", {});

11
src/Magnum/Trade/PbrSpecularGlossinessMaterialData.h

@ -347,6 +347,17 @@ class MAGNUM_TRADE_EXPORT PbrSpecularGlossinessMaterialData: public MaterialData
*/
UnsignedInt occlusionTexture() const;
/**
* @brief Occlusion texture strength
*
* Convenience access to the @ref MaterialAttribute::OcclusionTextureStrength
* attribute. If not present, the default is @cpp 1.0f @ce.
* Available only if @ref MaterialAttribute::OcclusionTexture is
* present.
* @see @ref hasAttribute()
*/
Float occlusionTextureStrength() const;
/**
* @brief Occlusion texture swizzle
*

10
src/Magnum/Trade/Test/MaterialDataTest.cpp

@ -2748,6 +2748,7 @@ void MaterialDataTest::pbrMetallicRoughnessAccessTextured() {
{MaterialAttribute::NormalTextureMatrix, Matrix3::scaling({1.0f, 0.5f})},
{MaterialAttribute::NormalTextureCoordinates, 5u},
{MaterialAttribute::OcclusionTexture, 4u},
{MaterialAttribute::OcclusionTextureStrength, 0.66f},
{MaterialAttribute::OcclusionTextureSwizzle, MaterialTextureSwizzle::B},
{MaterialAttribute::OcclusionTextureMatrix, Matrix3::scaling({1.0f, 0.75f})},
{MaterialAttribute::OcclusionTextureCoordinates, 6u},
@ -2785,6 +2786,7 @@ void MaterialDataTest::pbrMetallicRoughnessAccessTextured() {
CORRADE_COMPARE(data.normalTextureMatrix(), Matrix3::scaling({1.0f, 0.5f}));
CORRADE_COMPARE(data.normalTextureCoordinates(), 5);
CORRADE_COMPARE(data.occlusionTexture(), 4);
CORRADE_COMPARE(data.occlusionTextureStrength(), 0.66f);
CORRADE_COMPARE(data.occlusionTextureMatrix(), Matrix3::scaling({1.0f, 0.75f}));
CORRADE_COMPARE(data.occlusionTextureSwizzle(), MaterialTextureSwizzle::B);
CORRADE_COMPARE(data.occlusionTextureCoordinates(), 6);
@ -2835,6 +2837,7 @@ void MaterialDataTest::pbrMetallicRoughnessAccessTexturedDefaults() {
CORRADE_COMPARE(data.normalTextureMatrix(), Matrix3{});
CORRADE_COMPARE(data.normalTextureCoordinates(), 0);
CORRADE_COMPARE(data.occlusionTexture(), 5);
CORRADE_COMPARE(data.occlusionTextureStrength(), 1.0f);
CORRADE_COMPARE(data.occlusionTextureSwizzle(), MaterialTextureSwizzle::R);
CORRADE_COMPARE(data.occlusionTextureMatrix(), Matrix3{});
CORRADE_COMPARE(data.occlusionTextureCoordinates(), 0);
@ -3278,6 +3281,7 @@ void MaterialDataTest::pbrMetallicRoughnessAccessInvalidTextures() {
data.normalTextureMatrix();
data.normalTextureCoordinates();
data.occlusionTexture();
data.occlusionTextureStrength();
data.occlusionTextureSwizzle();
data.occlusionTextureMatrix();
data.occlusionTextureCoordinates();
@ -3302,6 +3306,7 @@ void MaterialDataTest::pbrMetallicRoughnessAccessInvalidTextures() {
"Trade::PbrMetallicRoughnessMaterialData::normalTextureMatrix(): the material doesn't have a normal texture\n"
"Trade::PbrMetallicRoughnessMaterialData::normalTextureCoordinates(): the material doesn't have a normal texture\n"
"Trade::MaterialData::attribute(): attribute OcclusionTexture not found in layer 0\n"
"Trade::PbrMetallicRoughnessMaterialData::occlusionTextureStrength(): the material doesn't have an occlusion texture\n"
"Trade::PbrMetallicRoughnessMaterialData::occlusionTextureSwizzle(): the material doesn't have an occlusion texture\n"
"Trade::PbrMetallicRoughnessMaterialData::occlusionTextureMatrix(): the material doesn't have an occlusion texture\n"
"Trade::PbrMetallicRoughnessMaterialData::occlusionTextureCoordinates(): the material doesn't have an occlusion texture\n"
@ -3370,6 +3375,7 @@ void MaterialDataTest::pbrSpecularGlossinessAccessTextured() {
{MaterialAttribute::NormalTextureMatrix, Matrix3::scaling({1.0f, 0.5f})},
{MaterialAttribute::NormalTextureCoordinates, 5u},
{MaterialAttribute::OcclusionTexture, 4u},
{MaterialAttribute::OcclusionTextureStrength, 0.66f},
{MaterialAttribute::OcclusionTextureSwizzle, MaterialTextureSwizzle::B},
{MaterialAttribute::OcclusionTextureMatrix, Matrix3::scaling({1.0f, 0.75f})},
{MaterialAttribute::OcclusionTextureCoordinates, 6u},
@ -3404,6 +3410,7 @@ void MaterialDataTest::pbrSpecularGlossinessAccessTextured() {
CORRADE_COMPARE(data.normalTextureMatrix(), Matrix3::scaling({1.0f, 0.5f}));
CORRADE_COMPARE(data.normalTextureCoordinates(), 5);
CORRADE_COMPARE(data.occlusionTexture(), 4);
CORRADE_COMPARE(data.occlusionTextureStrength(), 0.66f);
CORRADE_COMPARE(data.occlusionTextureMatrix(), Matrix3::scaling({1.0f, 0.75f}));
CORRADE_COMPARE(data.occlusionTextureSwizzle(), MaterialTextureSwizzle::B);
CORRADE_COMPARE(data.occlusionTextureCoordinates(), 6);
@ -3451,6 +3458,7 @@ void MaterialDataTest::pbrSpecularGlossinessAccessTexturedDefaults() {
CORRADE_COMPARE(data.normalTextureMatrix(), Matrix3{});
CORRADE_COMPARE(data.normalTextureCoordinates(), 0);
CORRADE_COMPARE(data.occlusionTexture(), 5);
CORRADE_COMPARE(data.occlusionTextureStrength(), 1.0f);
CORRADE_COMPARE(data.occlusionTextureMatrix(), Matrix3{});
CORRADE_COMPARE(data.occlusionTextureSwizzle(), MaterialTextureSwizzle::R);
CORRADE_COMPARE(data.occlusionTextureCoordinates(), 0);
@ -3665,6 +3673,7 @@ void MaterialDataTest::pbrSpecularGlossinessAccessInvalidTextures() {
data.normalTextureMatrix();
data.normalTextureCoordinates();
data.occlusionTexture();
data.occlusionTextureStrength();
data.occlusionTextureSwizzle();
data.occlusionTextureMatrix();
data.occlusionTextureCoordinates();
@ -3689,6 +3698,7 @@ void MaterialDataTest::pbrSpecularGlossinessAccessInvalidTextures() {
"Trade::PbrSpecularGlossinessMaterialData::normalTextureMatrix(): the material doesn't have a normal texture\n"
"Trade::PbrSpecularGlossinessMaterialData::normalTextureCoordinates(): the material doesn't have a normal texture\n"
"Trade::MaterialData::attribute(): attribute OcclusionTexture not found in layer 0\n"
"Trade::PbrSpecularGlossinessMaterialData::occlusionTextureStrength(): the material doesn't have an occlusion texture\n"
"Trade::PbrSpecularGlossinessMaterialData::occlusionTextureSwizzle(): the material doesn't have an occlusion texture\n"
"Trade::PbrSpecularGlossinessMaterialData::occlusionTextureMatrix(): the material doesn't have an occlusion texture\n"
"Trade::PbrSpecularGlossinessMaterialData::occlusionTextureCoordinates(): the material doesn't have an occlusion texture\n"

Loading…
Cancel
Save