sync fwk
parent
4af34422f2
commit
5738a5615a
|
@ -3440,7 +3440,8 @@ float scale;
|
|||
void timer_destroy(unsigned timer_handle);
|
||||
typedef vec3i guid;
|
||||
guid guid_create();
|
||||
float ease_nop(float t);
|
||||
float ease_zero(float t);
|
||||
float ease_one(float t);
|
||||
float ease_linear(float t);
|
||||
float ease_out_sine(float t);
|
||||
float ease_out_quad(float t);
|
||||
|
@ -3487,7 +3488,8 @@ EASE_BOUNCE,
|
|||
EASE_IN,
|
||||
EASE_OUT = 0,
|
||||
EASE_INOUT = EASE_IN * 2,
|
||||
EASE_NOP = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ZERO = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ONE,
|
||||
EASE_LINEAR,
|
||||
EASE_INOUT_PERLIN,
|
||||
EASE_NUM
|
||||
|
|
|
@ -4,7 +4,8 @@ struct {
|
|||
float (*ease)(float);
|
||||
const char *name;
|
||||
} easings[] = {
|
||||
{ease_nop, "ease_nop"},
|
||||
{ease_zero, "ease_zero"},
|
||||
{ease_one, "ease_one"},
|
||||
{ease_linear, "ease_linear"},
|
||||
{ease_out_sine, "ease_out_sine"},
|
||||
{ease_out_quad, "ease_out_quad"},
|
||||
|
|
|
@ -153,7 +153,8 @@ int editor_toolbar(int x, int y, int incw, int inch, const char *sym) {
|
|||
int my = input(MOUSE_Y);
|
||||
int inc = maxi(incw, inch);
|
||||
|
||||
static int ox = 0, oy = 0, dragging = 0; // drag origin
|
||||
static int ox = 0, oy = 0; // drag origin
|
||||
static uint64_t dragging = 0;
|
||||
|
||||
editor_toolbar_rect = vec4(x,y,x + (incw ? incw * array_count(codepoints) : inch), y + (inch ? inch * array_count(codepoints) : incw) );
|
||||
int oo = is_hovering(editor_toolbar_rect, vec2(ox,oy));
|
||||
|
@ -167,20 +168,24 @@ int editor_toolbar(int x, int y, int incw, int inch, const char *sym) {
|
|||
ix += incw;
|
||||
iy += inch;
|
||||
}
|
||||
// debug:
|
||||
// ddraw_push_2d();
|
||||
// ddraw_aabb(vec3(editor_toolbar_rect.x,editor_toolbar_rect.y,0),vec3(editor_toolbar_rect.z,editor_toolbar_rect.w,0));
|
||||
// ddraw_pop_2d();
|
||||
if( 0 && editor_toolbar_hovered() ) { // debug:
|
||||
ddraw_push_2d();
|
||||
ddraw_aabb(vec3(editor_toolbar_rect.x,editor_toolbar_rect.y,0),vec3(editor_toolbar_rect.z,editor_toolbar_rect.w,0));
|
||||
ddraw_pop_2d();
|
||||
}
|
||||
|
||||
if( 1 ) // is_hovering(editor_toolbar_rect, vec2(mx,my)) )
|
||||
{
|
||||
if( input_down(MOUSE_L) && editor_toolbar_hovered() ) {
|
||||
uint64_t id = hash_bin(&editor_toolbar_rect, sizeof(vec4));
|
||||
|
||||
if( input_down(MOUSE_L) && editor_toolbar_hovered() && !dragging ) {
|
||||
window_cursor_shape(0);
|
||||
editor_toolbar_drag = vec4(0,0, mx,my);
|
||||
ox = mx, oy = my, dragging = 1;
|
||||
ox = mx, oy = my, dragging = id;
|
||||
int mcx = ((ox - x) / inc) + 1, mcy = ((oy - y) / inc) + 1; // mouse cells
|
||||
return incw ? -mcx : -mcy;
|
||||
}
|
||||
if( input(MOUSE_L) && dragging ) {
|
||||
if( input(MOUSE_L) && dragging == id ) {
|
||||
int mcx = ((ox - x) / inc) + 1, mcy = ((oy - y) / inc) + 1; // mouse cells
|
||||
editor_toolbar_drag.x = mx - editor_toolbar_drag.z;
|
||||
editor_toolbar_drag.y = my - editor_toolbar_drag.w;
|
||||
|
@ -190,14 +195,13 @@ int editor_toolbar(int x, int y, int incw, int inch, const char *sym) {
|
|||
editor_toolbar_drag.w = oy;
|
||||
return incw ? -mcx : -mcy;
|
||||
}
|
||||
if( input_up(MOUSE_L) && dragging ) {
|
||||
if( input_up(MOUSE_L) && dragging == id ) {
|
||||
int mcx = ((ox - x) / inc) + 1, mcy = ((oy - y) / inc) + 1; // mouse cells
|
||||
window_cursor_shape(CURSOR_SW_AUTO);
|
||||
ox = oy = 0, dragging = 0;
|
||||
return incw ? mcx : mcy;
|
||||
}
|
||||
}
|
||||
editor_toolbar_drag = vec4(0,0,0,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -472,26 +476,51 @@ int main(){
|
|||
|
||||
camera_t *cam = camera_get_active();
|
||||
|
||||
int choice1 = editor_toolbar(window_width()-32, ui_has_menubar() ? 34 : 0, 0, 32,
|
||||
int font_ascent_diff = 4; // ascent(mdi) - ascent(md) // @todo: move this into font api
|
||||
|
||||
|
||||
|
||||
int choiceV = editor_toolbar(window_width()-32, ui_has_menubar() ? 34 + font_ascent_diff : 0, 0, 32,
|
||||
va(
|
||||
ICON_MD_VISIBILITY
|
||||
ICON_MD_360 // ICON_MDI_ORBIT
|
||||
ICON_MDI_ARROW_ALL
|
||||
ICON_MD_LOUPE // ZOOM_OUT_MAP // ICON_MD_ZOOM_IN
|
||||
ICON_MD_GRID_ON ); // ICON_MDI_GRID );
|
||||
int choice2 = editor_toolbar(window_width()-32*2, ui_has_menubar() ? 34 : 0, -32, 0, ICON_MD_SQUARE_FOOT );
|
||||
"%s", camera_get_active()->orthographic ? ICON_MDI_AXIS_ARROW_INFO : ICON_MDI_AXIS_ARROW // ICON_MDI_GRID_OFF : ICON_MDI_GRID // ICON_MD_GRID_ON
|
||||
)
|
||||
);
|
||||
static int rot_snapping = 0;
|
||||
static int pos_snapping = 1;
|
||||
int choiceH = editor_toolbar(window_width()-32*2, ui_has_menubar() ? 34 : 0, -32, 0,
|
||||
va(
|
||||
ICON_MDI_ANGLE_ACUTE
|
||||
//ICON_MDI_ARROW_COLLAPSE
|
||||
//ICON_MDI_ARTBOARD
|
||||
"%s", pos_snapping ? ICON_MDI_DOTS_SQUARE : ICON_MDI_DOTS_CIRCLE
|
||||
)
|
||||
);
|
||||
|
||||
if( choice1 > 0 ) { // clicked[>0]
|
||||
if( choiceV ) { // clicked[>0] dragged[<0]
|
||||
camera_t *cam = camera_get_active();
|
||||
if( choice1 == 4 ) cam->orthographic ^= 1, camera_fps(cam, 0, 0);
|
||||
}
|
||||
if( choice1 < 0 ) { // dragged[<0]
|
||||
vec2 mouse_sensitivity = vec2(0.1, -0.1); // sensitivity + polarity
|
||||
vec2 drag = mul2( editor_toolbar_dragged(), mouse_sensitivity );
|
||||
if( choice1 == -1 ) camera_fps(cam, drag.x, drag.y );
|
||||
if( choice1 == -2 ) camera_orbit(cam, drag.x, drag.y, 0); //len3(cam->position) );
|
||||
if( choice1 == -3 ) camera_fov(cam, cam->fov += drag.y - drag.x);
|
||||
if( choiceV == -1 ) camera_fps(cam, drag.x, drag.y );
|
||||
if( choiceV == -2 ) camera_orbit(cam, drag.x, drag.y, 0); //len3(cam->position) );
|
||||
if( choiceV == -3 ) camera_moveby(cam, scale3(vec3(drag.x, drag.y, 0), 10)) ;
|
||||
if( choiceV == -4 ) camera_fov(cam, cam->fov += drag.y - drag.x);
|
||||
if( choiceV == 5 ) cam->orthographic ^= 1, camera_fps(cam, 0, 0);
|
||||
}
|
||||
if( choiceH ) {
|
||||
if( choiceH == 2 ) pos_snapping ^= 1;
|
||||
}
|
||||
|
||||
// font demo
|
||||
font_print(va(FONT_BOTTOM FONT_RIGHT FONT_H6 "(CAM: %5.2f,%5.2f,%5.2f)", cam->position.x, cam->position.y, cam->position.z));
|
||||
//
|
||||
char *cam_info = NULL, *cam_info_fmt = FONT_BOTTOM FONT_RIGHT FONT_H5;
|
||||
if( choiceV == -1 ) cam_info = va("%s(CAM POS: %5.2f,%5.2f,%5.2f)", cam_info_fmt, cam->position.x, cam->position.y, cam->position.z, cam->fov);
|
||||
if( choiceV == -2 ) cam_info = va("%s(CAM YAW: %5.2f PITCH: %5.2f)", cam_info_fmt, cam->yaw, cam->pitch);
|
||||
if( choiceV == -4 ) cam_info = va("%s(CAM FOV: %5.2f)", cam_info_fmt, cam->fov);
|
||||
if( choiceV == -5 ) cam_info = va("%s(CAM ORTHOGRAPHIC: %d)", cam_info_fmt, cam->orthographic);
|
||||
if( choiceH == -2 ) cam_info = va("%s(OBJ SNAPPING: %d)", cam_info_fmt, pos_snapping);
|
||||
if( cam_info ) font_print(cam_info);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18335,7 +18335,8 @@ AUTORUN {
|
|||
// ----------------------------------------------------------------------------
|
||||
// ease
|
||||
|
||||
API float ease_nop(float t);
|
||||
API float ease_zero(float t);
|
||||
API float ease_one(float t);
|
||||
API float ease_linear(float t);
|
||||
|
||||
API float ease_out_sine(float t);
|
||||
|
@ -18389,7 +18390,8 @@ enum EASE_FLAGS {
|
|||
EASE_OUT = 0,
|
||||
EASE_INOUT = EASE_IN * 2,
|
||||
|
||||
EASE_NOP = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ZERO = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ONE,
|
||||
EASE_LINEAR,
|
||||
EASE_INOUT_PERLIN,
|
||||
|
||||
|
@ -32815,7 +32817,6 @@ int gladLoadGL( GLADloadfunc load) {
|
|||
#define BQ_PLATFORM_IMPLEMENTATION // websocket
|
||||
#define BQ_WEBSOCKET_IMPLEMENTATION // websocket
|
||||
#define XML_C // xml
|
||||
#define LIGHTMAPPER_IMPLEMENTATION // lightmapper
|
||||
#ifdef __APPLE__
|
||||
#define MA_NO_RUNTIME_LINKING // miniaudio osx
|
||||
#define _GLFW_COCOA // glfw osx
|
||||
|
@ -347878,6 +347879,8 @@ void lt_tick(struct lua_State *L) {
|
|||
}
|
||||
#line 0
|
||||
|
||||
#define LIGHTMAPPER_IMPLEMENTATION
|
||||
//#define LM_DEBUG_INTERPOLATION
|
||||
#line 1 "3rd_lightmapper.h"
|
||||
/***********************************************************
|
||||
* A single header file OpenGL lightmapping library *
|
||||
|
@ -349659,7 +349662,8 @@ lm_bool lmImageSaveTGAf(const char *filename, const float *image, int w, int h,
|
|||
return success;
|
||||
}
|
||||
|
||||
#endif // LIGHTMAPPER_IMPLEMENTATION#line 0
|
||||
#endif // LIGHTMAPPER_IMPLEMENTATION
|
||||
#line 0
|
||||
|
||||
#endif // V4K_3RD
|
||||
/* game framework.
|
||||
|
@ -350498,7 +350502,7 @@ const char *extract_utf32(const char *s, uint32_t *out) {
|
|||
/**/ if( (s[0] & 0x80) == 0x00 ) return *out = (s[0]), s + 1;
|
||||
else if( (s[0] & 0xe0) == 0xc0 ) return *out = (s[0] & 31) << 6 | (s[1] & 63), s + 2;
|
||||
else if( (s[0] & 0xf0) == 0xe0 ) return *out = (s[0] & 15) << 12 | (s[1] & 63) << 6 | (s[2] & 63), s + 3;
|
||||
else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 8 | (s[3] & 63), s + 4;
|
||||
else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 6 | (s[3] & 63), s + 4;
|
||||
return *out = 0, s + 0;
|
||||
}
|
||||
array(uint32_t) string32( const char *utf8 ) {
|
||||
|
@ -359705,7 +359709,8 @@ static const unsigned table_middle_east[] = {
|
|||
|
||||
static const unsigned table_emoji[] = {
|
||||
// 0xE000, 0xEB4C, // Private use (emojis)
|
||||
0xE000, 0xF8FF, // Private use (emojis+webfonts)
|
||||
0xE000, 0xF68B, // Private use (emojis+webfonts). U+F68C excluded
|
||||
0xF68D, 0xF8FF, // Private use (emojis+webfonts)
|
||||
0xF0001,0xF1CC7,// Private use (icon mdi)
|
||||
0
|
||||
};
|
||||
|
@ -360053,13 +360058,25 @@ void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len,
|
|||
unsigned char *bitmap = (unsigned char*)MALLOC(f->height*f->width);
|
||||
|
||||
int charCount = *array_back(sorted) - sorted[0] + 1; // 0xEFFFF;
|
||||
f->begin = sorted[0];
|
||||
f->cdata = (stbtt_packedchar*)CALLOC(1, sizeof(stbtt_packedchar) * charCount);
|
||||
f->iter2cp = (unsigned*)MALLOC( sizeof(unsigned) * charCount );
|
||||
f->cp2iter = (unsigned*)MALLOC( sizeof(unsigned) * charCount );
|
||||
for( int i = 0; i < charCount; ++i )
|
||||
f->iter2cp[i] = f->cp2iter[i] = 0xFFFD; // default invalid glyph
|
||||
|
||||
// find first char
|
||||
{
|
||||
stbtt_fontinfo info = {0};
|
||||
stbtt_InitFont(&info, ttf_data, stbtt_GetFontOffsetForIndex(ttf_data,0));
|
||||
|
||||
for( int i = 0, end = array_count(sorted); i < end; ++i ) {
|
||||
unsigned glyph = sorted[i];
|
||||
if(!stbtt_FindGlyphIndex(&info, glyph)) continue;
|
||||
f->begin = glyph;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
stbtt_pack_context pc;
|
||||
if( !stbtt_PackBegin(&pc, bitmap, f->width, f->height, 0, 1, NULL) ) {
|
||||
PANIC("Failed to initialize atlas font");
|
||||
|
@ -360072,6 +360089,8 @@ void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len,
|
|||
while( i < (num-1) && (sorted[i+1]-sorted[i]) == 1 ) end = sorted[++i];
|
||||
//printf("(%d,%d)", (unsigned)begin, (unsigned)end);
|
||||
|
||||
if( begin < f->begin ) continue;
|
||||
|
||||
if( stbtt_PackFontRange(&pc, ttf_data, 0, f->font_size, begin, end - begin + 1, (stbtt_packedchar*)f->cdata + begin - f->begin) ) {
|
||||
for( uint64_t cp = begin; cp <= end; ++cp ) {
|
||||
// unicode->index runtime lookup
|
||||
|
@ -360382,7 +360401,7 @@ vec2 font_draw_ex(const char *text, vec2 offset, const char *col, void (*draw_cm
|
|||
// convert to vbo data
|
||||
int cp = ch - f->begin; // f->cp2iter[ch - f->begin];
|
||||
//if(cp == 0xFFFD) continue;
|
||||
//if(cp > f->num_glyphs) cp = 0xFFFD;
|
||||
//if (cp > f->num_glyphs) continue;
|
||||
|
||||
*t++ = X;
|
||||
*t++ = Y;
|
||||
|
@ -374693,7 +374712,8 @@ guid guid_create() {
|
|||
// ----------------------------------------------------------------------------
|
||||
// ease
|
||||
|
||||
float ease_nop(float t) { return 0; }
|
||||
float ease_zero(float t) { return 0; }
|
||||
float ease_one(float t) { return 1; }
|
||||
float ease_linear(float t) { return t; }
|
||||
|
||||
float ease_out_sine(float t) { return sinf(t*(C_PI*0.5f)); }
|
||||
|
@ -374767,7 +374787,8 @@ float ease(float t01, unsigned mode) {
|
|||
ease_inout_elastic,
|
||||
ease_inout_bounce,
|
||||
|
||||
ease_nop,
|
||||
ease_zero,
|
||||
ease_one,
|
||||
ease_linear,
|
||||
ease_inout_perlin,
|
||||
};
|
||||
|
@ -374814,7 +374835,8 @@ const char **ease_enums() {
|
|||
"ease_inout_elastic",
|
||||
"ease_inout_bounce",
|
||||
|
||||
"ease_nop",
|
||||
"ease_zero",
|
||||
"ease_one",
|
||||
"ease_linear",
|
||||
"ease_inout_perlin",
|
||||
|
||||
|
@ -374862,7 +374884,8 @@ const char *ease_enum(unsigned mode) {
|
|||
ENUM(EASE_ELASTIC|EASE_INOUT);
|
||||
ENUM(EASE_BOUNCE|EASE_INOUT);
|
||||
|
||||
ENUM(EASE_NOP);
|
||||
ENUM(EASE_ZERO);
|
||||
ENUM(EASE_ONE);
|
||||
ENUM(EASE_LINEAR);
|
||||
ENUM(EASE_INOUT_PERLIN);
|
||||
};*/
|
||||
|
@ -379918,7 +379941,7 @@ int ui_tween(const char *label, tween_t *t) {
|
|||
ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue;
|
||||
|
||||
struct nk_color c = nk_hsva_f(ui_hue, 0.75f, 0.8f, ui_alpha);
|
||||
nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_NOP ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color));
|
||||
nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_ZERO ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color));
|
||||
}
|
||||
|
||||
// horizontal line
|
||||
|
|
|
@ -1778,4 +1778,4 @@ lm_bool lmImageSaveTGAf(const char *filename, const float *image, int w, int h,
|
|||
return success;
|
||||
}
|
||||
|
||||
#endif // LIGHTMAPPER_IMPLEMENTATION
|
||||
#endif // LIGHTMAPPER_IMPLEMENTATION
|
||||
|
|
|
@ -53,7 +53,6 @@
|
|||
#define BQ_PLATFORM_IMPLEMENTATION // websocket
|
||||
#define BQ_WEBSOCKET_IMPLEMENTATION // websocket
|
||||
#define XML_C // xml
|
||||
#define LIGHTMAPPER_IMPLEMENTATION // lightmapper
|
||||
#ifdef __APPLE__
|
||||
#define MA_NO_RUNTIME_LINKING // miniaudio osx
|
||||
#define _GLFW_COCOA // glfw osx
|
||||
|
@ -218,6 +217,8 @@ static char *ui_filter = 0;
|
|||
{{FILE:3rd_lite_sys.h}}
|
||||
{{FILE:3rd_lite.h}}
|
||||
|
||||
#define LIGHTMAPPER_IMPLEMENTATION
|
||||
//#define LM_DEBUG_INTERPOLATION
|
||||
{{FILE:3rd_lightmapper.h}}
|
||||
|
||||
#endif // V4K_3RD
|
||||
|
|
|
@ -72,7 +72,7 @@ int ui_tween(const char *label, tween_t *t) {
|
|||
ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue;
|
||||
|
||||
struct nk_color c = nk_hsva_f(ui_hue, 0.75f, 0.8f, ui_alpha);
|
||||
nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_NOP ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color));
|
||||
nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_ZERO ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color));
|
||||
}
|
||||
|
||||
// horizontal line
|
||||
|
|
|
@ -1387,7 +1387,8 @@ static const unsigned table_middle_east[] = {
|
|||
|
||||
static const unsigned table_emoji[] = {
|
||||
// 0xE000, 0xEB4C, // Private use (emojis)
|
||||
0xE000, 0xF8FF, // Private use (emojis+webfonts)
|
||||
0xE000, 0xF68B, // Private use (emojis+webfonts). U+F68C excluded
|
||||
0xF68D, 0xF8FF, // Private use (emojis+webfonts)
|
||||
0xF0001,0xF1CC7,// Private use (icon mdi)
|
||||
0
|
||||
};
|
||||
|
@ -1735,13 +1736,25 @@ void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len,
|
|||
unsigned char *bitmap = (unsigned char*)MALLOC(f->height*f->width);
|
||||
|
||||
int charCount = *array_back(sorted) - sorted[0] + 1; // 0xEFFFF;
|
||||
f->begin = sorted[0];
|
||||
f->cdata = (stbtt_packedchar*)CALLOC(1, sizeof(stbtt_packedchar) * charCount);
|
||||
f->iter2cp = (unsigned*)MALLOC( sizeof(unsigned) * charCount );
|
||||
f->cp2iter = (unsigned*)MALLOC( sizeof(unsigned) * charCount );
|
||||
for( int i = 0; i < charCount; ++i )
|
||||
f->iter2cp[i] = f->cp2iter[i] = 0xFFFD; // default invalid glyph
|
||||
|
||||
// find first char
|
||||
{
|
||||
stbtt_fontinfo info = {0};
|
||||
stbtt_InitFont(&info, ttf_data, stbtt_GetFontOffsetForIndex(ttf_data,0));
|
||||
|
||||
for( int i = 0, end = array_count(sorted); i < end; ++i ) {
|
||||
unsigned glyph = sorted[i];
|
||||
if(!stbtt_FindGlyphIndex(&info, glyph)) continue;
|
||||
f->begin = glyph;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
stbtt_pack_context pc;
|
||||
if( !stbtt_PackBegin(&pc, bitmap, f->width, f->height, 0, 1, NULL) ) {
|
||||
PANIC("Failed to initialize atlas font");
|
||||
|
@ -1754,6 +1767,8 @@ void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len,
|
|||
while( i < (num-1) && (sorted[i+1]-sorted[i]) == 1 ) end = sorted[++i];
|
||||
//printf("(%d,%d)", (unsigned)begin, (unsigned)end);
|
||||
|
||||
if( begin < f->begin ) continue;
|
||||
|
||||
if( stbtt_PackFontRange(&pc, ttf_data, 0, f->font_size, begin, end - begin + 1, (stbtt_packedchar*)f->cdata + begin - f->begin) ) {
|
||||
for( uint64_t cp = begin; cp <= end; ++cp ) {
|
||||
// unicode->index runtime lookup
|
||||
|
@ -2064,7 +2079,7 @@ vec2 font_draw_ex(const char *text, vec2 offset, const char *col, void (*draw_cm
|
|||
// convert to vbo data
|
||||
int cp = ch - f->begin; // f->cp2iter[ch - f->begin];
|
||||
//if(cp == 0xFFFD) continue;
|
||||
//if(cp > f->num_glyphs) cp = 0xFFFD;
|
||||
//if (cp > f->num_glyphs) continue;
|
||||
|
||||
*t++ = X;
|
||||
*t++ = Y;
|
||||
|
|
|
@ -331,7 +331,7 @@ const char *extract_utf32(const char *s, uint32_t *out) {
|
|||
/**/ if( (s[0] & 0x80) == 0x00 ) return *out = (s[0]), s + 1;
|
||||
else if( (s[0] & 0xe0) == 0xc0 ) return *out = (s[0] & 31) << 6 | (s[1] & 63), s + 2;
|
||||
else if( (s[0] & 0xf0) == 0xe0 ) return *out = (s[0] & 15) << 12 | (s[1] & 63) << 6 | (s[2] & 63), s + 3;
|
||||
else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 8 | (s[3] & 63), s + 4;
|
||||
else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 6 | (s[3] & 63), s + 4;
|
||||
return *out = 0, s + 0;
|
||||
}
|
||||
array(uint32_t) string32( const char *utf8 ) {
|
||||
|
|
|
@ -250,7 +250,8 @@ guid guid_create() {
|
|||
// ----------------------------------------------------------------------------
|
||||
// ease
|
||||
|
||||
float ease_nop(float t) { return 0; }
|
||||
float ease_zero(float t) { return 0; }
|
||||
float ease_one(float t) { return 1; }
|
||||
float ease_linear(float t) { return t; }
|
||||
|
||||
float ease_out_sine(float t) { return sinf(t*(C_PI*0.5f)); }
|
||||
|
@ -324,7 +325,8 @@ float ease(float t01, unsigned mode) {
|
|||
ease_inout_elastic,
|
||||
ease_inout_bounce,
|
||||
|
||||
ease_nop,
|
||||
ease_zero,
|
||||
ease_one,
|
||||
ease_linear,
|
||||
ease_inout_perlin,
|
||||
};
|
||||
|
@ -371,7 +373,8 @@ const char **ease_enums() {
|
|||
"ease_inout_elastic",
|
||||
"ease_inout_bounce",
|
||||
|
||||
"ease_nop",
|
||||
"ease_zero",
|
||||
"ease_one",
|
||||
"ease_linear",
|
||||
"ease_inout_perlin",
|
||||
|
||||
|
@ -419,7 +422,8 @@ const char *ease_enum(unsigned mode) {
|
|||
ENUM(EASE_ELASTIC|EASE_INOUT);
|
||||
ENUM(EASE_BOUNCE|EASE_INOUT);
|
||||
|
||||
ENUM(EASE_NOP);
|
||||
ENUM(EASE_ZERO);
|
||||
ENUM(EASE_ONE);
|
||||
ENUM(EASE_LINEAR);
|
||||
ENUM(EASE_INOUT_PERLIN);
|
||||
};*/
|
||||
|
|
|
@ -45,7 +45,8 @@ AUTORUN {
|
|||
// ----------------------------------------------------------------------------
|
||||
// ease
|
||||
|
||||
API float ease_nop(float t);
|
||||
API float ease_zero(float t);
|
||||
API float ease_one(float t);
|
||||
API float ease_linear(float t);
|
||||
|
||||
API float ease_out_sine(float t);
|
||||
|
@ -99,7 +100,8 @@ enum EASE_FLAGS {
|
|||
EASE_OUT = 0,
|
||||
EASE_INOUT = EASE_IN * 2,
|
||||
|
||||
EASE_NOP = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ZERO = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ONE,
|
||||
EASE_LINEAR,
|
||||
EASE_INOUT_PERLIN,
|
||||
|
||||
|
|
|
@ -13981,7 +13981,6 @@ int gladLoadGL( GLADloadfunc load) {
|
|||
#define BQ_PLATFORM_IMPLEMENTATION // websocket
|
||||
#define BQ_WEBSOCKET_IMPLEMENTATION // websocket
|
||||
#define XML_C // xml
|
||||
#define LIGHTMAPPER_IMPLEMENTATION // lightmapper
|
||||
#ifdef __APPLE__
|
||||
#define MA_NO_RUNTIME_LINKING // miniaudio osx
|
||||
#define _GLFW_COCOA // glfw osx
|
||||
|
@ -329044,6 +329043,8 @@ void lt_tick(struct lua_State *L) {
|
|||
}
|
||||
#line 0
|
||||
|
||||
#define LIGHTMAPPER_IMPLEMENTATION
|
||||
//#define LM_DEBUG_INTERPOLATION
|
||||
#line 1 "3rd_lightmapper.h"
|
||||
/***********************************************************
|
||||
* A single header file OpenGL lightmapping library *
|
||||
|
@ -330825,6 +330826,7 @@ lm_bool lmImageSaveTGAf(const char *filename, const float *image, int w, int h,
|
|||
return success;
|
||||
}
|
||||
|
||||
#endif // LIGHTMAPPER_IMPLEMENTATION#line 0
|
||||
#endif // LIGHTMAPPER_IMPLEMENTATION
|
||||
#line 0
|
||||
|
||||
#endif // V4K_3RD
|
||||
|
|
37
engine/v4k.c
37
engine/v4k.c
|
@ -834,7 +834,7 @@ const char *extract_utf32(const char *s, uint32_t *out) {
|
|||
/**/ if( (s[0] & 0x80) == 0x00 ) return *out = (s[0]), s + 1;
|
||||
else if( (s[0] & 0xe0) == 0xc0 ) return *out = (s[0] & 31) << 6 | (s[1] & 63), s + 2;
|
||||
else if( (s[0] & 0xf0) == 0xe0 ) return *out = (s[0] & 15) << 12 | (s[1] & 63) << 6 | (s[2] & 63), s + 3;
|
||||
else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 8 | (s[3] & 63), s + 4;
|
||||
else if( (s[0] & 0xf8) == 0xf0 ) return *out = (s[0] & 7) << 18 | (s[1] & 63) << 12 | (s[2] & 63) << 6 | (s[3] & 63), s + 4;
|
||||
return *out = 0, s + 0;
|
||||
}
|
||||
array(uint32_t) string32( const char *utf8 ) {
|
||||
|
@ -10041,7 +10041,8 @@ static const unsigned table_middle_east[] = {
|
|||
|
||||
static const unsigned table_emoji[] = {
|
||||
// 0xE000, 0xEB4C, // Private use (emojis)
|
||||
0xE000, 0xF8FF, // Private use (emojis+webfonts)
|
||||
0xE000, 0xF68B, // Private use (emojis+webfonts). U+F68C excluded
|
||||
0xF68D, 0xF8FF, // Private use (emojis+webfonts)
|
||||
0xF0001,0xF1CC7,// Private use (icon mdi)
|
||||
0
|
||||
};
|
||||
|
@ -10389,13 +10390,25 @@ void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len,
|
|||
unsigned char *bitmap = (unsigned char*)MALLOC(f->height*f->width);
|
||||
|
||||
int charCount = *array_back(sorted) - sorted[0] + 1; // 0xEFFFF;
|
||||
f->begin = sorted[0];
|
||||
f->cdata = (stbtt_packedchar*)CALLOC(1, sizeof(stbtt_packedchar) * charCount);
|
||||
f->iter2cp = (unsigned*)MALLOC( sizeof(unsigned) * charCount );
|
||||
f->cp2iter = (unsigned*)MALLOC( sizeof(unsigned) * charCount );
|
||||
for( int i = 0; i < charCount; ++i )
|
||||
f->iter2cp[i] = f->cp2iter[i] = 0xFFFD; // default invalid glyph
|
||||
|
||||
// find first char
|
||||
{
|
||||
stbtt_fontinfo info = {0};
|
||||
stbtt_InitFont(&info, ttf_data, stbtt_GetFontOffsetForIndex(ttf_data,0));
|
||||
|
||||
for( int i = 0, end = array_count(sorted); i < end; ++i ) {
|
||||
unsigned glyph = sorted[i];
|
||||
if(!stbtt_FindGlyphIndex(&info, glyph)) continue;
|
||||
f->begin = glyph;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
stbtt_pack_context pc;
|
||||
if( !stbtt_PackBegin(&pc, bitmap, f->width, f->height, 0, 1, NULL) ) {
|
||||
PANIC("Failed to initialize atlas font");
|
||||
|
@ -10408,6 +10421,8 @@ void font_face_from_mem(const char *tag, const void *ttf_data, unsigned ttf_len,
|
|||
while( i < (num-1) && (sorted[i+1]-sorted[i]) == 1 ) end = sorted[++i];
|
||||
//printf("(%d,%d)", (unsigned)begin, (unsigned)end);
|
||||
|
||||
if( begin < f->begin ) continue;
|
||||
|
||||
if( stbtt_PackFontRange(&pc, ttf_data, 0, f->font_size, begin, end - begin + 1, (stbtt_packedchar*)f->cdata + begin - f->begin) ) {
|
||||
for( uint64_t cp = begin; cp <= end; ++cp ) {
|
||||
// unicode->index runtime lookup
|
||||
|
@ -10718,7 +10733,7 @@ vec2 font_draw_ex(const char *text, vec2 offset, const char *col, void (*draw_cm
|
|||
// convert to vbo data
|
||||
int cp = ch - f->begin; // f->cp2iter[ch - f->begin];
|
||||
//if(cp == 0xFFFD) continue;
|
||||
//if(cp > f->num_glyphs) cp = 0xFFFD;
|
||||
//if (cp > f->num_glyphs) continue;
|
||||
|
||||
*t++ = X;
|
||||
*t++ = Y;
|
||||
|
@ -25029,7 +25044,8 @@ guid guid_create() {
|
|||
// ----------------------------------------------------------------------------
|
||||
// ease
|
||||
|
||||
float ease_nop(float t) { return 0; }
|
||||
float ease_zero(float t) { return 0; }
|
||||
float ease_one(float t) { return 1; }
|
||||
float ease_linear(float t) { return t; }
|
||||
|
||||
float ease_out_sine(float t) { return sinf(t*(C_PI*0.5f)); }
|
||||
|
@ -25103,7 +25119,8 @@ float ease(float t01, unsigned mode) {
|
|||
ease_inout_elastic,
|
||||
ease_inout_bounce,
|
||||
|
||||
ease_nop,
|
||||
ease_zero,
|
||||
ease_one,
|
||||
ease_linear,
|
||||
ease_inout_perlin,
|
||||
};
|
||||
|
@ -25150,7 +25167,8 @@ const char **ease_enums() {
|
|||
"ease_inout_elastic",
|
||||
"ease_inout_bounce",
|
||||
|
||||
"ease_nop",
|
||||
"ease_zero",
|
||||
"ease_one",
|
||||
"ease_linear",
|
||||
"ease_inout_perlin",
|
||||
|
||||
|
@ -25198,7 +25216,8 @@ const char *ease_enum(unsigned mode) {
|
|||
ENUM(EASE_ELASTIC|EASE_INOUT);
|
||||
ENUM(EASE_BOUNCE|EASE_INOUT);
|
||||
|
||||
ENUM(EASE_NOP);
|
||||
ENUM(EASE_ZERO);
|
||||
ENUM(EASE_ONE);
|
||||
ENUM(EASE_LINEAR);
|
||||
ENUM(EASE_INOUT_PERLIN);
|
||||
};*/
|
||||
|
@ -30254,7 +30273,7 @@ int ui_tween(const char *label, tween_t *t) {
|
|||
ui_hue = (hash & 0x3F) / (float)0x3F; ui_hue += !ui_hue;
|
||||
|
||||
struct nk_color c = nk_hsva_f(ui_hue, 0.75f, 0.8f, ui_alpha);
|
||||
nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_NOP ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color));
|
||||
nk_fill_rect(canvas, pos, ROUNDING, k->ease == EASE_ZERO ? AS_NKCOLOR(0) : c); // AS_NKCOLOR(track_color));
|
||||
}
|
||||
|
||||
// horizontal line
|
||||
|
|
|
@ -4402,7 +4402,8 @@ AUTORUN {
|
|||
// ----------------------------------------------------------------------------
|
||||
// ease
|
||||
|
||||
API float ease_nop(float t);
|
||||
API float ease_zero(float t);
|
||||
API float ease_one(float t);
|
||||
API float ease_linear(float t);
|
||||
|
||||
API float ease_out_sine(float t);
|
||||
|
@ -4456,7 +4457,8 @@ enum EASE_FLAGS {
|
|||
EASE_OUT = 0,
|
||||
EASE_INOUT = EASE_IN * 2,
|
||||
|
||||
EASE_NOP = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ZERO = EASE_INOUT | (EASE_BOUNCE + 1),
|
||||
EASE_ONE,
|
||||
EASE_LINEAR,
|
||||
EASE_INOUT_PERLIN,
|
||||
|
||||
|
|
Loading…
Reference in New Issue