diff --git a/radiantcore/shaders/MaterialSourceGenerator.cpp b/radiantcore/shaders/MaterialSourceGenerator.cpp index 7811ed1b1a..6fed0c9fda 100644 --- a/radiantcore/shaders/MaterialSourceGenerator.cpp +++ b/radiantcore/shaders/MaterialSourceGenerator.cpp @@ -90,6 +90,22 @@ std::ostream& operator<<(std::ostream& stream, Doom3ShaderLayer& layer) stream << "\t\tlinear\n"; } + // Texture Quality + if (layer.getStageFlags() & IShaderLayer::FLAG_HIGHQUALITY) + { + stream << "\t\thighQuality\n"; + } + + if (layer.getStageFlags() & IShaderLayer::FLAG_FORCE_HIGHQUALITY) + { + stream << "\t\tforceHighQuality\n"; + } + + if (layer.getStageFlags() & IShaderLayer::FLAG_NO_PICMIP) + { + stream << "\t\tnopicmip\n"; + } + stream << "\t}\n"; return stream; diff --git a/test/MaterialExport.cpp b/test/MaterialExport.cpp index 3997d135aa..8e8876c04c 100644 --- a/test/MaterialExport.cpp +++ b/test/MaterialExport.cpp @@ -547,4 +547,33 @@ TEST_F(MaterialExportTest, TextureFilter) expectDefinitionDoesNotContain(material, "linear"); } +TEST_F(MaterialExportTest, TextureQuality) +{ + auto material = GlobalMaterialManager().getMaterial("textures/exporttest/empty"); + + EXPECT_EQ(string::trim_copy(material->getDefinition()), ""); + + auto layer = material->getEditableLayer(material->addLayer(IShaderLayer::BLEND)); + layer->setStageFlag(IShaderLayer::FLAG_HIGHQUALITY); + expectDefinitionContains(material, "highQuality"); + expectDefinitionDoesNotContain(material, "uncompressed"); + + layer->clearStageFlag(IShaderLayer::FLAG_HIGHQUALITY); + expectDefinitionDoesNotContain(material, "highQuality"); + expectDefinitionDoesNotContain(material, "uncompressed"); + + layer->setStageFlag(IShaderLayer::FLAG_FORCE_HIGHQUALITY); + expectDefinitionContains(material, "forceHighQuality"); + expectDefinitionDoesNotContain(material, "highQuality"); + + layer->clearStageFlag(IShaderLayer::FLAG_FORCE_HIGHQUALITY); + expectDefinitionDoesNotContain(material, "forceHighQuality"); + + layer->setStageFlag(IShaderLayer::FLAG_NO_PICMIP); + expectDefinitionContains(material, "nopicmip"); + + layer->clearStageFlag(IShaderLayer::FLAG_NO_PICMIP); + expectDefinitionDoesNotContain(material, "nopicmip"); +} + } diff --git a/test/Materials.cpp b/test/Materials.cpp index 74358fa235..3b323921b2 100644 --- a/test/Materials.cpp +++ b/test/Materials.cpp @@ -1000,4 +1000,19 @@ TEST_F(MaterialsTest, MaterialParserTextureFiltering) EXPECT_NE(material->getAllLayers().front()->getStageFlags() & IShaderLayer::FLAG_FILTER_LINEAR, 0); } +TEST_F(MaterialsTest, MaterialParserTextureQuality) +{ + auto material = GlobalMaterialManager().getMaterial("textures/parsertest/texturequality/highquality"); + EXPECT_NE(material->getAllLayers().front()->getStageFlags() & IShaderLayer::FLAG_HIGHQUALITY, 0); + + material = GlobalMaterialManager().getMaterial("textures/parsertest/texturequality/uncompressed"); + EXPECT_NE(material->getAllLayers().front()->getStageFlags() & IShaderLayer::FLAG_HIGHQUALITY, 0); + + material = GlobalMaterialManager().getMaterial("textures/parsertest/texturequality/forcehighquality"); + EXPECT_NE(material->getAllLayers().front()->getStageFlags() & IShaderLayer::FLAG_FORCE_HIGHQUALITY, 0); + + material = GlobalMaterialManager().getMaterial("textures/parsertest/texturequality/nopicmip"); + EXPECT_NE(material->getAllLayers().front()->getStageFlags() & IShaderLayer::FLAG_NO_PICMIP, 0); +} + } diff --git a/test/resources/tdm/materials/parsertest.mtr b/test/resources/tdm/materials/parsertest.mtr index 06883c315d..66044ed1d1 100644 --- a/test/resources/tdm/materials/parsertest.mtr +++ b/test/resources/tdm/materials/parsertest.mtr @@ -598,3 +598,40 @@ textures/parsertest/texturefilter/linear linear } } + +textures/parsertest/texturequality/highquality +{ + { + blend diffusemap + map _white + highquality + } +} + +// uncompressed is the same as highquality +textures/parsertest/texturequality/uncompressed +{ + { + blend diffusemap + map _white + uncompressed + } +} + +textures/parsertest/texturequality/forcehighquality +{ + { + blend diffusemap + map _white + forcehighquality + } +} + +textures/parsertest/texturequality/nopicmip +{ + { + blend diffusemap + map _white + nopicmip + } +}