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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| procedure TGraphics.CreerTextures;
{Objectif :Charger une texture en mémoire. Les chemins accédant aux textures
sont passés en paramètre.}
var
{Pointeur sur une structure PTAUX_RGBImageRec stockant les pixels de l'image}
// pTextures :PTAUX_RGBImageRec;
texture : PSDL_Surface;
{Variable contrôle pour créer les texture une à une}
i : Integer;
{Message d'erreurs pour les textures non-trouvée}
Msg_Erreur : string;
begin
{Récupérer le nombre de textures qui seront à générer}
SetLength(IDTexture, NB_TEXTURE );
{Génération de "x" nom pour la texture}
glDeleteTextures( NB_TEXTURE, @IDTexture[1] );
glGenTextures( NB_TEXTURE, @IDTexture[1] );
{Parcourir les chemins passés en paramètre}
for i := 1 to NB_TEXTURE do
begin
{Vérifier si le fichier existe}
if FileExists( TAB_CHEMIN_BITMAP[i] ) then
begin
{Charger la texture en mémoire}
texture := SDL_LoadBMP( PChar(TAB_CHEMIN_BITMAP[i]) );
{Si fichier bitmap chargé en mémoire alors créer la texture}
if Assigned( texture ) then
begin
{Charge la texture portant le ID "IDTexture" donc la i ième}
glBindTexture(GL_TEXTURE_2D, IDTexture[i]);
{Paramétrage d'application de la texture
Ici on prend GL_LINEAR du fait que l'application est
beaucoup plus net que GL_NEAREST. Fait le changement et
vous verrez...}
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST );
{Type de combinaison de la texture avec le tampon
chronomatique}
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
WriteLn( texture.format.BytesPerPixel,' ', texture.w,' ', texture.h);
// Renvoie les bons formats/largeur/hauteur (qui sont des puissances de 2)
{Définition de la texture 2D}
glTexImage2D( GL_TEXTURE_2D, 0, texture.format.BytesPerPixel,
texture.w, texture.h,
0, GL_RGB, GL_UNSIGNED_BYTE,
texture.pixels);
WriteLn(glIsTexture(IDTexture[i])); // Renvoie TRUE
SDL_FreeSurface(texture);
end
else
begin
{Avertir que la texture n'a pue être trouvé}
Msg_Erreur := 'Erreur au chargement de la texture "' +
TAB_CHEMIN_BITMAP[I] + '"';
MessageBox( 0, PChar(Msg_Erreur), 'Textures',
MB_OK And MB_ICONWARNING );
end;
end
else
begin
{Avertir que la texture n'a pue être trouvé}
Msg_Erreur := 'Texture : "' + TAB_CHEMIN_BITMAP[I] + '" n''a pas'
+ ' été trouvée';
MessageBox( 0, PChar(Msg_Erreur), 'Textures',
MB_OK And MB_ICONWARNING );
end;
end;
end; |