ok'
This commit is contained in:
parent
0f8a466354
commit
8552d6a1df
|
@ -80,15 +80,6 @@ void font_init(struct shader *textshader) {
|
|||
}
|
||||
},
|
||||
|
||||
.fs.uniform_blocks[0] = {
|
||||
.size = sizeof(float)*3+sizeof(int),
|
||||
.layout = SG_UNIFORMLAYOUT_STD140,
|
||||
.uniforms = {
|
||||
[0] = { .name = "textColor", .type = SG_UNIFORMTYPE_FLOAT3 },
|
||||
[1] = { .name = "invert", .type = SG_UNIFORMTYPE_INT }
|
||||
}
|
||||
},
|
||||
|
||||
.fs.images[0] = {
|
||||
.name = "text",
|
||||
.image_type = SG_IMAGETYPE_2D,
|
||||
|
@ -99,20 +90,35 @@ void font_init(struct shader *textshader) {
|
|||
pipe_text = sg_make_pipeline(&(sg_pipeline_desc){
|
||||
.shader = fontshader,
|
||||
.layout = {
|
||||
.attrs = { [0].format = SG_VERTEXFORMAT_FLOAT4 }
|
||||
.attrs = {
|
||||
[0].format = SG_VERTEXFORMAT_FLOAT2,
|
||||
[0].buffer_index = 0,
|
||||
[1].format = SG_VERTEXFORMAT_FLOAT2,
|
||||
[1].buffer_index = 0,
|
||||
[2].format = SG_VERTEXFORMAT_FLOAT3,
|
||||
[2].buffer_index = 1},
|
||||
.buffers[2].step_func = SG_VERTEXSTEP_PER_INSTANCE,
|
||||
},
|
||||
.primitive_type = SG_PRIMITIVETYPE_TRIANGLE_STRIP,
|
||||
.label = "text pipeline"
|
||||
});
|
||||
|
||||
bind_text.vertex_buffers[0] = sg_make_buffer(&(sg_buffer_desc){
|
||||
.size = sizeof(float)*16,
|
||||
.size = sizeof(float)*16*40000,
|
||||
.type = SG_BUFFERTYPE_VERTEXBUFFER,
|
||||
.usage = SG_USAGE_STREAM,
|
||||
.label = "text buffer"
|
||||
});
|
||||
|
||||
bind_text.vertex_buffers[1] = sg_make_buffer(&(sg_buffer_desc){
|
||||
.size = sizeof(float)*3*40000,
|
||||
.type = SG_BUFFERTYPE_VERTEXBUFFER,
|
||||
.usage = SG_USAGE_STREAM,
|
||||
.label = "text color buffer"
|
||||
});
|
||||
|
||||
font = MakeFont("LessPerfectDOSVGA.ttf", 16);
|
||||
bind_text.fs_images[0] = font->texID;
|
||||
}
|
||||
|
||||
void font_frame(struct window *w) {
|
||||
|
@ -202,6 +208,19 @@ void draw_char_box(struct Character c, float cursor[2], float scale, float color
|
|||
draw_rect(x,y,w,h,color);
|
||||
}
|
||||
|
||||
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);
|
||||
curchar = 0;
|
||||
}
|
||||
|
||||
void fill_charverts(float *verts, float cursor[2], float scale, struct Character c, float *offset)
|
||||
{
|
||||
float w = c.Size[0] * scale;
|
||||
|
@ -231,11 +250,20 @@ void sdrawCharacter(struct Character c, mfloat_t cursor[2], float scale, struct
|
|||
float offset[2] = {-1, 1};
|
||||
|
||||
fill_charverts(verts, cursor, scale, c, offset);
|
||||
curchar++;
|
||||
|
||||
/* Check if the vertex is off screen */
|
||||
if (verts[5] < 0 || verts[10] < 0 || verts[0] > window_i(0)->width || verts[1] > window_i(0)->height)
|
||||
return;
|
||||
|
||||
curchar++;
|
||||
/* SET COLOR ? */
|
||||
sg_append_buffer(bind_text.vertex_buffers[0], SG_RANGE_REF(verts));
|
||||
sg_append_buffer(bind_text.vertex_buffers[1], SG_RANGE_REF(color));
|
||||
|
||||
return;
|
||||
|
||||
// fill_charverts(verts, cursor, scale, c, offset);
|
||||
|
||||
/*
|
||||
if (drawcaret == curchar) {
|
||||
draw_char_box(c, cursor, scale, color);
|
||||
|
@ -245,37 +273,30 @@ void sdrawCharacter(struct Character c, mfloat_t cursor[2], float scale, struct
|
|||
glBindTexture(GL_TEXTURE_2D, font->texID);
|
||||
glBindVertexArray(VAO);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||
|
||||
}
|
||||
|
||||
*/
|
||||
shader_setvec3(shader, "textColor", shadowcolor);
|
||||
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], verts);
|
||||
sg_draw(0,4,1);
|
||||
// sg_apply_uniforms(SG_SHADERSTAGE_FS, 0, SG_RANGE_REF(shadowcolor));
|
||||
/*
|
||||
sg_append_buffer(bind_text.vertex_buffers[0], SG_RANGE_REF(verts));
|
||||
|
||||
offset[0] = 1;
|
||||
offset[1] = -1;
|
||||
fill_charverts(verts, cursor, scale, c, offset);
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], verts);
|
||||
sg_draw(0,4,1);
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], SG_RANGE_REF(verts));
|
||||
|
||||
offset[1] = 1;
|
||||
fill_charverts(verts, cursor, scale, c, offset);
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], verts);
|
||||
sg_draw(0,4,1);
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], SG_RANGE_REF(verts));
|
||||
|
||||
offset[0] = -1;
|
||||
offset[1] = -1;
|
||||
fill_charverts(verts, cursor, scale, c, offset);
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], verts);
|
||||
sg_draw(0,4,1);
|
||||
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], SG_RANGE_REF(verts));
|
||||
*/
|
||||
offset[0] = offset[1] = 0;
|
||||
fill_charverts(verts, cursor, scale, c, offset);
|
||||
shader_setvec3(shader, "textColor", color);
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], verts);
|
||||
sg_draw(0,4,1);
|
||||
/* SET COLOR ? */
|
||||
sg_update_buffer(bind_text.vertex_buffers[0], SG_RANGE_REF(verts));
|
||||
}
|
||||
|
||||
void text_settype(struct sFont *mfont)
|
||||
|
@ -291,15 +312,10 @@ int renderText(const char *text, mfloat_t pos[2], float scale, mfloat_t color[3]
|
|||
mfloat_t cursor[2] = { 0.f };
|
||||
cursor[0] = pos[0];
|
||||
cursor[1] = pos[1];
|
||||
sg_apply_pipeline(pipe_text);
|
||||
sg_apply_bindings(&bind_text);
|
||||
sg_apply_uniforms(SG_SHADERSTAGE_FS,0,color);
|
||||
|
||||
const unsigned char *line, *wordstart, *drawstart;
|
||||
line = drawstart = (unsigned char*)text;
|
||||
|
||||
curchar = 0;
|
||||
|
||||
float *usecolor = color;
|
||||
|
||||
while (*line != '\0') {
|
||||
|
@ -347,10 +363,10 @@ int renderText(const char *text, mfloat_t pos[2], float scale, mfloat_t color[3]
|
|||
}
|
||||
}
|
||||
|
||||
if (caret > curchar) {
|
||||
/* if (caret > curchar) {
|
||||
draw_char_box(font->Characters[69], cursor, scale, color);
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
return cursor[1] - pos[1];
|
||||
|
|
|
@ -31,6 +31,9 @@ void sdrawCharacter(struct Character c, mfloat_t cursor[2], float scale, struct
|
|||
void text_settype(struct sFont *font);
|
||||
int renderText(const char *text, mfloat_t pos[2], float scale, mfloat_t color[3], float lw,int caret);
|
||||
|
||||
//void text_frame();
|
||||
void text_flush();
|
||||
|
||||
unsigned char *slurp_file(const char *filename);
|
||||
char *slurp_text(const char *filename);
|
||||
|
||||
|
|
|
@ -139,8 +139,13 @@ void openglRender(struct window *window)
|
|||
window->height, -1.f, 1.f);
|
||||
|
||||
// sprite_draw_all();
|
||||
gui_draw_img("pill1.png", 200, 200);
|
||||
// renderText("TEST RENDER", {100,100}, 1.f, {1.f,1.f,1.f}, 0,-1);
|
||||
// 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);
|
||||
|
||||
float b[2] = {50,50};
|
||||
renderText("TEST 2 RENDER", b, 1.f, w, 0,-1);
|
||||
|
||||
/* UI Elements & Debug elements */
|
||||
// glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||
|
@ -154,6 +159,7 @@ void openglRender(struct window *window)
|
|||
////// TEXT && GUI
|
||||
// glBindBuffer(GL_UNIFORM_BUFFER, projUBO);
|
||||
// glBufferSubData(GL_UNIFORM_BUFFER, 0, 64, ui_projection);
|
||||
text_flush();
|
||||
|
||||
// call_gui();
|
||||
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
#version 330 core
|
||||
in vec2 TexCoords;
|
||||
in vec3 fColor;
|
||||
|
||||
out vec4 color;
|
||||
|
||||
uniform sampler2D text;
|
||||
uniform vec3 textColor;
|
||||
uniform bool invert;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 sampled = vec4(1.0, 1.0, 1.0, texture(text, TexCoords).r);
|
||||
color = vec4(textColor, 1.0) * sampled;
|
||||
// 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)
|
||||
discard;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
#version 330 core
|
||||
layout (location = 0) in vec4 vertex; // <vec2 pos, vec2 tex>
|
||||
layout (location = 0) in vec2 vertex;
|
||||
layout (location = 1) in vec2 rect;
|
||||
layout (location = 2) in vec3 vColor;
|
||||
|
||||
out vec2 TexCoords;
|
||||
out vec3 fColor;
|
||||
|
||||
uniform mat4 projection;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = projection * vec4(vertex.xy, 0.0, 1.0);
|
||||
TexCoords = vertex.zw;
|
||||
gl_Position = projection * vec4(vertex, 0.0, 1.0);
|
||||
TexCoords = rect;
|
||||
|
||||
fColor = vColor;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue