#1 

04-05-2008 06:09:56

Ikam
Membres
Date d'inscription:
Messages: 56
IP: 82.232.229.5
Courriel  Site web

tu utilises bien la version svn ?

essaye avec ce bout de code, ya pas grand chose a faire faut juste activer les vbo avec setHardwareMappingHint(scene::EHM_STATIC) pour le meshbuffer souhaité.

scene::IAnimatedMesh* node = smgr->addTerrainMesh("t1",
driver->createImageFromFile("Media/color.jpg"),
driver->createImageFromFile("Media/map.jpg"),
core::dimension2df(10.0f,10.0f), 300.0f);


scene::IMesh * mesh = node->getMesh(0);
for(u16 a=0; a<mesh->getMeshBufferCount(); a++)
{
mesh->getMeshBuffer(a)->setHardwareMappingHint(scene::EHM_STATIC);
}

scene::ISceneNode * n1 = smgr->addAnimatedMeshSceneNode(node);

video::ITexture * detailMap = driver->getTexture("Media/detail.jpg");
n1->setMaterialFlag(video::EMF_LIGHTING, false);
n1->setMaterialTexture(1, detailMap);
n1->setMaterialType(video::EMT_DETAIL_MAP);


Hors ligne


#2 

04-05-2008 06:28:26

Ikam
Membres
Date d'inscription:
Messages: 56
IP: 82.232.229.5
Courriel  Site web

concernant le bug qui fait crasher la demo, j'ai posté un message sur ce sujet sur le forum officiel. Il en est retourné que le probleme viens de la fonction qui consiste à mettre a jour les buffers et les supprimer si ceux-ci n'ont pas été utilisés depuis plusieurs frames.

Le bug viens du fait que l'iterateur qui parcours l'arbre où sont stocké les buffers est cassé quand on supprime un element, alors qu'on parcours l'arbre.

Un membre a proposé une solution qui reset l'iterateur a chaque delete de buffer, ainsi l'iteration se stoppe quand y'a plus de buffer à supprimer, mais c'est pas tres optimisé puisque ca re-parcours l'arbre a chaque fois. J'ai proposé la solution suivante qui me semble plus efficace pour corrigé le probleme :

//! Update all hardware buffers, remove unused ones
void CNullDriver::updateAllHardwareBuffers()
{
core::map<const scene::IMeshBuffer*,SHWBufferLink*>::ParentFirstIterator Iterator=HWBufferMap.getParentFirstIterator();

irr::core::list<SHWBufferLink*> LinkList;

for (;!Iterator.atEnd();Iterator++)
{
SHWBufferLink *Link=Iterator.getNode()->getValue();

Link->LastUsed++;
if (Link->LastUsed>200000)
{
LinkList.push_back(Link);
//deleteHardwareBuffer(Link);
}
}

// if there is some buffers to delete
if(!LinkList.empty())
{
// delete all buffer in list
irr::core::list<SHWBufferLink*>::Iterator it = LinkList.begin();
for (; it != LinkList.end(); ++it)
{
deleteHardwareBuffer((*it));
}
}
}

ps : quoiqu'il en soit les vbo sont toujours en phase de dev et de mise au point avant leur sortie officiel, donc tout ca risque peut etre de changer un peu et n'est valable que pour le moment pour patienter :p


Hors ligne


#3 

04-05-2008 06:46:16

Copland
Modérateurs
Date d'inscription:
Messages: 657
IP: 90.45.212.221
Courriel  Site web

Ca n'empêche que j'aimerai également voir et tester avec le code de ta démo car chez moi ça ne fonctionne toujours pas, comme marco à parament, et j'arrive vraiment pas à comprendre pourquoi :s.
J'ai même testé sur des démos d'irrlicht et ça change vraiment que dale.
Il n'y a pour l'instant que sur ta démo que j'ai vu une différence...A par le crash qui arrivait au bout de 2/3 minutes, lui je l'ai bien vu lol.

EDIT :
Voici mes résultats sur ta démo sur mon portable Core2Duo 1.67Ghz 3Go de ram et GeForce 8600M GS :
OpenGL Sans VBO = 226 Fps
OpenGL Avec VBO = 477 Fps
DirectX9 Sans VBO = 430 Fps


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#4 

04-05-2008 10:31:01

Ikam
Membres
Date d'inscription:
Messages: 56
IP: 82.232.229.5
Courriel  Site web

voici les sources:

sources demo

C'est bizarre que tu n'arrive pas a les faire fonctionner Copland puisque j'utilise ta classe de terrain pour la demo.

