diff --git a/include/ShaderLayer.h b/include/ShaderLayer.h index 834abd58c7..62b48b6cd1 100644 --- a/include/ShaderLayer.h +++ b/include/ShaderLayer.h @@ -93,6 +93,7 @@ class ShaderLayer TEXGEN_REFLECT = 1 << 1, TEXGEN_SKYBOX = 1 << 2, TEXGEN_WOBBLESKY = 1 << 3, + TEXGEN_SCREEN = 1 << 4, // screen aligned, for mirrorRenders and screen space temporaries }; /** @@ -212,6 +213,12 @@ class ShaderLayer */ virtual CubeMapMode getCubeMapMode() const = 0; + /** + * Returns the dimensions specifying the map size for + * stages using the "mirrorRenderMap", "remoteRenderMap" keywords. + */ + virtual const Vector2& getRenderMapSize() = 0; + /** * Returns the value of the scale expressions of this stage. */ diff --git a/radiantcore/shaders/Doom3ShaderLayer.cpp b/radiantcore/shaders/Doom3ShaderLayer.cpp index 2a1bdf99c5..8f6cb7ff10 100644 --- a/radiantcore/shaders/Doom3ShaderLayer.cpp +++ b/radiantcore/shaders/Doom3ShaderLayer.cpp @@ -226,6 +226,16 @@ void Doom3ShaderLayer::setMapType(MapType type) _mapType = type; } +const Vector2& Doom3ShaderLayer::getRenderMapSize() +{ + return _renderMapSize; +} + +void Doom3ShaderLayer::setRenderMapSize(const Vector2& size) +{ + _renderMapSize = size; +} + bool Doom3ShaderLayer::hasAlphaTest() const { return _alphaTest != REG_ZERO; diff --git a/radiantcore/shaders/Doom3ShaderLayer.h b/radiantcore/shaders/Doom3ShaderLayer.h index a4347a2c0f..84aff4e4e6 100644 --- a/radiantcore/shaders/Doom3ShaderLayer.h +++ b/radiantcore/shaders/Doom3ShaderLayer.h @@ -113,6 +113,8 @@ class Doom3ShaderLayer // Stage-specific polygon offset, is 0 if not used float _privatePolygonOffset; + Vector2 _renderMapSize; + public: // Constructor @@ -130,6 +132,9 @@ class Doom3ShaderLayer MapType getMapType() const override; void setMapType(MapType type); + const Vector2& getRenderMapSize() override; + void setRenderMapSize(const Vector2& size); + bool hasAlphaTest() const override; float getAlphaTest() const override; diff --git a/radiantcore/shaders/ShaderTemplate.cpp b/radiantcore/shaders/ShaderTemplate.cpp index 624714f2f4..7ab678f990 100644 --- a/radiantcore/shaders/ShaderTemplate.cpp +++ b/radiantcore/shaders/ShaderTemplate.cpp @@ -615,8 +615,9 @@ bool ShaderTemplate::parseBlendMaps(parser::DefTokeniser& tokeniser, const std:: try { - std::stoi(tokeniser.nextToken()); - std::stoi(tokeniser.nextToken()); + auto width = std::stoi(tokeniser.nextToken()); + auto height = std::stoi(tokeniser.nextToken()); + _currentLayer->setRenderMapSize(Vector2(width, height)); } catch (std::logic_error& e) { @@ -627,11 +628,13 @@ bool ShaderTemplate::parseBlendMaps(parser::DefTokeniser& tokeniser, const std:: else if (token == "mirrorrendermap") { _currentLayer->setMapType(ShaderLayer::MapType::MirrorRenderMap); + _currentLayer->setTexGenType(ShaderLayer::TexGenType::TEXGEN_SCREEN); try { - std::stoi(tokeniser.nextToken()); - std::stoi(tokeniser.nextToken()); + auto width = std::stoi(tokeniser.nextToken()); + auto height = std::stoi(tokeniser.nextToken()); + _currentLayer->setRenderMapSize(Vector2(width, height)); } catch (std::invalid_argument& e) {