From 7fc02062c0329d2c6bb169e16f170e4ba930e85b Mon Sep 17 00:00:00 2001 From: John Alanbrook Date: Sun, 7 May 2023 16:11:33 +0000 Subject: [PATCH] text rendering woiks --- source/engine/font.c | 18 +++++++++--------- source/engine/openglrender.c | 8 ++++++-- source/shaders/textfrag.glsl | 1 + 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/source/engine/font.c b/source/engine/font.c index 8db59843..e082119a 100644 --- a/source/engine/font.c +++ b/source/engine/font.c @@ -74,7 +74,7 @@ void font_init(struct shader *textshader) { .fs.source = slurp_text("shaders/textfrag.glsl"), .vs.uniform_blocks[0] = { .size = sizeof(float)*16, - .layout = SG_UNIFORMLAYOUT_STD140, +// .layout = SG_UNIFORMLAYOUT_STD140, .uniforms = { [0] = { .name = "projection", .type = SG_UNIFORMTYPE_MAT4 } } @@ -99,12 +99,12 @@ void font_init(struct shader *textshader) { [2].buffer_index = 1}, .buffers[2].step_func = SG_VERTEXSTEP_PER_INSTANCE, }, - .primitive_type = SG_PRIMITIVETYPE_TRIANGLE_STRIP, + // .primitive_type = SG_PRIMITIVETYPE_TRIANGLE_STRIP, .label = "text pipeline" }); bind_text.vertex_buffers[0] = sg_make_buffer(&(sg_buffer_desc){ - .size = sizeof(float)*16*40000, + .size = sizeof(float)*24*3*1024*1024, .type = SG_BUFFERTYPE_VERTEXBUFFER, .usage = SG_USAGE_STREAM, .label = "text buffer" @@ -214,10 +214,8 @@ void text_flush() sg_apply_pipeline(pipe_text); sg_apply_bindings(&bind_text); sg_apply_uniforms(SG_SHADERSTAGE_VS,0,SG_RANGE_REF(projection)); - - YughWarn("Chars: %d", curchar); - sg_draw(0,4*curchar,1); + sg_draw(0,6*curchar,1); curchar = 0; } @@ -229,14 +227,16 @@ void fill_charverts(float *verts, float cursor[2], float scale, struct Character float xpos = cursor[0] + (c.Bearing[0]+offset[0]) * scale; float ypos = cursor[1] - (c.Bearing[1]+offset[1]) * scale; - float v[16] = { + float v[24] = { xpos, ypos, c.rect.s0, c.rect.t1, xpos+w, ypos, c.rect.s1, c.rect.t1, xpos, ypos + h, c.rect.s0, c.rect.t0, + xpos, ypos + h, c.rect.s0, c.rect.t0, + xpos+w, ypos, c.rect.s1, c.rect.t1, xpos + w, ypos + h, c.rect.s1, c.rect.t0 }; - memcpy(verts, v, sizeof(float)*16); + memcpy(verts, v, sizeof(float)*24); } static int drawcaret = 0; @@ -246,7 +246,7 @@ void sdrawCharacter(struct Character c, mfloat_t cursor[2], float scale, struct float shadowcolor[3] = {0.f, 0.f, 0.f}; float shadowcursor[2]; - float verts[16]; + float verts[24]; float offset[2] = {-1, 1}; fill_charverts(verts, cursor, scale, c, offset); diff --git a/source/engine/openglrender.c b/source/engine/openglrender.c index 31baf9f9..af7ce10c 100644 --- a/source/engine/openglrender.c +++ b/source/engine/openglrender.c @@ -54,6 +54,8 @@ char objectName[200] = { '\0' }; // object name buffer struct sprite *tsprite = NULL; +const char *donquixote; + void debug_draw_phys(int draw) { debugDrawPhysics = draw; } @@ -73,6 +75,8 @@ void openglInit() exit(1); } + donquixote = slurp_text("quixote.txt"); + ////// MAKE SHADERS spriteShader = MakeShader("spritevert.glsl", "spritefrag.glsl"); wireframeShader = MakeShader("spritevert.glsl", "spritewireframefrag.glsl"); @@ -142,10 +146,10 @@ void openglRender(struct window *window) // gui_draw_img("pill1.png", 200, 200); float a[2] = {100,100}; float w[3] = {1.f,1.f,1.f}; - renderText("TEST RENDER", a, 1.f, w, 0,-1); +// renderText("TEST RENDER", a, 1.f, w, 0,-1); float b[2] = {50,50}; - renderText("TEST 2 RENDER", b, 1.f, w, 0,-1); +// renderText(donquixote, b, 1.f, w, 0,-1); /* UI Elements & Debug elements */ // glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); diff --git a/source/shaders/textfrag.glsl b/source/shaders/textfrag.glsl index 6591fa78..75a1ff37 100644 --- a/source/shaders/textfrag.glsl +++ b/source/shaders/textfrag.glsl @@ -8,6 +8,7 @@ uniform sampler2D text; void main() { + // color = vec4(fColor.xyz, texture(text, TexCoords).r); color = vec4(1.f,1.f,1.f, texture(text, TexCoords).r); if (color.a <= 0.1f)