Auteur Sujet: Questions OpenGLou !  (Lu 881 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Questions OpenGLou !
« le: 07 Décembre 2011 à 16:43:51 »
Yo !

Chuis sur le point de finir un projet important là et je rame comme un dingue sur la version Mac en GLSL... A cause des texture2DLod...
Alors bon, j'y comprends rien à cette merde. Sur certains Macs c'est pas supporté sauf si on rajoute un #extension mais alors c'est là où c'est funky, j'y comprends rien aux extensions GLSL... J'ai trouvé ça : http://www.opengl.org/registry/specs/ARB/shader_texture_lod.txt et http://www.khronos.org/registry/gles/extensions/EXT/EXT_shader_texture_lod.txt

Dans un cas ils disent qu'il faut utiliser #extension ARB_shader_texture_lod : require
Dans l'autre ils disent qu'il faut utiliser #extension EXT_shader_texture_lod : enable

What The FUCK ???

Require ? Enable ? ARB ? EXT ? OpenGL.org ? Khronos.org (c'est qui ces cons ?) ? Faut mettre ':' pour séparer ou pas ? Faut que je fasse quoi ? Je mets toutes les combinaisons histoire d'être certain que ça marche ???

Bref. Désolé mais je déteste de + en + OpenGL quand je vois ça... Surtout que ce putain de texture2DLod qui, soit disant, ne fonctionne pas sur un Mac je sais qu'il fonctionne ! C'est une GeForce320M, la même que dans mon PC et tex2Dlod (HLSL) fonctionne très bien chez moi !

Rhaaaaa ! Help !! Please ! J'en peux plus de ces cas particuliers de merde !! C'est le dernier obstacle pour que je puisse finir ce putain de projet... J'en ai marre...


A noter que j'ai trouvé une gruge pour pas avoir à utiliser texture2Dlod c'est d'utiliser texture2Dgrad( sampler, uv.xy, vec2(1,0), vec2(0,1) ) donc j'ai une "solution" mais mon framerate est passé de 100FPS à 2... Oui, vous avez bien lu : 2 FPS ! Inutile de dire que j'aimerais bien trouver une solution qui utilise 2DLod... C'est obligé que ça marche ce truc ! C'pas possible putain...
.  Pom  .

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Questions OpenGLou !
« Réponse #1 le: 07 Décembre 2011 à 17:06:36 »
Ah oui, j'ai oublié encore un truc super obscur : après avoir déclaré son besoin de l'extension tex2DLod, le type utilise en réalité "texture2DLodEXT" au lieu de "texture2DLod"...

Donc là ça me donne, pour résumer, ces possibilités-là :
  • #extension ARB_shader_texture_lod : require
  • #extension ARB_shader_texture_lod : enable
  • #extension EXT_shader_texture_lod : require
  • #extension EXT_shader_texture_lod : enable
  • utiliser texture2DLod
  • utiliser texture2DLodEXT

Soit 64 combinaisons possibles... J'ai envie de dire... Pitié !!
.  Pom  .

Hors ligne MsK`

    • Pouet.net
    • Voir le profil
  • Rôle: Code
  • Ville: Paris/RP
Re : Questions OpenGLou !
« Réponse #2 le: 07 Décembre 2011 à 17:35:46 »
Khronos : les mecs qui spécificient les specs opengl
opengl : une API sympa mais relou
EXT : extension proposée, pas encore validée
ARB : extension validée par khronos

J'ai envie de dire :
#extension ARB_shader_texture_lod : require
#extension EXT_shader_texture_lod : enable
#define texture2DLod texture2DLodEXT

mais il faudrait un genre de #ifextension

T'as précisé un #version ? ça pourrait corriger tes problèmes. Après, le support d'opengl sous mac, c'est plutôt limité... Y'a OpenGL 3.2 depuis Lion, c'est déjà pas mal...

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Questions OpenGLou !
« Réponse #3 le: 07 Décembre 2011 à 17:57:25 »
Bon merci pour ces précisions. En fait je viens de regarder la gueule des shaders compilés par Cg dans Unity (oui, je fais un projet Unity) et la syntaxe qu'il utilise c'est :
#extension GL_ARB_shader_texture_lod : enable

et derrière il utilise texture2DLod tout simplement... Donc je vais faire pareil... Purée qu'est-ce que c'est relouuuuu ! :-[
.  Pom  .

Hors ligne LittleWhite

Re : Questions OpenGLou !
« Réponse #4 le: 07 Décembre 2011 à 20:22:45 »
Le site de Khronos parle de OpenGL ES alors que le site OpenGL.org ne parle que d'OpenGL. Il faut bien faire attention à cela :)
(Indice: OpenGL ES, c'est l'OpenGL pour les systèmes embarquées (iPhone / Android))


Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Questions OpenGLou !
« Réponse #5 le: 07 Décembre 2011 à 21:55:25 »
Ok merci... 'ffectivement y a des refs à GLES partout...
Bon sinon j'ai essayé avec #extension GL_ARB_shader_texture_lod : enable et texture2DLod mais ça marche pas... Ce qui me soûle c'est que le shader affiche aucune erreur à la compil. Juste au runtime il sample du garbage dans la texture => écran noir. Et puis évidemment, pour débugger je dois envoyer un exe à un pote qui a un Mac où ça merde mais qui se connecte tous les 10 ans... Bref, hyper pratique.

Comment on peut bosser avec un truc qui peut ou non foirer au runtime, selon le bon vouloir du constructeur de carte, sérieux ça me dépasse. Et après on me demande encore pourquoi je préfère DirectX à OpenGL... >:(
.  Pom  .

Hors ligne MsK`

    • Pouet.net
    • Voir le profil
  • Rôle: Code
  • Ville: Paris/RP
Re : Questions OpenGLou !
« Réponse #6 le: 07 Décembre 2011 à 21:58:10 »
bah sinon tu peux aussi installer mac os x dans une VM, les mac sont des PCs maintenant hein :)

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Questions OpenGLou !
« Réponse #7 le: 07 Décembre 2011 à 23:13:12 »
bah sinon tu peux aussi installer mac os x dans une VM, les mac sont des PCs maintenant hein :)

