Auteur Sujet: Questions OpenGLou !  (Lu 881 fois)

0 Membres et 2 Invités sur ce sujet

Hors ligne nystep

    • Pouet.net
    • Voir le profil
    • lostgarden
  • Ancienneté: 1995
  • Rôle: code
  • Ville: Jyväskylä
Re : Re : Questions OpenGLou !
« Réponse #15 le: 08 Décembre 2011 à 23:01:07 »
Ah ouais non mais laisse tomber, faut limite un PC neuf pour être sûr de rien paumer... Pis rien ne me garantit que mon exe va bien foirer comme il faut pour que je puisse le débugger ensuite... Bonjour l'investissement de temps et d'argent pour un truc totalement incertain ! ;D

Mais alors, alors alors, pourquoi ne pas laisser faire les spécialistes ;) ;) ;D
Je veux dire, il y a plein de gens qui aimeraient taffer en freelance toussa  ::)
Je plaisante ;)

Pour ton souci: premier truc à vérifier: Quelle version de GLSL utilise-tu?
Spécifie la version au début de chacun de tes codes sources de shader.
Je pense que cela va résoudre pas mal de problèmes, puisque le GLSL change de manière substantielle de version en version et s'il n'y a pas de version je suppose que le compilo ne sait pas trop comment prendre le code source (c'est la toute première version 110 ou bien 330 -shader model 4- ? ou la 410? -shader model 5-).

Deuxième étape, DL le manuel correspondant depuis le site web opengl.org et s'y tenir en termes de spécification.

Troisième truc à vérifier, je suis un peut benêt et je suppose que tu le sais, mais normalement, le mipmapping et l'aniso marchent très bien tous seuls depuis un texture2D classique si tu paramétrise bien ton état d’échantillonnage de texture sous opengl2. En fait la fonction texture2DLod n'est à utiliser que si tu souhaites ajouter un bias ou programmer la sélection du niveau de mipmap. En appli normale, je dirais, n'y touches pas et laisse le compilo/driver gérer cela pour toi (je suppose que ça va faire du bien à la framerate aussi comme par hasard!). ;)

En pratique je fais comme ça pour initialiser une texture avec ou sans mipmapping/aniso..
int minificationFilter = convertFilteringMinToGl( sf );
int magnificationFilter = convertFilteringMagToGl( sf );
int wrappingMode = convertWrappingToGl( wm );

int maxAnisotropy = 16;
int aniso = anisotropy > maxAnisotropy ? maxAnisotropy : anisotropy;
if (aniso<1) aniso=1;

target = GL_TEXTURE_2D;

glGenTextures( 1, &textureId );
glBindTexture( target, textureId );
                glTexImage2D( .................. smousse .................. );
glTexParameteri( target, GL_TEXTURE_MIN_FILTER, minificationFilter );
glTexParameteri( target, GL_TEXTURE_MAG_FILTER, magnificationFilter );
if (aniso>1) glTexParameteri( target, GL_TEXTURE_MAX_ANISOTROPY_EXT, aniso );
glTexParameteri( target, GL_TEXTURE_WRAP_S, wrappingMode );
glTexParameteri( target, GL_TEXTURE_WRAP_T, wrappingMode );

                // et glGenerateMipmaps( target ); // le cas échéant.
"L'être humain met 2 ans a apprendre le langage mais toute une vie pour apprendre à se taire."

Hors ligne @lx

    • Pouet.net
    • Voir le profil
    • Code4k
  • Ancienneté: 1989
  • Groupe: FRequency
  • Rôle: code (+musique), web
  • Ville: Tokyo
Re : Questions OpenGLou !
« Réponse #16 le: 08 Décembre 2011 à 23:43:48 »
Tiens, aras de unity a eu un echange sur twitter a propos du tex2Dlod

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Re : Re : Questions OpenGLou !
« Réponse #17 le: 09 Décembre 2011 à 14:44:30 »
Mais alors, alors alors, pourquoi ne pas laisser faire les spécialistes ;) ;) ;D
Je veux dire, il y a plein de gens qui aimeraient taffer en freelance toussa  ::)
Je plaisante ;)

