font: add draw_float
This commit is contained in:
parent
fc8ac2170e
commit
25817f7780
@ -4,6 +4,8 @@
|
|||||||
#include "demo/ta_parameter_presets.hpp"
|
#include "demo/ta_parameter_presets.hpp"
|
||||||
#include "demo/texture.hpp"
|
#include "demo/texture.hpp"
|
||||||
|
|
||||||
|
#include "printf/unparse.h"
|
||||||
|
|
||||||
namespace font {
|
namespace font {
|
||||||
|
|
||||||
static inline vec2 transform_glyph_texture(const face& face, const vec2& t, int char_code)
|
static inline vec2 transform_glyph_texture(const face& face, const vec2& t, int char_code)
|
||||||
@ -70,6 +72,40 @@ namespace font {
|
|||||||
base_color);
|
base_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int format_float(char * s, float num)
|
||||||
|
{
|
||||||
|
int offset = 0;
|
||||||
|
bool negative = num < 0;
|
||||||
|
if (negative) {
|
||||||
|
s[offset++] = '-';
|
||||||
|
num = -num;
|
||||||
|
}
|
||||||
|
int32_t whole = num;
|
||||||
|
offset += unparse_base10_unsigned(&s[offset], whole, 0, 0);
|
||||||
|
s[offset++] = '.';
|
||||||
|
int32_t fraction = (int32_t)((num - (float)whole) * 1000.0);
|
||||||
|
if (fraction < 0)
|
||||||
|
fraction = -fraction;
|
||||||
|
offset += unparse_base10_unsigned(&s[offset], fraction, 3, '0');
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
void face::draw_float(ta_parameter_writer& writer,
|
||||||
|
const vec3& p,
|
||||||
|
float num,
|
||||||
|
uint32_t base_color,
|
||||||
|
int length) const
|
||||||
|
{
|
||||||
|
char s[20];
|
||||||
|
int offset = format_float(s, num);
|
||||||
|
s[offset] = 0;
|
||||||
|
float x = p.x;
|
||||||
|
if (offset < length) {
|
||||||
|
x += hori_advance * (length - offset);
|
||||||
|
}
|
||||||
|
draw_string(writer, {x, p.y, p.z}, s, base_color);
|
||||||
|
}
|
||||||
|
|
||||||
const face ter_u12n = {
|
const face ter_u12n = {
|
||||||
.texture_size = tsp_instruction_word::texture_u_size::from_int(128)
|
.texture_size = tsp_instruction_word::texture_u_size::from_int(128)
|
||||||
| tsp_instruction_word::texture_v_size::from_int(64),
|
| tsp_instruction_word::texture_v_size::from_int(64),
|
||||||
|
@ -22,6 +22,26 @@ namespace font {
|
|||||||
const vec3& p,
|
const vec3& p,
|
||||||
int c,
|
int c,
|
||||||
uint32_t base_color) const;
|
uint32_t base_color) const;
|
||||||
|
|
||||||
|
inline void draw_string(ta_parameter_writer& writer,
|
||||||
|
const vec3& p,
|
||||||
|
const char * s,
|
||||||
|
uint32_t base_color) const
|
||||||
|
{
|
||||||
|
const uint8_t * u8 = (const uint8_t *)s;
|
||||||
|
float x = p.x;
|
||||||
|
while (*u8) {
|
||||||
|
int c = *u8++;
|
||||||
|
draw_glyph(writer, {x, p.y, p.z}, c, base_color);
|
||||||
|
x += hori_advance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_float(ta_parameter_writer& writer,
|
||||||
|
const vec3& p,
|
||||||
|
float num,
|
||||||
|
uint32_t base_color,
|
||||||
|
int length = 0) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const face ter_u12n;
|
extern const face ter_u12n;
|
||||||
|
@ -96,6 +96,8 @@ namespace graphics {
|
|||||||
{
|
{
|
||||||
font::ter_u12n.global(writer);
|
font::ter_u12n.global(writer);
|
||||||
font::ter_u12n.draw_glyph(writer, vec3(10, 10, 10), 'a', 0xffffffff);
|
font::ter_u12n.draw_glyph(writer, vec3(10, 10, 10), 'a', 0xffffffff);
|
||||||
|
font::ter_u12n.draw_float(writer, vec3(10, 22, 10), 1.234, 0xffffffff, 7);
|
||||||
|
font::ter_u12n.draw_float(writer, vec3(10, 34, 10), -50.234, 0xffffffff, 7);
|
||||||
|
|
||||||
writer.append<ta_global_parameter::end_of_list>() =
|
writer.append<ta_global_parameter::end_of_list>() =
|
||||||
ta_global_parameter::end_of_list(para_control::para_type::end_of_list);
|
ta_global_parameter::end_of_list(para_control::para_type::end_of_list);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user