render update
This commit is contained in:
parent
49271b4a5d
commit
c16a0332a5
|
@ -1,6 +1,7 @@
|
|||
#include "debugdraw.h"
|
||||
|
||||
#include "openglrender.h"
|
||||
#include "render.h"
|
||||
|
||||
#include "shader.h"
|
||||
#include "log.h"
|
||||
|
@ -25,6 +26,7 @@ struct point_vertex {
|
|||
float radius;
|
||||
};
|
||||
static int point_c = 0;
|
||||
static struct point_vertex point_b[1000];
|
||||
|
||||
static sg_shader line_shader;
|
||||
static sg_pipeline line_pipe;
|
||||
|
@ -37,6 +39,8 @@ struct line_vert {
|
|||
};
|
||||
static int line_c = 0;
|
||||
static int line_v = 0;
|
||||
static struct line_vert line_b[1000];
|
||||
static uint16_t line_bi[1000];
|
||||
|
||||
static sg_pipeline grid_pipe;
|
||||
static sg_bindings grid_bind;
|
||||
|
@ -53,6 +57,8 @@ struct poly_vertex {
|
|||
float uv[2];
|
||||
struct rgba color;
|
||||
};
|
||||
static struct poly_vertex poly_b[1000];
|
||||
static uint32_t poly_bi[1000];
|
||||
|
||||
static sg_pipeline circle_pipe;
|
||||
static sg_bindings circle_bind;
|
||||
|
@ -64,35 +70,58 @@ struct circle_vertex {
|
|||
float radius;
|
||||
struct rgba color;
|
||||
};
|
||||
static struct circle_vertex circle_b[1000];
|
||||
|
||||
void debug_flush()
|
||||
{
|
||||
if (circle_count != 0) {
|
||||
sg_apply_pipeline(circle_pipe);
|
||||
sg_apply_bindings(&circle_bind);
|
||||
sg_apply_uniforms(SG_SHADERSTAGE_VS, 0, SG_RANGE_REF(projection));
|
||||
|
||||
sg_update_buffer(circle_bind.vertex_buffers[0], &(sg_range){
|
||||
.ptr = circle_b,
|
||||
.size = sizeof(struct circle_vertex)*circle_count
|
||||
});
|
||||
sg_draw(0,4,circle_count);
|
||||
circle_count = 0;
|
||||
}
|
||||
|
||||
if (poly_c != 0) {
|
||||
sg_apply_pipeline(poly_pipe);
|
||||
sg_apply_bindings(&poly_bind);
|
||||
sg_apply_uniforms(SG_SHADERSTAGE_VS,0,SG_RANGE_REF(projection));
|
||||
sg_update_buffer(poly_bind.vertex_buffers[0], &(sg_range){
|
||||
.ptr = poly_b, .size = sizeof(struct poly_vertex)*poly_v});
|
||||
sg_update_buffer(poly_bind.index_buffer, &(sg_range){
|
||||
.ptr = poly_bi, .size = sizeof(uint32_t)*poly_c});
|
||||
sg_draw(0,poly_c,1);
|
||||
poly_c = 0;
|
||||
poly_v = 0;
|
||||
}
|
||||
|
||||
if (point_c != 0) {
|
||||
sg_apply_pipeline(point_pipe);
|
||||
sg_apply_bindings(&point_bind);
|
||||
sg_apply_uniforms(SG_SHADERSTAGE_VS,0,SG_RANGE_REF(projection));
|
||||
sg_update_buffer(point_bind.vertex_buffers[0], &(sg_range){
|
||||
.ptr = point_b,
|
||||
.size = sizeof(struct point_vertex)*point_c});
|
||||
sg_draw(0,point_c,1);
|
||||
point_c = 0;
|
||||
}
|
||||
|
||||
if (line_c != 0) {
|
||||
sg_apply_pipeline(line_pipe);
|
||||
sg_apply_bindings(&line_bind);
|
||||
sg_apply_uniforms(SG_SHADERSTAGE_VS,0,SG_RANGE_REF(projection));
|
||||
sg_update_buffer(line_bind.vertex_buffers[0], &(sg_range){
|
||||
.ptr = line_b, .size = sizeof(struct line_vert)*line_v});
|
||||
sg_update_buffer(line_bind.index_buffer, &(sg_range){
|
||||
.ptr = line_bi, .size = sizeof(uint16_t)*line_c});
|
||||
sg_draw(0,line_c,1);
|
||||
line_c = 0;
|
||||
line_v = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static sg_shader_uniform_block_desc projection_ubo = {
|
||||
|
@ -102,15 +131,6 @@ static sg_shader_uniform_block_desc projection_ubo = {
|
|||
}
|
||||
};
|
||||
|
||||
sg_blend_state blend_trans = {
|
||||
.enabled = true,
|
||||
.src_factor_rgb = SG_BLENDFACTOR_SRC_ALPHA,
|
||||
.dst_factor_rgb = SG_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
|
||||
.src_factor_alpha = SG_BLENDFACTOR_SRC_ALPHA,
|
||||
.src_factor_alpha = SG_BLENDFACTOR_ONE_MINUS_SRC_ALPHA
|
||||
};
|
||||
|
||||
|
||||
void debugdraw_init()
|
||||
{
|
||||
point_shader = sg_make_shader(&(sg_shader_desc){
|
||||
|
@ -320,8 +340,8 @@ void draw_line(cpVect *a_points, int a_n, struct rgba color, float seg_len)
|
|||
.size = sizeof(uint16_t)*i_c
|
||||
};
|
||||
|
||||
sg_append_buffer(line_bind.vertex_buffers[0], &vr);
|
||||
sg_append_buffer(line_bind.index_buffer, &ir);
|
||||
memcpy(line_b+line_v, v, sizeof(struct line_vert)*n);
|
||||
memcpy(line_bi+line_c, idxs, sizeof(uint16_t)*i_c);
|
||||
|
||||
line_c += i_c;
|
||||
line_v += n;
|
||||
|
@ -443,8 +463,8 @@ void draw_edge(cpVect *points, int n, struct rgba color, int thickness, int clos
|
|||
.size = sizeof(struct poly_vertex)*mesh->num_vertices
|
||||
};
|
||||
|
||||
sg_append_buffer(poly_bind.vertex_buffers[0], &vvt);
|
||||
sg_append_buffer(poly_bind.index_buffer, &it);
|
||||
memcpy(poly_b+poly_v, vertices, sizeof(struct poly_vertex)*mesh->num_vertices);
|
||||
memcpy(poly_bi+poly_c, mesh->triangle_indices, sizeof(uint32_t)*mesh->num_triangles*3);
|
||||
|
||||
poly_c += mesh->num_triangles*3;
|
||||
poly_v += mesh->num_vertices;
|
||||
|
@ -459,7 +479,7 @@ void draw_circle(int x, int y, float radius, int pixels, struct rgba color, int
|
|||
cv.pos[1] = y;
|
||||
cv.radius = radius;
|
||||
cv.color = color;
|
||||
sg_append_buffer(circle_bind.vertex_buffers[0], SG_RANGE_REF(cv));
|
||||
memcpy(circle_b+circle_count, &cv, sizeof(struct circle_vertex));
|
||||
circle_count++;
|
||||
}
|
||||
|
||||
|
@ -520,7 +540,7 @@ void draw_cppoint(struct cpVect point, float r, struct rgba color)
|
|||
.radius = r
|
||||
};
|
||||
|
||||
sg_append_buffer(point_bind.vertex_buffers[0], SG_RANGE_REF(p));
|
||||
memcpy(point_b+point_c, &p, sizeof(struct point_vertex));
|
||||
point_c++;
|
||||
}
|
||||
|
||||
|
@ -572,8 +592,8 @@ void draw_poly(cpVect *points, int n, struct rgba color)
|
|||
.size = sizeof(struct poly_vertex)*n
|
||||
};
|
||||
|
||||
sg_append_buffer(poly_bind.vertex_buffers[0], &ppp);
|
||||
sg_append_buffer(poly_bind.index_buffer, &trip);
|
||||
memcpy(poly_b+poly_v, polyverts, sizeof(struct poly_vertex)*n);
|
||||
memcpy(poly_bi+poly_c, tridxs, sizeof(uint32_t)*3*tric);
|
||||
|
||||
poly_c += tric*3;
|
||||
poly_v += n;
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <vec.h>
|
||||
#include "editor.h"
|
||||
|
||||
void editor_init_project(struct gameproject *gp)
|
||||
|
|
|
@ -118,11 +118,13 @@ int js_arrlen(JSValue v) {
|
|||
}
|
||||
|
||||
struct rgba js2color(JSValue v) {
|
||||
JSValue ja = js_arridx(v,3);
|
||||
unsigned char a = JS_IsUndefined(ja) ? 255 : js2int(ja);
|
||||
struct rgba color = {
|
||||
.r = js2int(js_arridx(v,0)),
|
||||
.g = js2int(js_arridx(v,1)),
|
||||
.b = js2int(js_arridx(v,2)),
|
||||
.a = js2int(js_arridx(v,3)),
|
||||
.a = a,
|
||||
};
|
||||
return color;
|
||||
}
|
||||
|
|
|
@ -108,6 +108,7 @@ void font_init(struct shader *textshader) {
|
|||
.buffers[0].step_func = SG_VERTEXSTEP_PER_INSTANCE
|
||||
},
|
||||
.primitive_type = SG_PRIMITIVETYPE_TRIANGLE_STRIP,
|
||||
.colors[0].blend = blend_trans,
|
||||
});
|
||||
|
||||
float text_verts[8] = {
|
||||
|
|
|
@ -426,9 +426,7 @@ void input_poll(double wait) {
|
|||
mouseWheelX = 0;
|
||||
mouseWheelY = 0;
|
||||
|
||||
glfwPollEvents();
|
||||
|
||||
// glfwWaitEventsTimeout(wait);
|
||||
glfwWaitEventsTimeout(wait);
|
||||
|
||||
for (int i = 0; i < arrlen(downkeys); i++)
|
||||
call_input_down(&downkeys[i]);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#define GLFW_INCLUDE_NONE
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#include "sokol/sokol_gfx.h"
|
||||
|
||||
struct uv_n {
|
||||
unsigned short u;
|
||||
|
@ -15,4 +16,13 @@ struct st_n {
|
|||
struct uv_n t;
|
||||
};
|
||||
|
||||
static sg_blend_state blend_trans = {
|
||||
.enabled = true,
|
||||
.src_factor_rgb = SG_BLENDFACTOR_SRC_ALPHA,
|
||||
.dst_factor_rgb = SG_BLENDFACTOR_ONE_MINUS_SRC_ALPHA,
|
||||
.src_factor_alpha = SG_BLENDFACTOR_SRC_ALPHA,
|
||||
.src_factor_alpha = SG_BLENDFACTOR_ONE_MINUS_SRC_ALPHA
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -211,8 +211,11 @@ int main(int argc, char **args) {
|
|||
double elapsed = glfwGetTime() - lastTick;
|
||||
deltaT = elapsed;
|
||||
lastTick = glfwGetTime();
|
||||
double wait = fmax(0, renderMS - elapsed);
|
||||
input_poll(wait);
|
||||
//double wait = fmax(0, renderMS - elapsed);
|
||||
if (sim_playing())
|
||||
input_poll(fmax(0, renderMS-elapsed));
|
||||
else
|
||||
input_poll(1000);
|
||||
window_all_handle_events();
|
||||
|
||||
framems[framei++] = elapsed;
|
||||
|
|
|
@ -1312,8 +1312,6 @@ var editor = {
|
|||
"PAUSED" :
|
||||
"STOPPED", [0, 0], 1);
|
||||
|
||||
gui_text("FPS " + this.fps, [0, 540], 1);
|
||||
|
||||
var clvl = this.edit_level;
|
||||
var ypos = 200;
|
||||
var lvlcolor = Color.white;
|
||||
|
|
|
@ -128,7 +128,7 @@ var Color = {
|
|||
var GUI = {
|
||||
text(str, pos, size, color, wrap) {
|
||||
size = size ? size : 1;
|
||||
color = color ? color : [255,255,255];
|
||||
color = color ? color : [255,255,255,255];
|
||||
wrap = wrap ? wrap : 500;
|
||||
var h = ui_text(str, pos, size, color, wrap);
|
||||
|
||||
|
|
|
@ -6,10 +6,13 @@ out vec4 color;
|
|||
|
||||
uniform sampler2D text;
|
||||
|
||||
float osize = 1.0;
|
||||
|
||||
void main()
|
||||
{
|
||||
float lettera = texture(text,TexCoords).r;
|
||||
|
||||
|
||||
// color = vec4(1.f, 1.f, 1.f, texture(text, TexCoords).r);
|
||||
if (lettera <= 0.1f)
|
||||
discard;
|
||||
|
|
Loading…
Reference in a new issue