Pour ton souci: premier truc à vérifier: Quelle version de GLSL utilise-tu?
Spécifie la version au début de chacun de tes codes sources de shader.
Je pense que cela va résoudre pas mal de problèmes, puisque le GLSL change de manière substantielle de version en version et s'il n'y a pas de version je suppose que le compilo ne sait pas trop comment prendre le code source (c'est la toute première version 110 ou bien 330 -shader model 4- ? ou la 410? -shader model 5-).
Hum aucune idée... Je le répète : je fais un projet Unity et c'est du Cg, pas du GLSL. Le Cg sert de langage de base pour toutes les plateformes et est compilé à la fois en GLSL et en HLSL selon le cas (HLSL sur PC et GLSL sur Mac par exemple).
T'as bien un #pragma pour spécifier que tu veux les SM3 mais pas d'autre info sinon...

Deuxième étape, DL le manuel correspondant depuis le site web opengl.org et s'y tenir en termes de spécification.
Même combat : je sais pas quelle version utiliser...

Troisième truc à vérifier, je suis un peut benêt et je suppose que tu le sais, mais normalement, le mipmapping et l'aniso marchent très bien tous seuls depuis un texture2D classique si tu paramétrise bien ton état d’échantillonnage de texture sous opengl2. En fait la fonction texture2DLod n'est à utiliser que si tu souhaites ajouter un bias ou programmer la sélection du niveau de mipmap. En appli normale, je dirais, n'y touches pas et laisse le compilo/driver gérer cela pour toi (je suppose que ça va faire du bien à la framerate aussi comme par hasard!). ;)
Hum, je veux pas m'avancer mais ça sera a priori toujours plus rapide d'utiliser un tex2Dlod qu'un tex2D tout court, puisque la carte n'a pas besoin de calculer les gradients elle-même. Et dans le cas où tu veux juste relire des tables depuis des textures, ou une shadow map, bah il faut utiliser tex2Dlod avec le mip level 0 quoi qu'il arrive...

D'autre part, le problème principal vient du fait que je fais des tex2Dlod à l'intérieur de boucles et de conditions, donc les gradients sont indisponibles et donc on peut jamais utiliser tex2D. Alors je sais pas comment ça se fait que toi tu sembles y arriver mais c'est normalement physiquement impossible : la carte ne peut pas calculer les gradients de sampling dans des conditions ou dans des boucles dont le nombre de steps n'est pas figé !

Et pour finir, comme c'est un projet Unity je le répète, je n'ai pas les moyens de configurer les GL_TEXTURE_MIN_FILTER and so on... C'est Unity qui fait sa tambouille, toi tu fais que lui réclamer une texture en lui disant que tu veux qu'elle boucle ou clamp, qu'elle ait tel format, qu'elle utilise les mips maps ou non, je sais pas ce qu'il fait derrière en l'occurence...

.  Pom  .

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Questions OpenGLou !
« Réponse #18 le: 09 Décembre 2011 à 16:09:30 »
Déjà, un sampling "normal" risque fort d'aller plus vite que tex2Dlod, ensuite as-tu essayé le bias pour avoir le level 0 ?

Hors ligne nystep

    • Pouet.net
    • Voir le profil
    • lostgarden
  • Ancienneté: 1995
  • Rôle: code
  • Ville: Jyväskylä
Re : Questions OpenGLou !
« Réponse #19 le: 09 Décembre 2011 à 19:48:56 »
Ah, c'est du unity, désolé.. Je rends les armes.  :-[
"L'être humain met 2 ans a apprendre le langage mais toute une vie pour apprendre à se taire."

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Re : Questions OpenGLou !
« Réponse #20 le: 09 Décembre 2011 à 20:57:34 »
Déjà, un sampling "normal" risque fort d'aller plus vite que tex2Dlod, ensuite as-tu essayé le bias pour avoir le level 0 ?
Hum non ça m'étonnerait : comme je l'ai dit plus haut, la carte n'a pas besoin de calculer les gradients quand t'appelles tex2Dlod donc tu gagnes au contraire un max... De toute manière, depuis le début que je fais des shaders (HLSL) j'ai quasiment jamais utilisé tex2D, sauf quand il s'agit effectivement d'aller sampler une texture pour afficher son contenu à l'écran, mais dans tous les autres cas je lui fournis le lod (généralement 0) moi-même.

Et puis non, j'ai pas encore essayé avec le bias mais à mon avis ça fera la même chose : ça va fonctionner mais ça va ramer.

En fait mes problèmes ont "évolué" et se sont transformés car sur le Mac d'un autre pote, les shaders semblent compiler et le tex2Dlod est "bien" supporté sauf qu'il déplie toutes mes boucles pour n'exécuter le code interne qu'une seule fois au lieu de N fois, avec N le nombre de steps passés au shader... Je me retrouve avec des trucs tous plats alors que je devrais avoir du volume.
En gros, j'ai l'impression qu'il s'agit d'un mix de bug entre tex2D(lod) et les control flows que le Mac (pas tous, mais certains) arrive pas à gérer...

On m'a prêté un mac mini pour le week-end, je vais pouvoir tester plus avant. Mais je me vois déjà en train de ré-écrire un paquet de shaders avec des boucles fixes exprès pour Mac, ça me soûle d'avance ! (bon c'est moins pire que de tout ré-écrire mais après 4 mois de dev' j'ai juste envie de prendre des vacances là)
.  Pom  .

Hors ligne ponce

    • Pouet.net
    • Coup de coeur
    • Voir le profil
    • Games from mars
  • Ancienneté: 2009
  • Groupe: aucun
  • Rôle: code
Re : Questions OpenGLou !
« Réponse #21 le: 09 Décembre 2011 à 22:47:13 »
J'ai testé texture2D vs texture2DLod dans le blur de mon jeu ici, c'est passé de 102 FPS à 100 FPS sur un truc plutôt dominé par les draw-calls il est vrai. Donc tu as raison, après dans quelle mesure ça ralentit ?

texture2dGrad renvoie du noir ici.

Je me souviens de ce bug aussi :
Citer
Carte: ATi x700, ATI Radeon 9800
Driver: ?
Symptôme: pas de textureLod dans le fragment shader
Résolution: utiliser GL_MIN_LOD et GL_MAX_LOD, ou le LOD bias.
Ces cartes ne peuvent physiquement pas faire un texture2dLod dans le fragment shader et ça quelque soit le driver, donc faut faire gaffe si ton contrat les requiert.

Bref je dit ça aussi parce que textureLod est arrivé plus tard que le sampling normal en OpenGL et donc c'est + susceptible d'avoir des couilles dans la nature.


(c'est con je pensais que les mecs d'Unity s'étaient saignés pour nous éviter les merdes d'OpenGL & co).
« Modifié: 09 Décembre 2011 à 22:54:32 par ponce »

Hors ligne nystep

    • Pouet.net
    • Voir le profil
    • lostgarden
  • Ancienneté: 1995
  • Rôle: code
  • Ville: Jyväskylä
Re : Questions OpenGLou !
« Réponse #22 le: 10 Décembre 2011 à 06:01:52 »
Maintenant vu le prix d'une licence unity c'est peut être pas forcément ici que c'est le meilleur endroit afin de venir chercher le support technique... ;) Tu dois avoir du support par email au moins pour ce prix là non? C'est eux qui seront le mieux à même de répondre AMHA.. :)
"L'être humain met 2 ans a apprendre le langage mais toute une vie pour apprendre à se taire."

 

Dans la Réponse Rapide, vous pouvez utiliser du BBCode et des smileys comme sur un message normal, mais à partir d'une interface plus rapide d'accès.

Attention, il n'y a pas eu de réponse à ce sujet depuis au moins 30 jours.
À moins que vous ne soyez sûr de vouloir répondre, pensez éventuellement à créer un nouveau sujet.

Nom: E-mail:
Vérification:
Quel est la couleur du cheval rouge d'Henri IV ?: