Bonsoir
Cette proposition par du constat suivant:
sf::Shader limite pour l'instant le passage de paramètres (pour les samplers) aux textures 2D RGBA 8bits, via la classe sf::Texture.
L'idée que j'ai eu est d’insérer une classe abstraite entre sf::Texture et sf::Shader.
Le but du jeu est que sf::Shader ait à disposition une classe sur laquelle il sait faire l'opération qu'il l’intéresse: bind().
Ensuite l'utilisateur expérimenté peut hériter de cette classe et ainsi passer ces Textures (textures 1D, 2D, 3D, RGBA, RGB, LUMINANCE, 8bit, 32bit, ou même float) en arguments via sf::Shader.
Il ne s'agit pas là de fournir d'autres classes que sf::Texture mais de rendre compatible sf::Shader avec des tous les paramètres passables aux shaders.J'ai prototypé et testé cette classe elle est disponible ici:
https://github.com/lamogui/SFMLLiens pour voir les modifs:
https://github.com/SFML/SFML/pull/788Il y a aucuns changement majeur de sf::Texture qui continue de fonctionner de la même manière qu'auparavant, elle se contente juste d'hériter de la classe abstraite et d’implémenter la méthode bind.
Pour la petite histoire j'ai été amené à créer cette classe car je souhaitais faire du rendu de spectre audio (texture1D luminance) via un fragment shader.
Une autre idée pourrait être de simplement rendre protected les attributs m_textures et m_shaderProgram, ainsi on pourrait hériter de la classe et ajouter nous même l’accesseur manquant. Mais cela me paraît assez sale.