J'ai commencé il y a quelques mois un projet OpenGL qui est devenu de plus en plus important ... J'ai commencé avec l'exemple crashLanding et j'utilise Texture2D.Est-ce correct de charger des textures openGL comme ça?
J'utilise aussi une classe singleton pour charger mes textures, et voici ce que la charge de la texture ressemble à:
//Load the background texture and configure it
_textures[kTexture_Background] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"fond.png"]];
glBindTexture(GL_TEXTURE_2D, [_textures[kTexture_Background] name]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// Load the textures
_textures[kTexture_Batiment] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"batiment_Ext.png"]];
_textures[kTexture_Balcon] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"balcon.png"]];
_textures[kTexture_Devanture] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"devanture.png"]];
_textures[kTexture_Cactus_Troncs] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"cactus-troncs.png"]];
_textures[kTexture_Cactus_Gauche] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"cactus1.png"]];
_textures[kTexture_Cactus_Droit] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"cactus2.png"]];
_textures[kTexture_Pierre] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"pierre.png"]];
_textures[kTexture_Enseigne] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"enseigne.png"]];
_textures[kTexture_Menu] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"saloonIntro.jpg"]];
_textures[kTexture_GameOver] = [[Texture2D alloc] initWithImage: [UIImage imageNamed:@"gameOver.jpg"]];
for (int i = 0 ; i < kNumTexturesScene ; i ++)
{
[arrayOfText addObject:[[[NSData alloc] init] autorelease]];
}
// sort my array
for (int i = 0 ; i < kNumTexturesScene ; i ++)
{
[arrayOfText replaceObjectAtIndex:i withObject:_textures[i]];
}
[dictionaryOfTexture setObject:[arrayOfText copy] forKey:kTextureDecor];
[arrayOfText removeAllObjects];
et ainsi de suite pour près de 50 photos
Il fonctionne bien sur le 3GS, mais il y a parfois des problèmes avec la 3G.
Ai-je tort avec tout cela?
Merci
Merci à vous deux, Rythmique Fistman et Kornel Kisielewicz. Oui, mes textures sont redimensionnées pour correspondre à 256x256 ou moins. Donc, en gros, avec un atlas de texture, je mets toutes mes images en une seule, et je charge ensuite cet énorme atlas (ou quelques unes si c'est trop grand). Ensuite, je vais créer un tableau qui contient les positions de chaque partie de cet atlas et réécrire une partie de ma méthode de dessin. Ai-je tort ? – ipodishima
@ipodishima - oui et non - vous le faites au maximum 1024x1024 donc vous le chargez toujours complètement dans la mémoire de texture. BTW, si vous appréciez Rhythmics et la mienne réponse, n'oubliez pas de les upvote - c'est ainsi que fonctionne SO :). –
Ouais j'ai maintenant assez de réputation pour voter! Ce qui m'énerve vraiment, c'est que cela fonctionne bien sur iPod Touch ou 3GS. J'ai également essayé d'utiliser shareGroup, mais cela ne fonctionne pas, l'affichage est comme un morceau de données d'un tampon graphique. Vraiment étrange. Je ne peux pas comprendre pourquoi. En fait, si je dois réécrire comment j'affiche mes images, peut-être devrais-je utiliser Cocos2D. De plus, mon code de rendu est d'environ 2000 lignes et c'est mon premier projet OpenGL (c'était censé être très simple mais j'ai dû ajouter de plus en plus de niveaux ...) – ipodishima