Fix grid draw, circle draw, most editor drawing
This commit is contained in:
parent
09765f5336
commit
f94c62c5c0
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
|
@ -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); }
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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(); },
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue