diff --git a/Backends/RmlUi_Renderer_GL2.cpp b/Backends/RmlUi_Renderer_GL2.cpp index 047b55a7d..3510842da 100644 --- a/Backends/RmlUi_Renderer_GL2.cpp +++ b/Backends/RmlUi_Renderer_GL2.cpp @@ -297,8 +297,8 @@ bool RenderInterface_GL2::GenerateTexture(Rml::TextureHandle& texture_handle, co glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); texture_handle = (Rml::TextureHandle)texture_id; diff --git a/Backends/RmlUi_Renderer_GL3.cpp b/Backends/RmlUi_Renderer_GL3.cpp index cb239cd9e..b143fe3d4 100644 --- a/Backends/RmlUi_Renderer_GL3.cpp +++ b/Backends/RmlUi_Renderer_GL3.cpp @@ -731,8 +731,8 @@ bool RenderInterface_GL3::GenerateTexture(Rml::TextureHandle& texture_handle, co glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); texture_handle = (Rml::TextureHandle)texture_id; diff --git a/Samples/assets/alien_small.tga b/Samples/assets/alien_small.tga new file mode 100644 index 000000000..6d7c53d72 Binary files /dev/null and b/Samples/assets/alien_small.tga differ diff --git a/Samples/basic/demo/data/demo.rml b/Samples/basic/demo/data/demo.rml index 3c6749613..07268e741 100644 --- a/Samples/basic/demo/data/demo.rml +++ b/Samples/basic/demo/data/demo.rml @@ -199,6 +199,9 @@ p.title border: 1dp #777; font-effect: shadow( 1dp 1dp #333 ); } +.image-mode.repeat > div { + height: 120dp; +} #decorators .image-mode > div > p { margin: -2em 0 0 0; @@ -223,6 +226,9 @@ p.title .fit-cover { decorator: image( icon-invader cover ); } .fit-scale-none { decorator: image( icon-invader scale-none ); } .fit-scale-down { decorator: image( icon-invader scale-down ); } +.fit-repeat { decorator: image( /assets/alien_small.tga repeat ); } +.fit-repeat-x { decorator: image( /assets/alien_small.tga repeat-x ); } +.fit-repeat-y { decorator: image( /assets/alien_small.tga repeat-y ); } .orientation-vertical { decorator: image( icon-invader flip-vertical scale-none ); } .orientation-horizontal { decorator: image( icon-invader flip-horizontal scale-none ); } .orientation-rotate { decorator: image( icon-invader rotate-180 scale-none ); } @@ -709,6 +715,11 @@ progress {
+
+

repeat

+

repeat-x

+

repeat-y

+

Image decorator alignment modes

default

diff --git a/Source/Core/DecoratorTiled.cpp b/Source/Core/DecoratorTiled.cpp index 24d67a4fd..1fdc2f5db 100644 --- a/Source/Core/DecoratorTiled.cpp +++ b/Source/Core/DecoratorTiled.cpp @@ -120,6 +120,7 @@ void DecoratorTiled::Tile::GenerateGeometry(Vector& vertices, Vector& vertices, Vector& vertices, Vectorrectangle.Position(); tile.size = sprite->rectangle.Size(); @@ -134,6 +135,14 @@ bool DecoratorTiledInstancer::GetTileProperties(DecoratorTiled::Tile* tiles, Tex const Property& fit_property = *properties.GetProperty(ids.fit); tile.fit_mode = (DecoratorTiled::TileFitMode)fit_property.value.Get(); + if (sprite && (tile.fit_mode == DecoratorTiled::TileFitMode::REPEAT || + tile.fit_mode == DecoratorTiled::TileFitMode::REPEAT_X || + tile.fit_mode == DecoratorTiled::TileFitMode::REPEAT_Y)) { + Log::Message(Log::LT_WARNING, "Decorator fit value is '%s', which is incompatible with a spritesheet", + fit_property.ToString().c_str()); + return false; + } + const Property* align_properties[2] = {properties.GetProperty(ids.align_x), properties.GetProperty(ids.align_y)}; for (int dimension = 0; dimension < 2; dimension++)