From bc16ae8288cbde172c1652a125bc9c75ce42cb0c Mon Sep 17 00:00:00 2001 From: codereader Date: Fri, 26 Mar 2021 06:31:56 +0100 Subject: [PATCH] #5565: Export texture filter --- .../shaders/MaterialSourceGenerator.cpp | 11 ++++ test/MaterialExport.cpp | 24 +++++++++ test/Materials.cpp | 9 ++++ test/resources/tdm/materials/parsertest.mtr | 53 +++++++++++++++++++ 4 files changed, 97 insertions(+) diff --git a/radiantcore/shaders/MaterialSourceGenerator.cpp b/radiantcore/shaders/MaterialSourceGenerator.cpp index 319c9e3753..7811ed1b1a 100644 --- a/radiantcore/shaders/MaterialSourceGenerator.cpp +++ b/radiantcore/shaders/MaterialSourceGenerator.cpp @@ -79,6 +79,17 @@ std::ostream& operator<<(std::ostream& stream, Doom3ShaderLayer& layer) } // switch } + // Texture Filter + if (layer.getStageFlags() & IShaderLayer::FLAG_FILTER_NEAREST) + { + stream << "\t\tnearest\n"; + } + + if (layer.getStageFlags() & IShaderLayer::FLAG_FILTER_LINEAR) + { + stream << "\t\tlinear\n"; + } + stream << "\t}\n"; return stream; diff --git a/test/MaterialExport.cpp b/test/MaterialExport.cpp index e835604909..3997d135aa 100644 --- a/test/MaterialExport.cpp +++ b/test/MaterialExport.cpp @@ -523,4 +523,28 @@ TEST_F(MaterialExportTest, StageMaps) expectDefinitionContains(material, "soundMap waveform"); } +TEST_F(MaterialExportTest, TextureFilter) +{ + 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_FILTER_NEAREST); + expectDefinitionContains(material, "nearest"); + expectDefinitionDoesNotContain(material, "linear"); + + layer->clearStageFlag(IShaderLayer::FLAG_FILTER_NEAREST); + expectDefinitionDoesNotContain(material, "nearest"); + expectDefinitionDoesNotContain(material, "linear"); + + layer->setStageFlag(IShaderLayer::FLAG_FILTER_LINEAR); + expectDefinitionContains(material, "linear"); + expectDefinitionDoesNotContain(material, "nearest"); + + layer->clearStageFlag(IShaderLayer::FLAG_FILTER_LINEAR); + expectDefinitionDoesNotContain(material, "nearest"); + expectDefinitionDoesNotContain(material, "linear"); +} + } diff --git a/test/Materials.cpp b/test/Materials.cpp index 5f07594417..74358fa235 100644 --- a/test/Materials.cpp +++ b/test/Materials.cpp @@ -991,4 +991,13 @@ TEST_F(MaterialsTest, MaterialParserSurfaceFlags) } } +TEST_F(MaterialsTest, MaterialParserTextureFiltering) +{ + auto material = GlobalMaterialManager().getMaterial("textures/parsertest/texturefilter/nearest"); + EXPECT_NE(material->getAllLayers().front()->getStageFlags() & IShaderLayer::FLAG_FILTER_NEAREST, 0); + + material = GlobalMaterialManager().getMaterial("textures/parsertest/texturefilter/linear"); + EXPECT_NE(material->getAllLayers().front()->getStageFlags() & IShaderLayer::FLAG_FILTER_LINEAR, 0); +} + } diff --git a/test/resources/tdm/materials/parsertest.mtr b/test/resources/tdm/materials/parsertest.mtr index 357c5a291f..06883c315d 100644 --- a/test/resources/tdm/materials/parsertest.mtr +++ b/test/resources/tdm/materials/parsertest.mtr @@ -545,3 +545,56 @@ textures/parsertest/surfaceflags/noimpact { noimpact } textures/parsertest/surfaceflags/nodamage { nodamage } textures/parsertest/surfaceflags/ladder { ladder } textures/parsertest/surfaceflags/nosteps { nosteps } + +textures/parsertest/texgen/normal +{ + { + blend diffusemap + map _white + } +} + +textures/parsertest/texgen/reflect +{ + { + blend diffusemap + map _white + texgen reflect + } +} + +textures/parsertest/texgen/skybox +{ + { + blend diffusemap + map _white + texgen skybox + } +} + +textures/parsertest/texgen/skybox +{ + { + blend diffusemap + map _white + texgen skybox + } +} + +textures/parsertest/texturefilter/nearest +{ + { + blend diffusemap + map _white + nearest + } +} + +textures/parsertest/texturefilter/linear +{ + { + blend diffusemap + map _white + linear + } +}