#0 

10-01-2011 19:58:13

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

comment perdre un temps fou pour pas grand chose.

Cherchant à transformer un shader de DirectX pour OpenGL (que je connais très peu il faut dire) employant 8 canaux
de textures, j'ai fini par comprendre qu'en fait Irrlicht me limitait à 4 canaux de textures avec le driver OpenGL, alors
que pourtant j'avais bien spécifié à Irrlicht que je souhaitais travailler sur 8 canaux max (chose qui se passe très bien avec DX9).

En cherchant, le forum officiel est venu conforter mes soupçons de bug sur la partie driver OGL.

Donc, si vous souhaiter monter au dessus de 4 canaux avec OGL, voici une partie de code à
modifier au niveau du code source du moteur:

pour les version 1.7.x

Code c++ :

diff -rupN irrlicht-1.7.x/source/Irrlicht/COpenGLExtensionHandler.cpp
@@ void COpenGLExtensionHandler::initExtens
    {...
        glGetIntegerv(GL_MAX_TEXTURE_UNITS, &num);
        MaxTextureUnits=static_cast<u8>(num);
+        glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &num);
+        if (MaxTextureUnits<static_cast<u8>(num))
+            MaxTextureUnits=static_cast<u8>(num);
    }
#endif
    glGetIntegerv(GL_MAX_LIGHTS, &num);


pour la version 1.8.0

Code c++ :

diff -rupN irrlicht-1.8.x/source/Irrlicht/COpenGLExtensionHandler.cpp
@@ void COpenGLExtensionHandler::initExtens
    {...
        glGetIntegerv(GL_MAX_TEXTURE_UNITS, &num);
        MaxSupportedTextures=static_cast<u8>(num);
+        glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &num);
+        if (MaxSupportedTextures<static_cast<u8>(num))
+            MaxSupportedTextures=static_cast<u8>(num);
    }
#endif
    glGetIntegerv(GL_MAX_LIGHTS, &num);


noubliez pas quand même de changer la valeur de #define _IRR_MATERIAL_MAX_TEXTURES_ 8

wink


Force et sagesse...

Hors ligne


#1 

13-01-2011 18:56:35

wabb
Membre
Date d'inscription: 30-04-2010
Messages: 68
Corrections: 1
Site web

ok, merci pour l'aide.


Projet: EVO_Conflict's Factor (http://titanworks-system.over-blog.fr/#)

Hors ligne


#2 

14-01-2011 18:52:48

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
Site web

Donc si je comprends bien, avec ce code on peut utiliser 8 textures sur un seul mesh avec le driver opengl ?

Si tu pouvais m’éclaircir un peu....parce que franchement je ne comprends pas très bien ton code tmyke.
En plus je n'ai jamais appris opengl, je trouve (personnellement) irrlicht beaucoup mieux pour ce que je fais.

Mais bon, merci quand même.

Hors ligne


#3 

14-01-2011 19:04:01

tmyke
Administrateur
Date d'inscription: 24-03-2008
Messages: 1025

OpenGL est une des API qui peut être employée par Irrlicht, au même titre que Direct3D par exemple.
Je me suis juste rendu compte qu'avec le couple Irrlicht/OpenGL, le scan hardware limitait
visiblement systématiquement à 4 canaux de texture. Le bout de code que je fournis (issue
du forum off) permet juste de corriger cela au niveau du code du moteur.


Force et sagesse...

Hors ligne


#4 

14-01-2011 19:48:50

mmorpglefilm
Abonné
Lieu: la galaxie UDFy-38135539
Date d'inscription: 18-05-2010
Messages: 162
Site web

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
24 invités en ligne
Aucun membre connecté
RSS Feed