ps : la dll founi avec les sources est recompilé sans le bug de crash :p


Hors ligne


#5 

04-05-2008 16:29:54

Copland
Modérateurs
Date d'inscription:
Messages: 657
IP: 90.45.212.221
Courriel  Site web

Okay bein ça marche pas, je vois plus qu'une seule différence, c'est le compileur, à première vue tu utilises celui de VC++ et moi j'utilise GCC, mais si c'est ça, c'est carrément bizarre ou alors il y a quelque chose qui m'échape.
En tout cas merci pour la source ça m'a au moins permis de voir que ça déconnait pas dans mon code (ouf) smile.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#6 

04-05-2008 16:59:35

Copland
Modérateurs
Date d'inscription:
Messages: 657
IP: 90.45.212.221
Courriel  Site web

Ok alors après une petite demi heure de test, voici mes constatations :
Irrlicht GCC avec ou sans VBO aucune différence mais 90 Fps de moyenne sur ma Scene.
Irrlicht VC++ Sans VBO 57 Fps
Irrlicht VC++ Avec VBO 90 Fps
Les vbo seraient-ils activés par défaut sur irrlicht en compilation GCC ? Ce qui expliquerai le fait que je ne vois aucune différence sur mon jeu.
Honêtement je suis déçu des performances, je m'attendais à bien mieux, irrlicht reste quand même très lent en rendu c'est dommage.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#7 

04-05-2008 18:01:45

Ikam
Membres
Date d'inscription:
Messages: 56
IP: 82.232.229.5
Courriel  Site web

mmm c'est bizarre

T'as essayé de desactiver les vbo en mettant setHardwareMappingHint(scene::EHM_NEVER); et de compiler sous gcc ? pour voir si ca donne la meme chose qu'avec EHM_STATIC. Si c'est le ca c'est que les vbo ne sont pas actifs.

Je ne vois pas trop le rapport entre le compilateur et les vbo.


Hors ligne


#8 

07-05-2008 09:28:14

Magun
Administrateurs
Avatar de Magun
Date d'inscription:
Messages: 910
IP: 77.206.26.173
Courriel  Site web

ben moi avec mon matos pouris j'ai :

avec l'ati 9200 se :

gl sans 20 ( no texture )
gl avec 30 ( no texture aussi :s )
dx 112

et ma geforce 4 mx 4000 :

gl sans 44
gl avec 90
dx 67 ( si je regarde pas le terrain il ne se raffiche pas XD )

edit : je sais pas comment sa se fait cher moi d'habitude sous opengl sa plante sur le pc avec l'ati donc sa peut venir de la les textures menfin ...

Hors ligne


#9 

28-05-2008 07:48:43

wizad
Membres
Avatar de wizad
Date d'inscription:
Messages: 106
IP: 82.229.59.8
Courriel

Salut tout le monde?

Alors on en est ou avec ses fameux vbo?

pour ma part j'ai changé de carte graphique (8800 GT DDR3 512Mo) et le vbo me font passé de 500fps environ à... 3000FPS (non y a pas de zéro en trop)


Hors ligne


#10 

23-06-2008 12:03:50

Tuftux
Membres
Date d'inscription:
Messages: 3
IP: 83.198.213.167
Courriel

Ooooh yeah !
Ca passe on ne peut mieu sur ma ATI HD3850. Je passe en moyenne de 300 a 2100 FPS (OGL) big_smile


Hors ligne


#11 

23-06-2008 19:11:56

wizad
Membres
Avatar de wizad
Date d'inscription:
Messages: 106
IP: 90.62.228.224
Courriel

Y a vraiment un truc bizarre vu les différence entre les cartes...
Peut être des spécificité à ce niveau (mémoire embarqué/partagé, chipset,...)


Hors ligne


#12 

23-06-2008 20:08:16

WarShattrith
Membres
Date d'inscription:
Messages: 10
IP: 83.194.221.84
Courriel

Je pense surtout que les VBOs ne sont pas actif sur DirectX et donc ne font forcément aucun changement...


Config : Intel Core 2 Quad Q6600 @ 2.7 GHz | 2Go de RAM DDR2 | GeForce 7600GT | Asus P5K
Chef de projet/Développeur principal Ouverta

Hors ligne


#13 

08-09-2008 12:48:13

marco565
Membres
Date d'inscription:
Messages: 25
IP: 82.255.176.178
Courriel

je viens de recompiler les sources avec code blocks et vc 2005 sa a l'ai de fonctionner, et il ny a pa d'écart de fps entre les 2 compilateurs je vais faire dotres tests


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