Bonjour !
J'essaie actuellement d'implémenter un shader de type "Glow/Blur".
Cependant j'ai besoin de faire deux passages dans mon shader avant d'afficher le résultat final (un flou horizontal puis un flou vertical). Dans cet optique j'utilise donc une sf::RenderTexture (qui fait la taille de l'objet sur lequel le shader va être appliqué). Cependant au lieu de m'afficher un cercle (la texture appliqué à mon sf::CircleShape est un cercle avec de la transparence autour), j'ai un joli carré
.
Je peux corriger ce problème directement dans le shader, mais j'aimerais comprendre si le problème vient de sf::RenderTexture ou de mon code.
En parlant de code ..
Voilà la fonction que j'utilise pour faire le premier passage
avec en membre de ma classe :
_ping -> un sf::RenderTexture
_internLight -> un sf::Shader
void GStarShip::precomputeShader(void)
{
sf::RenderStates states;
_ping.clear(sf::Color(0, 0, 0, 0));
_internLight.setParameter("vertical", 0);
states.shader = &_internLight;
_ping.draw(_intern, states);
_internLight.setParameter("vertical", 1);
}
Pour le deuxième passage (lors de l'affichage final de mon objet)
void GStarShip::draw(sf::RenderTarget &target,
sf::RenderStates states, Player *player) const
{
sf::Sprite pong;
pong.setTexture(_ping.getTexture()); // <-- Ici j'ai l'impression que _ping contient une texture qui ne gère pas la transparence... ??
pong.setOrigin(_ping.getTexture().getSize().x / 2.0, _ping.getTexture().getSize().y / 2.0);
pong.setPosition(player->getX(), player->getY());
states.shader = &_internLight;
target.draw(pong, states);
}
Pour préciser la chose, cela ne vient pas du code du shader (qui est fonctionnel et applique simplement un effet de dégradé pour le moment).
Merci d'avoir pris le temps de me lire.
Cordialement.