imgui window stuff

This commit is contained in:
John Alanbrook 2024-08-15 12:26:37 -05:00
parent daad058225
commit 849c85cd7a
8 changed files with 110 additions and 51 deletions

View file

@ -14,6 +14,7 @@ debug.draw_phys = false;
debug.draw_bb = false;
debug.draw_gizmos = false;
debug.draw_names = false;
debug.sprite_nums = false;
debug.draw = function() {
if (this.draw_phys) game.all_objects(function(x) { debug.draw_gameobject(x); });

View file

@ -240,3 +240,5 @@ Mum.debug_colors = {
//Object.values(Mum.debug_colors).forEach(function(v) { v.a = 100; });
//return { Mum };

View file

@ -222,13 +222,28 @@ profile.print_frame_avg = function()
say("\n");
}
var cache_reporting = false;
var report_cache = {};
var cachest = 0;
var cachegroup;
var cachetitle;
profile.imgui = function()
{
}
profile.cache_reporting = function() { return cache_reporting; }
profile.cache_toggle = function() { cache_reporting = !cache_reporting; }
profile.cache_dump = function() {
report_cache = {};
}
profile.cache = function profile_cache(group, title)
{
if (!cache_reporting) return;
cachest = profile.now();
cachegroup = group;
cachetitle = title;
@ -303,11 +318,6 @@ profile.print_mem = function()
}
}
profile.atom_count = function()
{
// return os.dump_atoms().split(
}
profile.print_gc = function()
{
var gc = os.check_gc();

View file

@ -567,7 +567,7 @@ render.sprites = function render_sprites(gridsize = 1)
render.use_mat(ss);
render.make_sprite_ssbo(sparray, sprite_ssbo);
render.draw(shape.quad, sprite_ssbo, sparray.length);
render.text(ss.diffuse.getid(), ss.transform.pos);
if (debug.sprite_nums) render.text(ss.diffuse.getid(), ss.transform.pos);
}
}
profile.endframe();
@ -998,7 +998,6 @@ prosperon.render = function()
profile.frame("imgui");
render.imgui_new(window.size.x, window.size.y, 0.01);
// render.gfx_gui();
prosperon.imgui();
render.imgui_end();

View file

@ -10,17 +10,28 @@ var appy = {};
appy.inputs = {};
if (os.sys() === 'macos') {
appy.inputs['S-q'] = os.quit;
appy.inputs['S-h'] = function() { };
appy.inputs['S-g'] = os.gc;
}
//appy.inputs.f12 = function() { mum.debug = !mum.debug; }
game.op_search = function()
{
if (!game.ooop) return;
game.ooop = imgui.window("operator search", _ => {
imgui.text("test");
});
}
game.ooop = false;
//appy.inputs.f12 = function() { mum.debug = !mum.debug; }
appy.inputs['C-space'] = function() {
game.ooop = !game.ooop;
}
appy.inputs.f9 = function() { profile.print_mem(); }
appy.inputs.f10 = function() { profile.toggle_frame_avg(); }
appy.inputs.f11 = window.toggle_fullscreen;
appy.inputs.f12 = function() { profile.cpu_frame(); }
appy.inputs['M-f4'] = prosperon.quit;
appy.inputs.f11.doc = "Toggle window fullscreen.";
appy.inputs.f11.title = "Toggle Fullscreen";
appy.inputs['M-f4'] = os.quit;
player[0].control(appy);

View file