Heuuu... Sérieux c'est possible ça ? Parce que ça me sauverait bien la vie... Je vais regarder ça de suite.
.  Pom  .

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Questions OpenGLou !
« Réponse #8 le: 07 Décembre 2011 à 23:38:40 »
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
.  Pom  .

Hors ligne MsK`

    • Pouet.net
    • Voir le profil
  • Rôle: Code
  • Ville: Paris/RP
Re : Questions OpenGLou !
« Réponse #9 le: 07 Décembre 2011 à 23:59:30 »
Un PC neuf pour être sur de rien paumer... hein ?! Je fais tourner ubuntu dans virtual box, la distri est installée sur un disque dur virtuel contenu dans un simple fichier, je vois pas de quoi tu parles ! Et j'ai même pas un CPU qui supporte la virtualisation !

http://www.cachem.fr/virtualbox-mac-os-x-sur-votre-pc-windows/


Et y'a du réseau !
« Modifié: 08 Décembre 2011 à 00:06:36 par MsK` »

Hors ligne ellis2323

    • Voir le profil
  • Ville: Paris
Re : Questions OpenGLou !
« Réponse #10 le: 08 Décembre 2011 à 00:00:47 »
Salut,

Je viens de matter la doc de GL_ARB_shader_texture_lod issue du programme glView sur mon mac équipé d'une ati 6750.

