From f94c62c5c06afddd56b58751b4e24952fa9353e6 Mon Sep 17 00:00:00 2001 From: John Alanbrook Date: Wed, 23 Aug 2023 22:18:34 +0000 Subject: [PATCH] Fix grid draw, circle draw, most editor drawing --- source/engine/debug/debugdraw.c | 37 ++++++++++++++------------------- source/engine/debug/debugdraw.h | 1 + source/engine/openglrender.c | 19 +++++++---------- source/engine/script.c | 1 + source/engine/yugine.c | 8 ++++--- source/scripts/debug.js | 3 ++- source/scripts/editor.js | 20 ++++++++++-------- source/scripts/engine.js | 18 +++++++--------- source/shaders/gridfrag.glsl | 2 +- source/shaders/gridvert.glsl | 1 + 10 files changed, 53 insertions(+), 57 deletions(-) diff --git a/source/engine/debug/debugdraw.c b/source/engine/debug/debugdraw.c index 9c87e9ac..46062c25 100644 --- a/source/engine/debug/debugdraw.c +++ b/source/engine/debug/debugdraw.c @@ -85,15 +85,16 @@ struct circle_vertex { static struct circle_vertex circle_b[v_amt]; +/* Writes debug data to buffers, and draws */ void debug_flush(HMM_Mat4 *view) { if (poly_c != 0) { sg_apply_pipeline(poly_pipe); sg_apply_bindings(&poly_bind); sg_apply_uniforms(SG_SHADERSTAGE_VS,0,SG_RANGE_REF(*view)); - sg_append_buffer(poly_bind.vertex_buffers[0], &(sg_range){ + int b = sg_append_buffer(poly_bind.vertex_buffers[0], &(sg_range){ .ptr = poly_b, .size = sizeof(struct poly_vertex)*poly_v}); - sg_append_buffer(poly_bind.index_buffer, &(sg_range){ + int bi = sg_append_buffer(poly_bind.index_buffer, &(sg_range){ .ptr = poly_bi, .size = sizeof(uint32_t)*poly_c}); sg_draw(poly_sc,poly_c,1); } @@ -106,6 +107,7 @@ void debug_flush(HMM_Mat4 *view) .ptr = point_b, .size = sizeof(struct point_vertex)*point_c}); sg_draw(point_sc,point_c,1); + YughWarn("DREW %d POINTS", point_c); } if (line_c != 0) { @@ -163,6 +165,7 @@ void debug_newframe() point_c = 0; circle_sc = circle_count = line_sv = line_v = line_sc = line_c = poly_sc = poly_c = 0; poly_sv = poly_v = 0; + } static sg_shader_uniform_block_desc projection_ubo = { @@ -569,16 +572,18 @@ void draw_arrow(struct cpVect start, struct cpVect end, struct rgba color, int c void draw_grid(int width, int span, struct rgba color) { - cpVect offset = cam_pos(); - offset = cpvmult(offset, 1/cam_zoom()); - offset.x -= mainwin->width/2; - offset.y -= mainwin->height/2; + cpVect offset = cam_pos(); + offset = cpvmult(offset, 1/cam_zoom()); + offset.x -= mainwin->width/2; + offset.y -= mainwin->height/2; +// offset.x += span/2; + offset.y += span/2; sg_apply_pipeline(grid_pipe); sg_apply_bindings(&grid_bind); - + float col[4] = { color.r/255.0 ,color.g/255.0 ,color.b/255.0 ,color.a/255.0 }; - + float fubo[6]; fubo[0] = 1; fubo[1] = span; @@ -596,7 +601,7 @@ void draw_cppoint(struct cpVect point, float r, struct rgba color) .color = color, .radius = r }; - + memcpy(point_b+point_c, &p, sizeof(struct point_vertex)); point_c++; } @@ -604,7 +609,7 @@ void draw_cppoint(struct cpVect point, float r, struct rgba color) void draw_points(struct cpVect *points, int n, float size, struct rgba color) { for (int i = 0; i < n; i++) - draw_cppoint(points[i], size, color); + draw_cppoint(points[i], size, color); } void draw_poly(cpVect *points, int n, struct rgba color) @@ -613,7 +618,7 @@ void draw_poly(cpVect *points, int n, struct rgba color) int tric = n - 2; if (tric < 1) return; - + uint32_t tridxs[tric*3]; for (int i = 2, ti = 0; i < n; i++, ti+=3) { @@ -625,11 +630,6 @@ void draw_poly(cpVect *points, int n, struct rgba color) for (int i = 0; i < tric*3; i++) tridxs[i] += poly_v+poly_sv; - sg_range trip = { - .ptr = tridxs, - .size = sizeof(uint32_t)*3*tric - }; - struct poly_vertex polyverts[n]; for (int i = 0; i < n; i++) { @@ -639,11 +639,6 @@ void draw_poly(cpVect *points, int n, struct rgba color) polyverts[i].color = color; } - sg_range ppp = { - .ptr = polyverts, - .size = sizeof(struct poly_vertex)*n - }; - memcpy(poly_b+poly_v, polyverts, sizeof(struct poly_vertex)*n); memcpy(poly_bi+poly_c, tridxs, sizeof(uint32_t)*3*tric); diff --git a/source/engine/debug/debugdraw.h b/source/engine/debug/debugdraw.h index 1b32e0e2..d1c46c38 100644 --- a/source/engine/debug/debugdraw.h +++ b/source/engine/debug/debugdraw.h @@ -22,6 +22,7 @@ void draw_grid(int width, int span, struct rgba color); void debug_flush(HMM_Mat4 *view); void debug_newframe(); +void debug_nextpass(); cpVect inflatepoint(cpVect a, cpVect b, cpVect c, float d); void inflatepoints(cpVect *r, cpVect *p, float d, int n); diff --git a/source/engine/openglrender.c b/source/engine/openglrender.c index 92c923bd..6ee14fae 100644 --- a/source/engine/openglrender.c +++ b/source/engine/openglrender.c @@ -266,6 +266,7 @@ void render_winsize() static cpBody *camera = NULL; void set_cam_body(cpBody *body) { + YughWarn("Camera body set to %p", body); camera = body; } @@ -317,7 +318,6 @@ void openglRender(struct window *window) { draw_model(duck,model, lsm); */ -// sg_begin_default_pass(&pass_action, window->width, window->height); sg_begin_pass(crt_post.pass, &pass_action); //////////// 2D projection @@ -338,24 +338,19 @@ void openglRender(struct window *window) { //// DEBUG if (debugDrawPhysics) { gameobject_draw_debugs(); - call_debugs(); + call_debugs(); } - + debug_flush(&projection); -// text_flush(&projection); + text_flush(&projection); ////// TEXT && GUI - debug_nextpass(); - - nuke_start(); - - call_gui(); - + nuke_start(); + call_gui(); debug_flush(&hudproj); text_flush(&hudproj); - -// nuke_start(); + call_nk_gui(); nuke_end(); diff --git a/source/engine/script.c b/source/engine/script.c index 0a5a59fe..816ad647 100644 --- a/source/engine/script.c +++ b/source/engine/script.c @@ -246,4 +246,5 @@ void call_debugs() { call_callee(&debug_callee); } static struct callee draw_callee; void register_draw(struct callee c) { draw_callee = c; } + void call_draw() { call_callee(&draw_callee); } diff --git a/source/engine/yugine.c b/source/engine/yugine.c index 7a0cc0e2..ec737ee7 100644 --- a/source/engine/yugine.c +++ b/source/engine/yugine.c @@ -232,10 +232,12 @@ int main(int argc, char **args) { lastTick = glfwGetTime(); //double wait = fmax(0, renderMS - elapsed); nuke_input_begin(); + if (sim_playing()) input_poll(fmax(0, renderMS-elapsed)); else input_poll(1000); + window_all_handle_events(); nuke_input_end(); framems[framei++] = elapsed; @@ -259,10 +261,10 @@ int main(int argc, char **args) { renderlag += elapsed; - if (renderlag >= renderMS) { - renderlag -= renderMS; +// if (renderlag >= renderMS) { +// renderlag -= renderMS; window_renderall(); - } +// } gameobjects_cleanup(); } diff --git a/source/scripts/debug.js b/source/scripts/debug.js index fc0decc5..d0d15268 100644 --- a/source/scripts/debug.js +++ b/source/scripts/debug.js @@ -20,7 +20,8 @@ var Debug = { point(pos, size, color) { color = color ? color : Color.blue; - cmd(51, pos, size,color); + Shape.circle(pos, size, color); +// cmd(51, pos, size,color); }, arrow(start, end, color, capsize) { diff --git a/source/scripts/editor.js b/source/scripts/editor.js index 0f244b48..59fc47ac 100644 --- a/source/scripts/editor.js +++ b/source/scripts/editor.js @@ -12,7 +12,8 @@ required_files.forEach(x => { var editor_level = Level.create(); var editor_camera = editor_level.spawn(camera2d); editor_camera.save = false; -set_cam(editor_camera.body); + +Yugine.view_camera(editor_camera); var editor_config = { grid_size: 100, @@ -1251,12 +1252,12 @@ var editor = { /* Clean out killed objects */ this.selectlist = this.selectlist.filter(function(x) { return x.alive; }); - GUI.text("WORKING LAYER: " + this.working_layer, [0,520], 1); - GUI.text("MODE: " + this.edit_mode, [0,500],1); + GUI.text("WORKING LAYER: " + this.working_layer, [0,520]); + GUI.text("MODE: " + this.edit_mode, [0,500]); Debug.point(world2screen(this.edit_level.pos), 5, Color.yellow); if (this.cursor) { - Debug.point(world2screen(this.cursor), 5, Color.green); + Debug.point(World2screen(this.cursor), 5, Color.green); this.selectlist.forEach(function(x) { var p = []; @@ -1276,7 +1277,8 @@ var editor = { GUI.text(this.sel_comp.help, [100,700],1); } - gui_text("0,0", world2screen([0,0]), 1); + GUI.text("0,0", world2screen([0,0])); + Debug.point([0,0],3); var clvl = this.edit_level; var ypos = 200; @@ -1330,7 +1332,7 @@ var editor = { for (var key in this.selectlist[0].components) { var selected = this.sel_comp === this.selectlist[0].components[key]; var str = (selected ? ">" : " ") + key + " [" + this.selectlist[0].components[key].name + "]"; - gui_text(str, world2screen(this.selectlist[0].pos).add([0,-16*(i++)]), 1); + GUI.text(str, world2screen(this.selectlist[0].pos).add([0,-16*(i++)])); } if (this.sel_comp) { @@ -1348,12 +1350,12 @@ var editor = { var endgrid = screen2world([Window.width, 0]); while(startgrid[0] <= endgrid[0]) { - gui_text(startgrid[0], [world2screen([startgrid[0], 0])[0], 1], 1); + GUI.text(startgrid[0], [world2screen([startgrid[0], 0])[0],0]); startgrid[0] += editor_config.grid_size; } while(startgrid[1] <= endgrid[1]) { - gui_text(startgrid[1], [0, world2screen([0, startgrid[1]])[1]], 1); + GUI.text(startgrid[1], [0, world2screen([0, startgrid[1]])[1]]); startgrid[1] += editor_config.grid_size; } @@ -2523,7 +2525,7 @@ var limited_editor = { Level.kill(); Level.clear_all(); editor.load_json(editor.stash); - set_cam(editor_camera.body); + Yugine.view_camera(editor_camera); } }, input_f8_pressed() { sim_step(); }, diff --git a/source/scripts/engine.js b/source/scripts/engine.js index 6644d46a..0be93c19 100644 --- a/source/scripts/engine.js +++ b/source/scripts/engine.js @@ -163,11 +163,6 @@ function quit() { Game.quit(); }; -function set_cam(id) { - cmd(61, id); -}; - - var Color = { white: [255,255,255,255], blue: [84,110,255,255], @@ -192,7 +187,7 @@ var GUI = { var bb = cmd(118, str, size, wrap); var opos = [bb.r, bb.t]; - var h = ui_text(str, pos.sub(opos), size, color, wrap); + var h = ui_text(str, pos, size, color, wrap); return bb; }, @@ -1406,8 +1401,6 @@ var Level = { var savereturn = JSON.stringify(this.objects, replacer_empty_nil, 1); - Log.warn(JSON.stringify(this)); - if (this.flipx) { this.objects.forEach(function(obj) { this.mirror_x_obj(obj); @@ -2329,8 +2322,13 @@ var camera2d = gameobject.clone("camera2d", { }, }); -Yugine.camera = World.spawn(camera2d); -cmd(61, Yugine.camera.id); +Yugine.view_camera = function(cam) +{ + Yugine.camera = cam; + cmd(61, Yugine.camera.body); +} + +Yugine.view_camera(World.spawn(camera2d)); win_make(Game.title, Game.resolution[0], Game.resolution[1]); //win_icon("icon.png"); diff --git a/source/shaders/gridfrag.glsl b/source/shaders/gridfrag.glsl index 339d7884..b0dbf935 100644 --- a/source/shaders/gridfrag.glsl +++ b/source/shaders/gridfrag.glsl @@ -1,7 +1,7 @@ #version 330 out vec4 frag_color; -in vec2 apos; +in vec2 apos; /* Drawing coordinates of the grid */ uniform float thickness; /* thickness in pixels */ uniform float span; diff --git a/source/shaders/gridvert.glsl b/source/shaders/gridvert.glsl index 7b16a037..d617e91d 100644 --- a/source/shaders/gridvert.glsl +++ b/source/shaders/gridvert.glsl @@ -13,6 +13,7 @@ void main() { // vec4 ipos = inverse(projection) * vec4(pos, 0.f, 1.f); apos = pos * vec2(600, 360); + apos += offset; // apos = pos + offset;