Bonjour/Bonsoir à tous,
Je travail actuellement sur un jeu du type Smash Bros sur Pc.
Actuellement je travail avec les bibliothèques suivantes :
- FMOD.
- SDL.
- OpenGl.
- DeVil.
- Freetype.
Je code en C++ sous codeBlock.
Etant assez maniaque sur l'utilisation mémoire, j'aimerais savoir si il était possible de faire une fonction pour charger les images ne laissant pas de mémoire de côté.
Explications:
Actuellement je travail comme ça :
Je charge puis traite les images à l'aide de DeVil, ensuite, je les "converti" en texture OpenGL.
Les problèmes :
- Un tout petit peu lent lorsqu'il y a 10 surfaces à convertir
- La RAM n'est pas entièrement libéré lors de la conversion.
Avant le changement de fond :
19964 Ko utilisé.
Apres le changement de fond :
21072 Ko (juste en reconvertissant la surface en texture, pas de déclaration)
On peut voir que la convertion utilise 1108Ko de plus (~1 Mo), ce qui n'est pas négligeable lorsque par la suite j'en ferrais plus de 20 (20 Mo en plus).
Actuellement la fonction pour convertir est :
En gros, j'aimerais savoir si il était possible de faire une fonction liberant entierement la mémoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 // prototypes GLuint chargerTexture(const char * filename, bool useMipMap = false); int main(int argc, char *argv[]) { GLuint IMG_fond = chargerTexture("../media/images/menus/connexion.jpg"); } /************************** * Charger * les textures **************************/ GLuint chargerTexture(const char * filename, bool useMipMap) { ILuint ilimage; GLuint id; ilGenImages(1,&ilimage); ilBindImage(ilimage); ilLoad(IL_TYPE_UNKNOWN ,(ILstring)filename); ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE); iluFlipImage(); glGenTextures(1,&id); glBindTexture(GL_TEXTURE_2D,id); if (useMipMap) { gluBuild2DMipmaps(GL_TEXTURE_2D, 4, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), GL_RGBA,GL_UNSIGNED_BYTE, ilGetData()); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); } else { glTexImage2D(GL_TEXTURE_2D, 0, 4, ilGetInteger(IL_IMAGE_WIDTH), ilGetInteger(IL_IMAGE_HEIGHT), 0, GL_RGBA,GL_UNSIGNED_BYTE, ilGetData()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); } glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); ilDeleteImages(1, &ilimage); return id; }
Merci à vous.
Hybrix.
Partager