Bonjour,
Voila, ça fait quelques jours que j'essaye de faire quelque chose avec les Shader mais j'ai quelques problèmes. En effet, mon image devient blanche, au lieu de passer en noir et blanc.
Voici mon fichier "noirblanc.sfx":
uniform sampler2D texture;
void main()
{
// On récupère la valeur du pixel courant de l'écran
vec4 pixel = gl_Color;
// On calcule son niveau de gris
float gray = pixel.r * 0.39 + pixel.g * 0.50 + pixel.b * 0.11;
// On écrit enfin le pixel final, en utilisant 50% du pixel de l'écran et 50% de sa version colorée
gl_FragColor = vec4(gray,gray,gray,pixel.a);
}
Voici le code C++:
sf::Shader sh;
sh.loadFromFile("noirblanc.sfx", sf::Shader::Fragment);
sh.setParameter("texture", sf::Shader::CurrentTexture);
sf::RenderStates r;
r.shader = &sh;
J'obtient l'erreur suivante: "Texture "texture" not found in shader"
Qu'est-ce que je dois faire pour que ça fonctionne? Comment récupérer le pixel courant de l'image?
Merci d'avance!
C'est fait, je cherchais justement un moyen de faire ce que je voulais, j'ai regarder le code d'exemple, mais il n'y avais aucun code GLSL.
Je disais ça juste pour le fait que ce soit maintenant du GLSL pur. Je ne sous-entendais pas qu'il y avait un exemple de code dans la doc.
Oui, merci j'avais compris, mais comment?
Merci de me prendre pour un imbécile, mais ce que j'ai demander c'est pourquoi, donc son fonctionnement.
Désolé, je ne voulais pas te prendre pour un imbécile. Je voulais être sûr que tu avais bien lu la documentation, les exemples, etc. avant de venir poser tes questions -- c'est ce que je fais à chaque fois (c'est pour être sûr que la doc est bien faite, et si ce n'est pas le cas, trouver ce qui manque).
Mais en l'occurence la doc indique aussi que les shaders étant écrits en GLSL, la doc de SFML n'a pas vocation à l'apprendre et qu'il faut regarder les tutoriels dédiés à ce langage pour avancer dans l'écriture de shaders. Si tu ne regardes que la doc SFML tu n'arriveras pas à faire grand chose dans tes shaders, ça c'est clair :)
là par exemple, je n'ai pas envoyer mon image en paramètre à mon shader. Pourtant le code fonctionne. Comment est-ce que le code sais que texture est cette image là? Si j'avais deux uniform sampler2D, chacun ayant différentes images, comment le code peu savoir lequel est lequel?
Là :
sh.setParameter("texture", sf::Shader::CurrentTexture);
tu dis explicitement au shader que la variable "texture" contiendra la texture de l'objet que tu es en train de dessiner.
Sinon tu as dit que l'erreur est masquer, comment la corrige-t-on donc?
Et bien le code correct que tu nous as montré la corrige, non ?