mirror of
https://github.com/dpethes/rerogue.git
synced 2025-06-07 18:58:32 +02:00
model viewer: use up/down arrows to switch between models
This commit is contained in:
parent
b739950c03
commit
252d93702a
@ -46,8 +46,8 @@ var
|
|||||||
|
|
||||||
g_rsdata: TRSDatFile;
|
g_rsdata: TRSDatFile;
|
||||||
g_filelist: TFileList;
|
g_filelist: TFileList;
|
||||||
|
g_selected_file_idx: integer;
|
||||||
g_model: TModel;
|
g_model: TModel;
|
||||||
g_model_name: string;
|
|
||||||
g_model_loading_failed: Boolean;
|
g_model_loading_failed: Boolean;
|
||||||
|
|
||||||
view: record
|
view: record
|
||||||
@ -243,6 +243,35 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
//Beware, not all models can be parsed correctly yet. This will leak then, but we don't care much.
|
||||||
|
procedure LoadMesh(item: TFileListItem);
|
||||||
|
var
|
||||||
|
hob, hmt: TMemoryStream;
|
||||||
|
begin
|
||||||
|
try
|
||||||
|
if g_model <> nil then
|
||||||
|
g_model.Free;
|
||||||
|
hob := TMemoryStream.Create;
|
||||||
|
hob.WriteBuffer(item.node_hob^.Data^, item.node_hob^.size);
|
||||||
|
hob.Seek(0, soBeginning);
|
||||||
|
|
||||||
|
hmt := TMemoryStream.Create;
|
||||||
|
hmt.WriteBuffer(item.node_hmt^.Data^, item.node_hmt^.size);
|
||||||
|
hmt.Seek(0, soBeginning);
|
||||||
|
|
||||||
|
g_model := TModel.Create;
|
||||||
|
g_model.Load(hob, hmt);
|
||||||
|
g_model.InitGL;
|
||||||
|
|
||||||
|
hob.Free;
|
||||||
|
hmt.Free;
|
||||||
|
g_model_loading_failed := false;
|
||||||
|
except
|
||||||
|
g_model_loading_failed := true;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
procedure HandleEvent(const ev: TSDL_Event; var done: boolean);
|
procedure HandleEvent(const ev: TSDL_Event; var done: boolean);
|
||||||
var
|
var
|
||||||
io: PImGuiIO;
|
io: PImGuiIO;
|
||||||
@ -305,6 +334,16 @@ begin
|
|||||||
view.opts.fg_to_draw := max(0, view.opts.fg_to_draw - 1);
|
view.opts.fg_to_draw := max(0, view.opts.fg_to_draw - 1);
|
||||||
SDLK_RIGHT:
|
SDLK_RIGHT:
|
||||||
view.opts.fg_to_draw += 1;
|
view.opts.fg_to_draw += 1;
|
||||||
|
SDLK_UP:
|
||||||
|
if (g_selected_file_idx > 0) then begin
|
||||||
|
g_selected_file_idx -= 1;
|
||||||
|
LoadMesh(g_filelist[g_selected_file_idx]);
|
||||||
|
end;
|
||||||
|
SDLK_DOWN:
|
||||||
|
if (g_selected_file_idx < g_filelist.Size - 1) then begin
|
||||||
|
g_selected_file_idx += 1;
|
||||||
|
LoadMesh(g_filelist[g_selected_file_idx]);
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
SDL_KEYUP: begin
|
SDL_KEYUP: begin
|
||||||
@ -370,47 +409,28 @@ begin
|
|||||||
end; {case}
|
end; {case}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure LoadMesh(item: TFileListItem);
|
|
||||||
var
|
|
||||||
hob, hmt: TMemoryStream;
|
|
||||||
begin
|
|
||||||
if g_model <> nil then
|
|
||||||
g_model.Free;
|
|
||||||
hob := TMemoryStream.Create;
|
|
||||||
hob.WriteBuffer(item.node_hob^.Data^, item.node_hob^.size);
|
|
||||||
hob.Seek(0, soBeginning);
|
|
||||||
|
|
||||||
hmt := TMemoryStream.Create;
|
|
||||||
hmt.WriteBuffer(item.node_hmt^.Data^, item.node_hmt^.size);
|
|
||||||
hmt.Seek(0, soBeginning);
|
|
||||||
|
|
||||||
g_model := TModel.Create;
|
|
||||||
g_model.Load(hob, hmt);
|
|
||||||
g_model.InitGL;
|
|
||||||
|
|
||||||
hob.Free;
|
|
||||||
hmt.Free;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure DrawGui;
|
procedure DrawGui;
|
||||||
var
|
var
|
||||||
style: PImGuiStyle;
|
style: PImGuiStyle;
|
||||||
file_item: TFileListItem;
|
file_item: TFileListItem;
|
||||||
fitem_selected: Boolean = false;
|
selected_item_idx: integer;
|
||||||
selected_mesh_name: String;
|
|
||||||
selected_item: TFileListItem;
|
selected_item: TFileListItem;
|
||||||
|
i: Integer;
|
||||||
begin
|
begin
|
||||||
ImGui_ImplSdlGL2_NewFrame(g_window);
|
ImGui_ImplSdlGL2_NewFrame(g_window);
|
||||||
|
|
||||||
style := Imgui.GetStyle();
|
style := Imgui.GetStyle();
|
||||||
style^.WindowRounding := 0;
|
style^.WindowRounding := 0;
|
||||||
|
|
||||||
Imgui.Begin_('Mesh');
|
if g_selected_file_idx >= 0 then begin
|
||||||
if not g_model_loading_failed then begin
|
Imgui.Begin_('Mesh'); //window used in hob_mesh as well
|
||||||
Imgui.Text(g_model_name);
|
if not g_model_loading_failed then begin
|
||||||
end else
|
Imgui.Text(g_filelist[g_selected_file_idx].name);
|
||||||
Imgui.Text('mesh loading failed :(');
|
end else
|
||||||
Imgui.End_;
|
Imgui.Text('mesh loading failed :(');
|
||||||
|
Imgui.End_;
|
||||||
|
end;
|
||||||
|
|
||||||
Imgui.Begin_('Rendering options');
|
Imgui.Begin_('Rendering options');
|
||||||
Imgui.Checkbox('points', @view.opts.points);
|
Imgui.Checkbox('points', @view.opts.points);
|
||||||
@ -422,26 +442,24 @@ begin
|
|||||||
g_model.ExportObj('rs_exported.obj');
|
g_model.ExportObj('rs_exported.obj');
|
||||||
Imgui.End_;
|
Imgui.End_;
|
||||||
|
|
||||||
selected_mesh_name := EmptyStr;
|
if g_filelist.Size = 0 then
|
||||||
|
exit;
|
||||||
|
|
||||||
|
selected_item_idx := -1;
|
||||||
|
//todo scrolling, filter?
|
||||||
Imgui.Begin_('File list');
|
Imgui.Begin_('File list');
|
||||||
//todo filter
|
for i := 0 to g_filelist.Size - 1 do begin
|
||||||
for file_item in g_filelist do begin
|
file_item := g_filelist[i];
|
||||||
fitem_selected := file_item.name = g_model_name;
|
if Imgui.Selectable(file_item.name, g_selected_file_idx = i) then begin
|
||||||
if Imgui.Selectable(file_item.name, fitem_selected) then begin
|
selected_item_idx := i;
|
||||||
selected_mesh_name := file_item.name;
|
|
||||||
selected_item := file_item;
|
selected_item := file_item;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
Imgui.End_;
|
Imgui.End_;
|
||||||
|
|
||||||
if (selected_mesh_name <> EmptyStr) and (selected_mesh_name <> g_model_name) then begin
|
if (selected_item_idx >= 0) and (selected_item_idx <> g_selected_file_idx) then begin
|
||||||
try
|
g_selected_file_idx := selected_item_idx;
|
||||||
LoadMesh(selected_item);
|
LoadMesh(selected_item);
|
||||||
g_model_name := selected_mesh_name;
|
|
||||||
g_model_loading_failed := false;
|
|
||||||
except
|
|
||||||
g_model_loading_failed := true;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -498,7 +516,7 @@ begin
|
|||||||
LoadMeshFilelist();
|
LoadMeshFilelist();
|
||||||
|
|
||||||
g_model := nil;
|
g_model := nil;
|
||||||
g_model_name := '';
|
g_selected_file_idx := -1;
|
||||||
g_model_loading_failed := false;
|
g_model_loading_failed := false;
|
||||||
|
|
||||||
writeln('Init SDL...');
|
writeln('Init SDL...');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user