Additions to version 1.10.59 of the OpenGL Shading Language Specification

    "A new preprocessor #define is added to the OpenGL Shading Language:

        #define GL_ARB_shader_texture_lod 1

    Including the following line in a shader can be used to control the
    language features described in this extension:

        #extension GL_ARB_shader_texture_lod : <behavior>

    Where <behavior> is as specified in section 3.3."

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 #11 le: 08 Décembre 2011 à 00:10:05 »
Malheureusement tu es à la merci de l'union de toutes les merdes que l'ensemble (drivers x cartes) ont eu un jour :(

Maintenant pour essayer de t'aider dans la Patastrophe : mon expérience avec texture2DLod est que ca peut faire gagner en compat de l'éviter.

- cas n°1, ta passe utilise le niveau N partout:
  Tu peux forcer le LOD côté texture avec GL_TEXTURE_BASE_LEVEL et GL_TEXTURE_MAX_LEVEL
  Tu peux forcer le LOG côté sampler avec GL_TEXTURE_MIN_LOD et GL_TEXTURE_MAX_LOD.
  En OpenGL avant le sampler objects c'est pas séparé mais ça existe bel et bien dans les drivers :(
  (Si tu sette un de ces paramètres, essaie de vérifier derrière qu'il est bien setté en gettant la valeur.)
  L'une des deux manières est plus compatible, je sais plus laquelle :( et ca fait pas la meme chose.

- cas n°2, ta passe a vraiment besoin de sampler n'importe quel LOD :
  Le LOD samplé par glTexture tout court est obtenable avec fwidth(coordonnée de textures).
  A partir de là, tu te sers du bias avec un truc comme texture2D(coord, -log2(fwidth(coord))) pour avoir le level 0. (est-ce que ca marche ce truc ?)

- cas n°3, si c'est pour un post-process qui sample un buffer réduit 2^N fois, alors que tu parcoure un buffer fullscreen
  Eh ben tu sais que texture2D va sampler le niveau -N, tu rajoute ce qu'il faut en bias.
  Ca je suis sur que ça marche mais bon faut que ça s'applique dans ton cas.

(EDIT: du coup si c'est texture dependent read rien de tout ça ne marche)

« Modifié: 08 Décembre 2011 à 00:46:13 par ponce »

Hors ligne Elrick

    • Voir le profil
  • Groupe: SFX
  • Rôle: Code / GFX
  • Ville: Lyon
Re : Re : Questions OpenGLou !
« Réponse #12 le: 08 Décembre 2011 à 15:32:07 »
Heuuu... Sérieux c'est possible ça ? Parce que ça me sauverait bien la vie... Je vais regarder ça de suite.

tain t'abuse !! je te l'ai proposé il y a 15 jours ...

Hors ligne Patapom

    • Voir le profil
    • www.patapom.com
  • Ancienneté: 1988
  • Groupe: Bomb!
  • Rôle: Coder
  • Ville: Lyon
Re : Re : Questions OpenGLou !
« Réponse #13 le: 08 Décembre 2011 à 16:43:35 »
        #define GL_ARB_shader_texture_lod 1
Ok merci je vais rajouter ça pour voir, mais j'ai peu d'espoir (par contre, beaucoup d'espomme !).

Malheureusement tu es à la merci de l'union de toutes les merdes que l'ensemble (drivers x cartes) ont eu un jour :(

Maintenant pour essayer de t'aider dans la Patastrophe : mon expérience avec texture2DLod est que ca peut faire gagner en compat de l'éviter.

- cas n°1, ta passe utilise le niveau N partout:
  Tu peux forcer le LOD côté texture avec GL_TEXTURE_BASE_LEVEL et GL_TEXTURE_MAX_LEVEL
  Tu peux forcer le LOG côté sampler avec GL_TEXTURE_MIN_LOD et GL_TEXTURE_MAX_LOD.
  En OpenGL avant le sampler objects c'est pas séparé mais ça existe bel et bien dans les drivers :(
  (Si tu sette un de ces paramètres, essaie de vérifier derrière qu'il est bien setté en gettant la valeur.)
  L'une des deux manières est plus compatible, je sais plus laquelle :( et ca fait pas la meme chose.
Effectivement, j'utilise le niveau 0 partout, en gros je veux juste qu'il arrête de me péter les burnes avec les mipmaps...
Malheureusement, je suis sous Unity et t'as pas accès à GL_TEXTURE_XXXX... C'est unity qui configure les textures et les samplers et je peux rien y faire.

- cas n°2, ta passe a vraiment besoin de sampler n'importe quel LOD :
  Le LOD samplé par glTexture tout court est obtenable avec fwidth(coordonnée de textures).
  A partir de là, tu te sers du bias avec un truc comme texture2D(coord, -log2(fwidth(coord))) pour avoir le level 0. (est-ce que ca marche ce truc ?)
C'est quoi cette syntaxe "texture2D()" ?? Je comprends pas trop ce que tu veux dire là... 'fin le truc c'est que je peux pas utiliser autre chose que texXXXLOD vu que je suis dans une loop et que je peux absolument pas sortir les appels de texture ! Le nombre de steps dans la boucle est pas connu à l'avance bien sûr, ça serait trop simple...

- cas n°3, si c'est pour un post-process qui sample un buffer réduit 2^N fois, alors que tu parcoure un buffer fullscreen
  Eh ben tu sais que texture2D va sampler le niveau -N, tu rajoute ce qu'il faut en bias.
  Ca je suis sur que ça marche mais bon faut que ça s'applique dans ton cas.

(EDIT: du coup si c'est texture dependent read rien de tout ça ne marche)
Texture-dependent read ? Kézako ?

Bon merci pour ces précisions, en fait je crois que je suis bien baisé... Après 4 mois de dev' je vais me faire rejeter mon projet à cause de ça. Chuis super content...
.  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 #14 le: 08 Décembre 2011 à 19:06:42 »
Ah ok ils ont renommé la fonction.

je voulais parler de
gvec4 texture(gsampler2D sampler, vec2 P [, float bias])

Si tu veux que le niveau 0 ben tu essayer de mettre -100.0 en bias.
« Modifié: 08 Décembre 2011 à 19:09:15 par ponce »

 

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 ?: