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;
|
destructor TModel.Destroy;
|
||||||
|
var
|
||||||
|
t: TTriangleList;
|
||||||
begin
|
begin
|
||||||
inherited Destroy;
|
inherited Destroy;
|
||||||
// _triangles.Free;
|
for t in _triangles do
|
||||||
|
t.Free;
|
||||||
|
_triangles := nil;
|
||||||
|
if _hmt_loaded then
|
||||||
|
DeallocHmt(_hmt);
|
||||||
|
_vertices.Free;
|
||||||
|
_materials := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TModel.Load(hob, hmt: TMemoryStream);
|
procedure TModel.Load(hob, hmt: TMemoryStream);
|
||||||
|
@ -45,7 +45,7 @@ var
|
|||||||
g_window: PSDL_Window;
|
g_window: PSDL_Window;
|
||||||
g_ogl_context: TSDL_GLContext;
|
g_ogl_context: TSDL_GLContext;
|
||||||
|
|
||||||
g_rsdata: TRSDatFile;
|
g_rs_files: TRsDatFileNodeList;
|
||||||
g_filelist: TFileList;
|
g_filelist: TFileList;
|
||||||
g_selected_file_idx: integer;
|
g_selected_file_idx: integer;
|
||||||
g_model: TModel;
|
g_model: TModel;
|
||||||
@ -491,11 +491,9 @@ procedure LoadMeshFilelist;
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
var
|
var
|
||||||
rs_files: TRsDatFileNodeList;
|
|
||||||
file_: TRsDatFileNode;
|
file_: TRsDatFileNode;
|
||||||
begin
|
begin
|
||||||
rs_files := g_rsdata.GetStructure();
|
for file_ in g_rs_files do begin
|
||||||
for file_ in rs_files do begin
|
|
||||||
AddFile('', @file_, nil);
|
AddFile('', @file_, nil);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -519,6 +517,7 @@ end;
|
|||||||
|
|
||||||
//******************************************************************************
|
//******************************************************************************
|
||||||
var
|
var
|
||||||
|
rsdata: TRSDatFile;
|
||||||
sec, frames: integer;
|
sec, frames: integer;
|
||||||
event: TSDL_Event;
|
event: TSDL_Event;
|
||||||
done: boolean;
|
done: boolean;
|
||||||
@ -530,15 +529,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
writeln('loading data');
|
writeln('loading data');
|
||||||
g_rsdata := TRSDatFile.Create(RS_DATA_HDR, RS_DATA_DAT);
|
rsdata := TRSDatFile.Create(RS_DATA_HDR, RS_DATA_DAT);
|
||||||
g_rsdata.Parse();
|
rsdata.Parse();
|
||||||
|
g_rs_files := rsdata.GetStructure();
|
||||||
g_filelist := TFileList.Create;
|
g_filelist := TFileList.Create;
|
||||||
LoadMeshFilelist();
|
LoadMeshFilelist();
|
||||||
|
|
||||||
g_model := nil;
|
|
||||||
g_selected_file_idx := -1;
|
|
||||||
g_model_loading_failed := false;
|
|
||||||
|
|
||||||
writeln('Init SDL...');
|
writeln('Init SDL...');
|
||||||
SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER);
|
SDL_Init(SDL_INIT_VIDEO or SDL_INIT_TIMER);
|
||||||
WindowInit(SCR_W_INIT, SCR_H_INIT);
|
WindowInit(SCR_W_INIT, SCR_H_INIT);
|
||||||
@ -547,6 +543,9 @@ begin
|
|||||||
SetGLWindowSize(g_window^.w, g_window^.h);
|
SetGLWindowSize(g_window^.w, g_window^.h);
|
||||||
|
|
||||||
InitView;
|
InitView;
|
||||||
|
g_model := nil;
|
||||||
|
g_selected_file_idx := 0;
|
||||||
|
LoadMesh(g_filelist[0]);
|
||||||
|
|
||||||
sec := SDL_GetTicks;
|
sec := SDL_GetTicks;
|
||||||
frames := 0;
|
frames := 0;
|
||||||
@ -578,6 +577,7 @@ begin
|
|||||||
if g_model <> nil then
|
if g_model <> nil then
|
||||||
g_model.Free;
|
g_model.Free;
|
||||||
g_filelist.Free;
|
g_filelist.Free;
|
||||||
g_rsdata.Free;
|
g_rs_files.Free;
|
||||||
|
rsdata.Free;
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ type
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function ParseHmtFile(f: TMemoryStream): THmtFile;
|
function ParseHmtFile(f: TMemoryStream): THmtFile;
|
||||||
|
procedure DeallocHmt(h: THmtFile);
|
||||||
|
|
||||||
//**************************************************************************************************
|
//**************************************************************************************************
|
||||||
implementation
|
implementation
|
||||||
@ -167,5 +168,17 @@ begin
|
|||||||
result := hmt;
|
result := hmt;
|
||||||
end;
|
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.
|
end.
|
||||||
|
|
||||||
|
@ -217,9 +217,9 @@ begin
|
|||||||
result.Data := mem_data + entry.offset;
|
result.Data := mem_data + entry.offset;
|
||||||
|
|
||||||
//if (result.offset mod 32) <> 0 then writeln('unaligned offset');
|
//if (result.offset mod 32) <> 0 then writeln('unaligned offset');
|
||||||
writeln(stderr, format('name: %s size: %d dir: %s subsize: %d flags: %s',
|
//writeln(stderr, format('name: %s size: %d dir: %s subsize: %d flags: %s',
|
||||||
[result.Name, entry.length, BoolToStr(result.is_directory),
|
// [result.Name, entry.length, BoolToStr(result.is_directory),
|
||||||
entry.sub_entry_size, binStr(entry.type_flag, 16)]));
|
// entry.sub_entry_size, binStr(entry.type_flag, 16)]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TRSDatFile.ReadSectionEntries(var section: TRsHdrSection; const mem_data: pbyte);
|
procedure TRSDatFile.ReadSectionEntries(var section: TRsHdrSection; const mem_data: pbyte);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user