#1 

10-01-2011 18:58:13

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.18.112
Courriel

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


#2 

13-01-2011 17:56:35

wabb
Membres
Avatar de wabb
Date d'inscription:
Messages: 68
IP: 82.145.209.25
Courriel  Site web

ok, merci pour l'aide.


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

Hors ligne


#3 

14-01-2011 17:52:48

mmorpglefilm
Membres
Avatar de mmorpglefilm
Date d'inscription:
Messages: 162
IP: 109.8.21.83
Courriel  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


#4 

14-01-2011 18:04:01

tmyke
Administrateurs
Avatar de tmyke
Date d'inscription:
Messages: 1025
IP: 90.56.18.112
Courriel

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


#5 

14-01-2011 18:48:50

mmorpglefilm
Membres
Avatar de mmorpglefilm
Date d'inscription:
Messages: 162
IP: 109.8.21.83
Courriel  Site web

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
167 invités en ligne
membre en ligne: -
RSS Feed