CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Fragment Shaders : non 'destructifs' ?

Pseudo supprimé
Pseudo supprimé 12 novembre 2007 à 21:17:07

J´ai écrit un petit programme GLSL qui a pour but de me faire du flou de mouvement sur une texture , mais j´ai la triste impression que le newbie des shaders que je suis a oublié quelque chose : en effet, le traitement semble toujours appliqué sur la même image et n´altère pas le contenu du Frame_Buffer_Object dans lequel j´effectue le rendu.

Quelqu´un aurait-il une idée ?
Merci :)

PS: En résumé, le programme c´est :
1] Choppage de la texture/1
2] Trifouiilages divers
3] Affectation du résulat à gl_color

En gros, ça fontionne, mais ça n´affcete pas le contenu du buffer (L´effet est appliqué mais oublié à chaque frame).

saleGauss
saleGauss
Niveau 9
13 novembre 2007 à 08:48:29

Je suis désolé, topic interessant, mais je ne connais pas opengl, j´utilise directX, et les pipelines sont relativement différents.
J´espere que JYY, LGV ou Godrik passera par là pour t´aider !

godrik
godrik
Niveau 30
13 novembre 2007 à 10:24:39

Mon dieu, des truc graphiques!!!! Je touche pas à ca moi! :)

Tu as des chances avec lapintade aussi.

gizmosup
gizmosup
Niveau 3
13 novembre 2007 à 12:00:32

Personne n´a encore répondu, c´est assez bizarre...

Je ne suis pas un expert dans le domaine (voir plutôt un débutant comme toi ;- ) et j´imagine que tu l´as déjà mais sait-on jamais (un oubli)

Donc, je me souviens qu´il fallait faire un swap du buffer pour que celui-ci prenne en compte les changements, la commande est SwapBuffers()

Je dit donc peut être une connerie, mais en attendant une autre réponse et si tu ne l´as pas déjà, teste ca...

En règle générale, la bible de l´apprentissage de l´OpenGL est NeHe (en Anglais par contre)
J´ai malgré tout jamais eu le courage de tout faire :-p

Pseudo supprimé
Pseudo supprimé 13 novembre 2007 à 12:25:57

@gizmosup:
"En règle générale, la bible de l´apprentissage de l´OpenGL est NeHe"
Et en effet, c´est grâce à lui que j´en suis à faire du shader language alors que ce n´est pas, mais alors pas du tout mon domaine :p
Très bon tutorial :)

Merci de ton conseil, mais non, ce n´est pas à ce niveau que se trouve le problème.

@godrik:
C´est bien pour ça que j´ai plutôt posté ici et que je fais des infidélités au forum programmation ^^

@saleGauss:
Je garde espoir ! Mais qui sait, peut-être que la mécanique est la même : si tu sais comment faire pour qu´un Shader modifie effectivement le rendu en DirectX, peut-être pourrais-je transposer ça en GLSL...

LGV
LGV
Niveau 28
13 novembre 2007 à 19:36:10

comment definis tu ton render target, comment passes tu la texture source au shader, et comment "appliques" tu l´effet (render to texture, avec un gros quad qui applique le shader, par ex.) ?

Pseudo supprimé
Pseudo supprimé 13 novembre 2007 à 21:03:04

Merci,
Oui, Render to texture (La bestiole en l´occurence est un FramebufferEXT que je lie avant de commencer le rendu), avec un gros GL_QUAD affiché dans un viewport qui va bien. A noter que bosser "A l´ancienne" dans le buffer fonctionne correctement : les choses que je trace dedans sont bien encore à la frame suivante et lors du binding du framebuffer à un objet pour l´afficher. Il n´y a que le shader qui refuse de modifier de façon permanente son contenu (Après, ce n´est peut-être tout simplement pas possible, va savoir). Pour le passage, c´est grâce à un "uniform sampler2D" et retourne mon résultat dans le "gl_FragColor" : Je constate bien l´effet du shader, mais il ne semble pas affecter l´image d´un tour sur l´autre (Un peu comme changer le contraste sur une télé, l´image change, mais ne modifie pas le signal d´origine).
J´ai essayé de lancer le programme de shading avant, après, au milieu du rendu dans le framebuffer, mais rien, nada, il applique l´effet, mais c´est juste comme si je mettais un filtre devant une image.

LGV
LGV
Niveau 28
13 novembre 2007 à 22:31:26

si tu "clear" ton render target a chaque frame, c´est normal, et c´est le resultat escompte : dans un cas simple, tu demarres une image depuis "rien", tu rends tes elements 3D (monde, persos, etc.), tes elements 2D (HUD, menus, etc.), et ensuite ton post-processing (ton shader via un gros quad sur tout le viewport (ou plus generalement, un ensemble de "layers" 2D/3D).
Et donc ton post-processing ne modifie que l´affichage, mais en aucun cas les elements qui interviennent "avant" dans la sequence de rendu.

Si tu veux que l´effet soit "cumulatif", tu peux simplement ne pas clearer ton render target ; si tu veux le faire a la main (ou si tu travailles avec plusieurs render target), recupere ton resultat final avec un "copyrect" ou un render to texture, et sert toi de cette texture pour demarrer l´image suivante (tu peux utiliser plusieurs textures de rendu pour par ex avec un objet net sur un fond auquel tu appliques un flou "cumulatif")

si ce ne correspond pas a ton probleme, on reprendra ton idee pour etre sur de bien comprendre d´ou vient le soucis.

Pseudo supprimé
Pseudo supprimé 13 novembre 2007 à 22:58:36

Justement, je ne le clear pas le bougre (D´ailleurs, je fais du tracé dedans et ça, il le garde bien d´une frame sur l´autre). J´ai fait un petit dessin :

http://img223.imageshack.us/img223/5224/situationdu3.jpg

Le truc que je n´arrive pas à faire, c´est ce que l´on voit : que le shader accumule le résultat de la frame précédente, par contre, les modifications qui ne sont pas faites par le shader sont bien rpises en compte (Je peux tracer toutes sortes de choses dans ma texture, elles restent).

LGV
LGV
Niveau 28
14 novembre 2007 à 01:30:57

as-tu essaye un render to texture, et copier le resultat dans ton framebuffer pour l´affichage ?

(autrement, conserver explicitement ton render target en allouant une ressource qui n´est pas le backbuffer principal ; la gestion de ce dernier est quelque peut particuliere, et l´application d´un shader peut ne se faire qu´au moment du raster final)

sinon, en pastant le code, p-e pourra-t-on voir d´ou vient le probleme.

Fvirtman
Fvirtman
Niveau 10
14 novembre 2007 à 09:59:48

(se cache derriere la tour de son PC)

Je suis assez inculte en pixel/vertex shader...
Quand j´ai quitté les études, les profs nous disaient "c´est encore nouveau, on ne connait pas bien", donc on n´a eu aucun cours dessus. Puis l´année s´est finie et le gérant de la boite ou j´ai fait mon stage a décidé de m´embaucher (ou je suis toujours) dans une boite ou on ne fait pas du tout de pixels/vertex shaders.

Il faudra donc que j´apprenne ça sur mon temps libre. Pour l´instant, je me suis surtout documenté sur la théorie du truc, mais hélas, je n´ai pas pris le temps d´aller plus loin, snif ! :snif:

kufa
kufa
Niveau 9
14 novembre 2007 à 13:29:47

hitman, aurais-tu un petit bout de code (setup+rendering) a nous mettre sous les dents?

Pseudo supprimé
Pseudo supprimé 14 novembre 2007 à 19:30:43

LGV :d) Maintenant, ça fonctionne... Presque... Il reste une traînée après le passage du shader et j´ai l´impression qui y a donc un problème de signe (Texture en GL_UNSIGNED_INT_8_8_8_8 et travaille du shader en float). Reste à trouver comment régler ça ;)

Fvirtman :d) Ben tu sais, à l´origine, j´ai une formation plus orientée informatique de gestion, J2EE et ses amis. Au final, je me retrouve à faire de l´informatique industrielle et faire de l´OpenGL alors que je ne l´ai jamais croisé au cours de ma formation :p Remarque, c´est positif, j´avais un projet de jeu en 3D, j´ai pu joindre l´utile à l´agréable ! En moins de 3 mois, je suis passé du statut "J´ai jamais fait d´openGL de ma vie" à "J´essaie de faire des petits shaders". A part un peut de Java3D qui était tout de même vachement limité pour mes besoins. JOGL, c´est puissant (Normal, c´est un mapping direct d´OpenGL). Mainteant, je peux me faire du Perlin Noise super facile.

kufa :d) Volontiers, mais ça sera du Java. Laisse moi un peu de temps pour mettre tout ça au propre : je suis en train d´écrire une micro API pour faciliter la création et la manipulation de shaders et de framebuffers (Le code d´initialisation est souvent lourd et répétitif). Ceci dit, le Java est juste un liant dans l´histoire : On voit surtout de l´OpenGL dans tous les sens...

kufa
kufa
Niveau 9
15 novembre 2007 à 11:07:02

okee dokee :) je demandais surtout des bouts de code + shader afin de pouvoir t aider! /me essaye de rester loin de java et ne plus y revenir :P

Pseudo supprimé
Pseudo supprimé 15 novembre 2007 à 12:22:46

Oh ^^ !
Merci ;p

Nan, mais franchement, Java a fait d´énormes progrés en termes de perfs depuis quelques années : une version non optimisée en Java de Quake 2 tourne à 85% de performances de la version originale.

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment