hedgewars/uTextures.pas
changeset 10647 90062f7a3103
parent 10634 35d059bd0932
child 11046 47a8c19ecb60
equal deleted inserted replaced
10646:0be6442946b1 10647:90062f7a3103
    25 function  NewTexture(width, height: Longword; buf: Pointer): PTexture;
    25 function  NewTexture(width, height: Longword; buf: Pointer): PTexture;
    26 procedure Surface2GrayScale(surf: PSDL_Surface);
    26 procedure Surface2GrayScale(surf: PSDL_Surface);
    27 function  Surface2Tex(surf: PSDL_Surface; enableClamp: boolean): PTexture;
    27 function  Surface2Tex(surf: PSDL_Surface; enableClamp: boolean): PTexture;
    28 procedure PrettifySurfaceAlpha(surf: PSDL_Surface; pixels: PLongwordArray);
    28 procedure PrettifySurfaceAlpha(surf: PSDL_Surface; pixels: PLongwordArray);
    29 procedure PrettifyAlpha2D(pixels: TLandArray; height, width: LongWord);
    29 procedure PrettifyAlpha2D(pixels: TLandArray; height, width: LongWord);
    30 procedure FreeTexture(tex: PTexture);
    30 procedure FreeAndNilTexture(var tex: PTexture);
    31 procedure FreeAndNilTexture(var tex: PTexture); inline;
       
    32 
    31 
    33 procedure initModule;
    32 procedure initModule;
    34 procedure freeModule;
    33 procedure freeModule;
    35 
    34 
    36 implementation
    35 implementation
   295 SetTextureParameters(enableClamp);
   294 SetTextureParameters(enableClamp);
   296 end;
   295 end;
   297 
   296 
   298 // deletes texture and frees the memory allocated for it.
   297 // deletes texture and frees the memory allocated for it.
   299 // if nil is passed nothing is done
   298 // if nil is passed nothing is done
   300 procedure FreeTexture(tex: PTexture);
   299 procedure FreeAndNilTexture(var tex: PTexture);
   301 begin
   300 begin
   302 if tex <> nil then
   301     if tex <> nil then
   303     begin
   302         begin
   304     if tex^.NextTexture <> nil then
   303         if tex^.NextTexture <> nil then
   305         tex^.NextTexture^.PrevTexture:= tex^.PrevTexture;
   304             tex^.NextTexture^.PrevTexture:= tex^.PrevTexture;
   306     if tex^.PrevTexture <> nil then
   305         if tex^.PrevTexture <> nil then
   307         tex^.PrevTexture^.NextTexture:= tex^.NextTexture
   306             tex^.PrevTexture^.NextTexture:= tex^.NextTexture
   308     else
   307         else
   309         TextureList:= tex^.NextTexture;
   308             TextureList:= tex^.NextTexture;
   310     glDeleteTextures(1, @tex^.id);
   309         glDeleteTextures(1, @tex^.id);
   311     Dispose(tex);
   310         Dispose(tex);
   312     end
   311         tex:= nil;
   313 end;
   312         end;
   314 
       
   315 procedure FreeAndNilTexture(var tex: PTexture); inline;
       
   316 begin
       
   317     FreeTexture(tex);
       
   318     tex:= nil
       
   319 end;
   313 end;
   320 
   314 
   321 procedure initModule;
   315 procedure initModule;
   322 begin
   316 begin
   323 TextureList:= nil;
   317 TextureList:= nil;
   324 end;
   318 end;
   325 
   319 
   326 procedure freeModule;
   320 procedure freeModule;
       
   321 var tex: PTexture;
   327 begin
   322 begin
   328 if TextureList <> nil then
   323 if TextureList <> nil then
   329     WriteToConsole('FIXME FIXME FIXME. App shutdown without full cleanup of texture list; read game0.log and please report this problem');
   324     WriteToConsole('FIXME FIXME FIXME. App shutdown without full cleanup of texture list; read game0.log and please report this problem');
   330     while TextureList <> nil do
   325     while TextureList <> nil do
   331         begin
   326         begin
   332         AddFileLog('Texture not freed: width='+inttostr(LongInt(TextureList^.w))+' height='+inttostr(LongInt(TextureList^.h))+' priority='+inttostr(round(TextureList^.priority*1000)));
   327         tex:= TextureList;
   333         FreeTexture(TextureList);
   328         AddFileLog('Texture not freed: width='+inttostr(LongInt(tex^.w))+' height='+inttostr(LongInt(tex^.h))+' priority='+inttostr(round(tex^.priority*1000)));
       
   329         FreeAndNilTexture(tex);
   334         end
   330         end
   335 end;
   331 end;
   336 
   332 
   337 end.
   333 end.