mirror of
https://github.com/dpethes/rerogue.git
synced 2025-06-07 18:58:32 +02:00
model viewer: plug memleaks
This commit is contained in:
parent
82794422bd
commit
cbdbf0d127
@ -214,9 +214,17 @@ end;
|
||||
|
||||
|
||||
destructor TModel.Destroy;
|
||||
var
|
||||
t: TTriangleList;
|
||||
begin
|
||||
inherited Destroy;
|
||||
// _triangles.Free;
|
||||
for t in _triangles do
|
||||
t.Free;
|
||||
_triangles := nil;
|
||||
if _hmt_loaded then
|
||||
DeallocHmt(_hmt);
|
||||
_vertices.Free;
|
||||
_materials := nil;
|
||||
end;
|
||||
|
||||
procedure TModel.Load(hob, hmt: TMemoryStream);
|
||||
|
@ -45,7 +45,7 @@ var
|
||||
g_window: PSDL_Window;
|
||||
g_ogl_context: TSDL_GLContext;
|
||||
|
||||
g_rsdata: TRSDatFile;
|
||||
g_rs_files: TRsDatFileNodeList;
|
||||
g_filelist: TFileList;
|
||||
g_selected_file_idx: integer;
|
||||
g_model: TModel;
|
||||
@ -491,11 +491,9 @@ procedure LoadMeshFilelist;
|
||||
end;
|
||||
end;
|
||||
var
|
||||
rs_files: TRsDatFileNodeList;
|
||||
file_: TRsDatFileNode;
|
||||
begin
|
||||
rs_files := g_rsdata.GetStructure();
|
||||
for file_ in rs_files do begin
|
||||
for file_ in g_rs_files do begin
|
||||
AddFile('', @file_, nil);
|
||||
end;
|
||||
end;
|
||||
@ -519,6 +517,7 @@ end;
|
||||
|
||||
//******************************************************************************
|
||||
var
|
||||
rsdata: TRSDatFile;
|
||||
sec, frames: integer;
|
||||
event: TSDL_Event;
|
||||
done: boolean;
|
||||
@ -530,15 +529,12 @@ begin
|
||||
end;
|
||||
|
||||
writeln('loading data');
|
||||
g_rsdata := TRSDatFile.Create(RS_DATA_HDR, RS_DATA_DAT);
|
||||
g_rsdata.Parse();
|
||||
rsdata := TRSDatFile.Create(RS_DATA_HDR, RS_DATA_DAT);
|
||||
rsdata.Parse();
|
||||
g_rs_files := rsdata.GetStructure();
|
||||
g_filelist := TFileList.Create;
|
||||
LoadMeshFilelist();
|
||||
|
||||
g_model := nil;
|
||||
g_selected_file_idx := -1;
|
||||
g_model_loading_failed := false;
|
||||
|
||||
writeln('Init SDL...');
|
||||
SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER);
|
||||
WindowInit(SCR_W_INIT, SCR_H_INIT);
|
||||
@ -547,6 +543,9 @@ begin
|
||||
SetGLWindowSize(g_window^.w, g_window^.h);
|
||||
|
||||
InitView;
|
||||
g_model := nil;
|
||||
g_selected_file_idx := 0;
|
||||
LoadMesh(g_filelist[0]);
|
||||
|
||||
sec := SDL_GetTicks;
|
||||
frames := 0;
|
||||
@ -578,6 +577,7 @@ begin
|
||||
if g_model <> nil then
|
||||
g_model.Free;
|
||||
g_filelist.Free;
|
||||
g_rsdata.Free;
|
||||
g_rs_files.Free;
|
||||
rsdata.Free;
|
||||
end.
|
||||
|
||||
|
@ -36,7 +36,8 @@ type
|
||||
textures: array of THmtTexture;
|
||||
end;
|
||||
|
||||
function ParseHmtFile(f: TMemoryStream): THmtFile;
|
||||
function ParseHmtFile(f: TMemoryStream): THmtFile;
|
||||
procedure DeallocHmt(h: THmtFile);
|
||||
|
||||
//**************************************************************************************************
|
||||
implementation
|
||||
@ -167,5 +168,17 @@ begin
|
||||
result := hmt;
|
||||
end;
|
||||
|
||||
procedure DeallocHmt(h: THmtFile);
|
||||
var
|
||||
tex: THmtTexture;
|
||||
begin
|
||||
for tex in h.textures do begin
|
||||
freemem(tex.image.pixels);
|
||||
freemem(tex.image.samples);
|
||||
end;
|
||||
h.textures := nil;
|
||||
h.materials := nil;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
@ -217,9 +217,9 @@ begin
|
||||
result.Data := mem_data + entry.offset;
|
||||
|
||||
//if (result.offset mod 32) <> 0 then writeln('unaligned offset');
|
||||
writeln(stderr, format('name: %s size: %d dir: %s subsize: %d flags: %s',
|
||||
[result.Name, entry.length, BoolToStr(result.is_directory),
|
||||
entry.sub_entry_size, binStr(entry.type_flag, 16)]));
|
||||
//writeln(stderr, format('name: %s size: %d dir: %s subsize: %d flags: %s',
|
||||
// [result.Name, entry.length, BoolToStr(result.is_directory),
|
||||
// entry.sub_entry_size, binStr(entry.type_flag, 16)]));
|
||||
end;
|
||||
|
||||
procedure TRSDatFile.ReadSectionEntries(var section: TRsHdrSection; const mem_data: pbyte);
|
||||
|
Loading…
x
Reference in New Issue
Block a user