@ -12,40 +12,57 @@ static sgimgui_t sgimgui;
#include "jsffi.h"
JSC_CCALL(imgui_begin,
char *title = js2strdup(argv[0]);
JSC_SCALL(imgui_window,
bool active = true;
ImGui::Begin(title, &active, ImGuiWindowFlags_MenuBar);
free(title);
return boolean2js(active);
ImGui::Begin(str, &active);
script_call_sym(argv[1], 0, NULL);
ImGui::End();
ret = boolean2js(active);
)
JSC_SCALL(imgui_menu,
if (ImGui::BeginMenu(str)) {
script_call_sym(argv[1], 0, NULL);
ImGui::EndMenu();
}
)
JSC_CCALL(imgui_end, ImGui::End())
JSC_CCALL(imgui_beginmenu,
char *title = js2strdup(argv[0]);
bool active = ImGui::BeginMenu(title);
free(title);
return boolean2js(active);
JSC_CCALL(imgui_menubar,
if (ImGui::BeginMenuBar()) {
script_call_sym(argv[0], 0, NULL);
ImGui::EndMenuBar();
}
)
JSC_CCALL(imgui_mainmenubar,
if (ImGui::BeginMainMenuBar()) {
script_call_sym(argv[0], 0, NULL);
ImGui::EndMainMenuBar();
}
)
const char* imempty = "##empty";
JSC_CCALL(imgui_menuitem,
char *name = js2strdup(argv[0]);
char *hotkey = js2strdup(argv[1]);
if (ImGui::MenuItem(name,hotkey))
char *name = !JS_Is(argv[0]) ? imempty : js2strdup(argv[0]);
char *keyfn = JS_IsUndefined(argv[1]) ? NULL : js2strdup(argv[1]);
bool on = JS_IsUndefined(argv[3]) ? false : js2boolean(argv[3]);
if (ImGui::MenuItem(name,keyfn, &on))
script_call_sym(argv[2], 0, NULL);
free(name);
free(hotkey);
if (name != imempty) free(name);
if (keyfn) free(keyfn);
return boolean2js(on);
)
JSC_SCALL(imgui_startplot,
JSC_SCALL(imgui_plot,
ImPlot::SetNextAxisToFit(ImAxis_X1);
ImPlot::SetNextAxisToFit(ImAxis_Y1);
ImPlot::BeginPlot(str);
script_call_sym(argv[1], 0, NULL);
ImPlot::EndPlot();
)
JSC_CCALL(imgui_endplot, ImPlot::EndPlot() )
JSC_SCALL(imgui_lineplot,
double data[js_arrlen(argv[1])];
for (int i = 0; i < js_arrlen(argv[1]); i++)
@ -54,9 +71,6 @@ JSC_SCALL(imgui_lineplot,
ImPlot::PlotLine(str, data, js_arrlen(argv[1]));
)
JSC_CCALL(imgui_beginmenubar, ImGui::BeginMenuBar())
JSC_CCALL(imgui_endmenubar, ImGui::EndMenuBar())
JSC_SSCALL(imgui_textinput,
char buffer[512];
strncpy(buffer, str2, 512);
@ -64,17 +78,43 @@ JSC_SSCALL(imgui_textinput,
ret = str2js(buffer);
)
JSC_SCALL(imgui_text,
ImGui::Text(str);
)
JSC_SCALL(imgui_button,
if (ImGui::Button(str))
script_call_sym(argv[1], 0, NULL);
)
JSC_CCALL(imgui_sokol_gfx,
sgimgui_draw(&sgimgui);
if (ImGui::BeginMenu("sokol-gfx")) {
ImGui::MenuItem("Capabilities", 0, &sgimgui.caps_window.open);
ImGui::MenuItem("Frame Stats", 0, &sgimgui.frame_stats_window.open);
ImGui::MenuItem("Buffers", 0, &sgimgui.buffer_window.open);
ImGui::MenuItem("Images", 0, &sgimgui.image_window.open);
ImGui::MenuItem("Samplers", 0, &sgimgui.sampler_window.open);
ImGui::MenuItem("Shaders", 0, &sgimgui.shader_window.open);
ImGui::MenuItem("Pipelines", 0, &sgimgui.pipeline_window.open);
ImGui::MenuItem("Attachments", 0, &sgimgui.attachments_window.open);
ImGui::MenuItem("Calls", 0, &sgimgui.capture_window.open);
ImGui::EndMenu();
}
)
static const JSCFunctionListEntry js_imgui_funcs[] = {
MIST_FUNC_DEF(imgui, begin, 1),
MIST_FUNC_DEF(imgui, end,0),
MIST_FUNC_DEF(imgui, beginmenu, 1),
MIST_FUNC_DEF(imgui, window, 2),
MIST_FUNC_DEF(imgui, menu, 2),
MIST_FUNC_DEF(imgui, menubar, 1),
MIST_FUNC_DEF(imgui, mainmenubar, 1),
MIST_FUNC_DEF(imgui, menuitem, 3),
MIST_FUNC_DEF(imgui, beginmenubar, 0),
MIST_FUNC_DEF(imgui, endmenubar, 0),
MIST_FUNC_DEF(imgui, textinput, 2),
MIST_FUNC_DEF(imgui, startplot,1),
MIST_FUNC_DEF(imgui,endplot,0),
MIST_FUNC_DEF(imgui,lineplot,2)
MIST_FUNC_DEF(imgui, button, 2),
MIST_FUNC_DEF(imgui, text, 1),
MIST_FUNC_DEF(imgui, plot,1),
MIST_FUNC_DEF(imgui,lineplot,2),
MIST_FUNC_DEF(imgui, sokol_gfx, 0),
};
static int started = 0;
@ -111,12 +151,6 @@ void gui_newframe(int x, int y, float dt)
simgui_new_frame(&frame);
}
void gfx_gui()
{
sgimgui_draw(&sgimgui);
sgimgui_draw_menu(&sgimgui, "sokol-gfx");
}
void gui_endframe()
{
simgui_render();

View file

@ -62,6 +62,8 @@ JSValue str2js(const char *c, ...) {
return JS_NewString(js, buf);
}
int JS_Is(JSValue v) { return JS_ToBool(js, v); }
const char *js2str(JSValue v) {
return JS_ToCString(js, v);
}
@ -1123,7 +1125,6 @@ JSC_CCALL(render_screencolor,
)
JSC_CCALL(render_imgui_new, gui_newframe(js2number(argv[0]),js2number(argv[1]),js2number(argv[2])); )
JSC_CCALL(render_gfx_gui, gfx_gui())
JSC_CCALL(render_imgui_end, gui_endframe())
JSC_CCALL(render_imgui_init, return gui_init(js))
@ -1153,7 +1154,6 @@ static const JSCFunctionListEntry js_render_funcs[] = {
MIST_FUNC_DEF(render, setpipeline, 1),
MIST_FUNC_DEF(render, screencolor, 0),
MIST_FUNC_DEF(render, imgui_new, 3),
MIST_FUNC_DEF(render, gfx_gui, 0),
MIST_FUNC_DEF(render, imgui_end, 0),
MIST_FUNC_DEF(render, imgui_init, 0),
MIST_FUNC_DEF(render, make_t_ssbo, 2),

View file

@ -12,6 +12,8 @@ extern "C" {
void script_report_gc_time(double t, double startmem, double mem);
int JS_Is(JSValue v);
extern JSValue cpShape2js(cpShape *s);
#define MIST_CFUNC_DEF(name, length, func1, props) { name, props, JS_DEF_CFUNC, 0, .u = { .func = { length, JS_CFUNC_generic, { .generic = func1 } } } }