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. |