2
0
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:
dpethes 2020-06-18 15:09:24 +02:00
parent 82794422bd
commit cbdbf0d127
4 changed files with 37 additions and 16 deletions

View File

@ -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);

View File

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

View File

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

View File

@ -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);