SFML community forums

Help => Graphics => Topic started by: tuckerlein on January 15, 2018, 05:56:00 am

Title: RenderTexture rendering corruption only on Samsung mobile devices
Post by: tuckerlein on January 15, 2018, 05:56:00 am
Hello,

Note SFML version I'm on is commit 013d053 (https://github.com/SFML/SFML/commit/013d053277c980946bc7761a2a088f1cbb788f8c), which is only a handful of commits behind master at the time of writing this. On this version because of a few key iOS features.

I'm seeing behavior that is causing absolute corruption of the window's rendering when on Samsung devices (any other mobile device renders as expected, including all desktops (Windows, Mac, and Linux) that I've tested it on). The problem only happens when I use a RenderTexture to render onto, and then finally render that RenderTexture to the window. Sometimes, the output simply appears flipped, other times it's completely broken. Here are a couple of examples:

(https://i.imgur.com/TQaoqiE.png) (https://i.imgur.com/I3eRWpF.png)

And here is the code used to render:
_renderTexture->clear(sf::Color(255, 255, 255, 0));

for (auto & camera : _cameras) {
    camera->Draw(*_renderTexture, delta);
}

_renderTexture->display();
_windowSprite->setTexture(_renderTexture->getTexture());
_window.setView(*_renderView);
sf::RenderStates states(sf::BlendNone);
_window.draw(*_windowSprite, states);

A few things to note:

It's also worth mentioning that I used to not do this and instead drew everything individually to the RenderWindow instead. This caused a weird visual problem when rendering textures that had setRepeating(true) called on them in certain scaled windows. At certain window scales you would see the repeating texture repeat 1 pixel too much and render where it shouldn't be rendering. You can see an example here: (note the thin green lines under the platforms, these lines are actually the top of the green ground being repeated in the Y direction)
(https://i.imgur.com/rjLst6h.png)

These textures do not have setSmooth(true) called on them, so the OpenGL clamping should prevent this. Rendering out to a RenderTexture like my code example above does indeed fix this problem (maybe some auto sampling done by SFML when rendering to a non ideal window size?).

I've currently reverted since having this repeating texture visual bug is a lot better than the Samsung RenderTexture problem. Does anyone have any ideas on how to potentially address this?
Title: Re: RenderTexture rendering corruption only on Samsung mobile devices
Post by: eXpl0it3r on January 15, 2018, 09:07:48 am
What do you mean specifically with "Samsung mobile devices"? Can we assume that this is running Android?
Title: Re: RenderTexture rendering corruption only on Samsung mobile devices
Post by: tuckerlein on January 15, 2018, 03:34:01 pm
Yes, I mean Android devices. Specifically I've seen it on Galaxy Note 5 and a Galaxy S6. Other Android devices such as Moto X4, Pixel 2, and Moto X Pure do not have this problem. iPhone also works as expected.