123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520 |
- //------------------------------------------------------------------------------
- // sokol-debugtext-test.c
- // For best results, run with ASAN and UBSAN.
- //------------------------------------------------------------------------------
- #include "sokol_gfx.h"
- #include "sokol_log.h"
- #define SOKOL_DEBUGTEXT_IMPL
- #include "sokol_debugtext.h"
- #include "utest.h"
- #define T(b) EXPECT_TRUE(b)
- #define TFLT(f0,f1) {T(fabs((f0)-(f1))<=(0.000001));}
- static void init(void) {
- sg_setup(&(sg_desc){ .logger = { .func = slog_func }});
- sdtx_setup(&(sdtx_desc_t){ .logger = { .func = slog_func }});
- }
- static void init_with(const sdtx_desc_t* desc) {
- sg_setup(&(sg_desc){0});
- sdtx_setup(desc);
- }
- static void shutdown(void) {
- sdtx_shutdown();
- sg_shutdown();
- }
- UTEST(sokol_debugtext, default_init_shutdown) {
- init();
- T(_sdtx.init_cookie == _SDTX_INIT_COOKIE);
- T(_sdtx.desc.context_pool_size == _SDTX_DEFAULT_CONTEXT_POOL_SIZE);
- T(_sdtx.desc.printf_buf_size == _SDTX_DEFAULT_PRINTF_BUF_SIZE);
- T(_sdtx.desc.context.char_buf_size == _SDTX_DEFAULT_CHAR_BUF_SIZE);
- T(_sdtx.desc.context.canvas_width == _SDTX_DEFAULT_CANVAS_WIDTH);
- T(_sdtx.desc.context.canvas_height == _SDTX_DEFAULT_CANVAS_HEIGHT);
- T(_sdtx.desc.context.tab_width == _SDTX_DEFAULT_TAB_WIDTH);
- T(_sdtx.desc.context.color_format == 0);
- T(_sdtx.desc.context.depth_format == 0);
- T(_sdtx.desc.context.sample_count == 0);
- for (int i = 0; i < SDTX_MAX_FONTS; i++) {
- T(_sdtx.desc.fonts[i].data.ptr == 0);
- T(_sdtx.desc.fonts[i].data.size == 0);
- T(_sdtx.desc.fonts[i].first_char == 0);
- T(_sdtx.desc.fonts[i].last_char == 0);
- }
- T(_sdtx.font_img.id != SG_INVALID_ID);
- T(_sdtx.shader.id != SG_INVALID_ID);
- T(_sdtx.fmt_buf_size == (_SDTX_DEFAULT_CHAR_BUF_SIZE + 1));
- T(_sdtx.fmt_buf);
- T(_sdtx.def_ctx_id.id != 0);
- T(_sdtx.def_ctx_id.id == _sdtx.cur_ctx_id.id);
- T(_sdtx.cur_ctx == _sdtx_lookup_context(_sdtx.cur_ctx_id.id));
- T(_sdtx.cur_ctx->desc.char_buf_size == _sdtx.desc.context.char_buf_size);
- T(_sdtx.cur_ctx->desc.canvas_width == _sdtx.desc.context.canvas_width);
- T(_sdtx.cur_ctx->desc.canvas_height == _sdtx.desc.context.canvas_height);
- T(_sdtx.cur_ctx->desc.tab_width == _sdtx.desc.context.tab_width);
- T(_sdtx.cur_ctx->desc.color_format == 0);
- T(_sdtx.cur_ctx->desc.depth_format == 0);
- T(_sdtx.cur_ctx->desc.sample_count == 0);
- T(_sdtx.cur_ctx->vertices.cap == _SDTX_DEFAULT_CHAR_BUF_SIZE * 6);
- T(_sdtx.cur_ctx->vertices.next == 0);
- T(_sdtx.cur_ctx->vertices.ptr);
- T(_sdtx.cur_ctx->commands.cap == _SDTX_DEFAULT_MAX_COMMANDS);
- T(_sdtx.cur_ctx->commands.next == 1);
- T(_sdtx.cur_ctx->commands.ptr);
- T(_sdtx.cur_ctx->vbuf.id != 0);
- T(_sdtx.cur_ctx->pip.id != 0);
- TFLT(_sdtx.cur_ctx->canvas_size.x, 640.0f);
- TFLT(_sdtx.cur_ctx->canvas_size.y, 480.0f);
- TFLT(_sdtx.cur_ctx->glyph_size.x, 8.0f / 640.0f);
- TFLT(_sdtx.cur_ctx->glyph_size.y, 8.0f / 480.0f);
- TFLT(_sdtx.cur_ctx->origin.x, 0.0f);
- TFLT(_sdtx.cur_ctx->origin.y, 0.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 0.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 0.0f);
- TFLT(_sdtx.cur_ctx->tab_width, 4.0f);
- T(_sdtx.cur_ctx->color == _SDTX_DEFAULT_COLOR);
- T(_sdtx.context_pool.contexts);
- T(_sdtx.context_pool.pool.size == (_SDTX_DEFAULT_CONTEXT_POOL_SIZE + 1));
- shutdown();
- T(_sdtx.init_cookie == 0);
- }
- UTEST(sokol_debugtext, init_with_params) {
- init_with(&(sdtx_desc_t){
- .context_pool_size = 2,
- .printf_buf_size = 128,
- .context = {
- .char_buf_size = 256,
- .canvas_width = 320,
- .canvas_height = 200,
- .tab_width = 8,
- .color_format = SG_PIXELFORMAT_RGBA8,
- .depth_format = SG_PIXELFORMAT_DEPTH_STENCIL,
- .sample_count = 4,
- }
- });
- T(_sdtx.init_cookie == _SDTX_INIT_COOKIE);
- T(_sdtx.desc.context_pool_size == 2);
- T(_sdtx.desc.printf_buf_size == 128);
- T(_sdtx.desc.context.char_buf_size == 256);
- T(_sdtx.desc.context.canvas_width == 320);
- T(_sdtx.desc.context.canvas_height == 200);
- T(_sdtx.desc.context.tab_width == 8);
- T(_sdtx.desc.context.color_format == SG_PIXELFORMAT_RGBA8);
- T(_sdtx.desc.context.depth_format == SG_PIXELFORMAT_DEPTH_STENCIL);
- T(_sdtx.desc.context.sample_count == 4);
- T(_sdtx.fmt_buf_size == 129);
- T(_sdtx.cur_ctx->desc.char_buf_size == _sdtx.desc.context.char_buf_size);
- T(_sdtx.cur_ctx->desc.canvas_width == _sdtx.desc.context.canvas_width);
- T(_sdtx.cur_ctx->desc.canvas_height == _sdtx.desc.context.canvas_height);
- T(_sdtx.cur_ctx->desc.tab_width == _sdtx.desc.context.tab_width);
- T(_sdtx.cur_ctx->desc.color_format == SG_PIXELFORMAT_RGBA8);
- T(_sdtx.cur_ctx->desc.depth_format == SG_PIXELFORMAT_DEPTH_STENCIL);
- T(_sdtx.cur_ctx->desc.sample_count == 4);
- T(_sdtx.cur_ctx->vertices.cap == (256 * 6));
- TFLT(_sdtx.cur_ctx->canvas_size.x, 320.0f);
- TFLT(_sdtx.cur_ctx->canvas_size.y, 200.0f);
- TFLT(_sdtx.cur_ctx->glyph_size.x, 8.0f / 320.0f);
- TFLT(_sdtx.cur_ctx->glyph_size.y, 8.0f / 200.0f);
- TFLT(_sdtx.cur_ctx->tab_width, 8.0f);
- T(_sdtx.context_pool.pool.size == 3);
- shutdown();
- }
- UTEST(sokol_debugtext, make_destroy_context) {
- init();
- sdtx_context ctx_id = sdtx_make_context(&(sdtx_context_desc_t){
- .char_buf_size = 64,
- .canvas_width = 1024,
- .canvas_height = 768,
- .tab_width = 3,
- .color_format = SG_PIXELFORMAT_RGBA32F,
- .sample_count = 2
- });
- T(ctx_id.id != 0);
- T(ctx_id.id != _sdtx.cur_ctx_id.id);
- _sdtx_context_t* ctx = _sdtx_lookup_context(ctx_id.id);
- T(ctx);
- T(ctx != _sdtx.cur_ctx);
- T(ctx->desc.char_buf_size == 64);
- T(ctx->desc.canvas_width == 1024);
- T(ctx->desc.canvas_height == 768);
- T(ctx->desc.tab_width == 3);
- T(ctx->desc.color_format == SG_PIXELFORMAT_RGBA32F);
- T(ctx->desc.depth_format == 0);
- T(ctx->desc.sample_count == 2);
- T(ctx->vertices.ptr);
- T(ctx->vertices.next == 0);
- T(ctx->vertices.cap == (64 * 6));
- TFLT(ctx->canvas_size.x, 1024.0f);
- TFLT(ctx->canvas_size.y, 768.0f);
- TFLT(ctx->glyph_size.x, 8.0f / 1024.0f);
- TFLT(ctx->glyph_size.y, 8.0f / 768.0f);
- TFLT(ctx->tab_width, 3.0f);
- sdtx_destroy_context(ctx_id);
- T(0 == _sdtx_lookup_context(ctx_id.id));
- T(ctx->desc.char_buf_size == 0);
- T(ctx->vertices.ptr == 0);
- shutdown();
- }
- UTEST(sokol_debugtext, get_default_context) {
- // getting the default context must always return SDTX_DEFAULT_CONTEXT
- init();
- T(sdtx_get_context().id == SDTX_DEFAULT_CONTEXT.id);
- shutdown();
- }
- UTEST(sokol_debugtext, set_get_context) {
- init();
- sdtx_context ctx_id = sdtx_make_context(&(sdtx_context_desc_t){ 0 });
- T(ctx_id.id != 0);
- T(ctx_id.id != _sdtx.cur_ctx_id.id);
- sdtx_set_context(ctx_id);
- T(sdtx_get_context().id == ctx_id.id);
- T(ctx_id.id == _sdtx.cur_ctx_id.id);
- const _sdtx_context_t* ctx = _sdtx_lookup_context(ctx_id.id);
- T(ctx == _sdtx.cur_ctx);
- sdtx_set_context(SDTX_DEFAULT_CONTEXT);
- T(sdtx_get_context().id == SDTX_DEFAULT_CONTEXT.id);
- T(_sdtx.cur_ctx);
- T(ctx != _sdtx.cur_ctx);
- T(_sdtx.cur_ctx == _sdtx_lookup_context(_sdtx.def_ctx_id.id));
- shutdown();
- }
- UTEST(sokol_debugtext, destroy_default_context) {
- // destroying the default context is not allowed
- init();
- sdtx_context def_ctx_id = _sdtx.def_ctx_id;
- T(def_ctx_id.id == _sdtx.cur_ctx_id.id);
- sdtx_destroy_context(def_ctx_id);
- T(def_ctx_id.id == _sdtx.def_ctx_id.id);
- T(def_ctx_id.id == _sdtx.cur_ctx_id.id);
- T(_sdtx.cur_ctx);
- shutdown();
- }
- UTEST(sokol_debugtext, destroy_current_context) {
- // destroying the current context has the same effect
- // as setting a current context with an invalid context handle
- init();
- sdtx_context ctx_id = sdtx_make_context(&(sdtx_context_desc_t){ 0 });
- sdtx_set_context(ctx_id);
- T(sdtx_get_context().id == ctx_id.id);
- T(ctx_id.id == _sdtx.cur_ctx_id.id);
- T(_sdtx_lookup_context(ctx_id.id) == _sdtx.cur_ctx);
- sdtx_destroy_context(ctx_id);
- T(_sdtx.cur_ctx_id.id == ctx_id.id);
- T(_sdtx.cur_ctx == 0);
- T(sdtx_get_context().id == ctx_id.id);
- shutdown();
- }
- UTEST(sokol_debugtext, ignore_invalid_context_handle) {
- // trying to render with an invalid context handle must not crash,
- // instead ignore all operations
- init();
- sdtx_context ctx_id = sdtx_make_context(&(sdtx_context_desc_t){ 0 });
- sdtx_set_context(ctx_id);
- sdtx_destroy_context(ctx_id);
- T(0 == _sdtx.cur_ctx);
- T(sdtx_get_context().id == ctx_id.id);
- sdtx_font(0);
- sdtx_canvas(100.0f, 200.0f);
- sdtx_origin(10.0f, 10.0f);
- sdtx_home();
- sdtx_pos(1.0f, 2.0f);
- sdtx_pos_x(1.0f);
- sdtx_pos_y(2.0f);
- sdtx_move(2.0f, 3.0f);
- sdtx_move_x(2.0f);
- sdtx_move_y(3.0f);
- sdtx_crlf();
- sdtx_color3b(255, 255, 255);
- sdtx_color3f(1.0f, 1.0f, 1.0f);
- sdtx_color4b(255, 255, 255, 255);
- sdtx_color4f(1.0f, 1.0f, 1.0f, 1.0f);
- sdtx_color1i(0xFFFFFFFF);
- sdtx_putc('A');
- sdtx_puts("Hello World!");
- sdtx_putr("Hello World!", 5);
- sdtx_printf("Hello World %d %d %d", 1, 2, 3);
- shutdown();
- }
- UTEST(sokol_debugtext, set_font) {
- init();
- T(0 == _sdtx.cur_ctx->cur_font);
- sdtx_font(1);
- T(1 == _sdtx.cur_ctx->cur_font);
- sdtx_font(2);
- T(2 == _sdtx.cur_ctx->cur_font);
- shutdown();
- }
- UTEST(sokol_debugtext, set_canvas) {
- init();
- sdtx_origin(10.0f, 11.0f);
- sdtx_pos(1.0f, 2.0f);
- sdtx_canvas(320.0f, 200.0f);
- TFLT(_sdtx.cur_ctx->canvas_size.x, 320.0f);
- TFLT(_sdtx.cur_ctx->canvas_size.y, 200.0f);
- TFLT(_sdtx.cur_ctx->glyph_size.x, 8.0f / 320.0f);
- TFLT(_sdtx.cur_ctx->glyph_size.y, 8.0f / 200.0f);
- // origin and pos must be reset to 0 when canvas is set
- TFLT(_sdtx.cur_ctx->origin.x, 0.0f);
- TFLT(_sdtx.cur_ctx->origin.y, 0.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 0.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 0.0f);
- shutdown();
- }
- UTEST(sokol_debugtext, set_origin) {
- init();
- sdtx_origin(10.0f, 20.0f);
- TFLT(_sdtx.cur_ctx->origin.x, 10.0f);
- TFLT(_sdtx.cur_ctx->origin.y, 20.0f);
- shutdown();
- }
- UTEST(sokol_debugtext, cursor_movement) {
- init();
- sdtx_pos(1.0f, 2.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 1.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 2.0f);
- sdtx_pos_x(5.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 5.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 2.0f);
- sdtx_pos_y(6.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 5.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 6.0f);
- sdtx_move(-1.0f, -3.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 4.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 3.0f);
- sdtx_move_x(+1.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 5.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 3.0f);
- sdtx_move_y(+3.0f);
- TFLT(_sdtx.cur_ctx->pos.x, 5.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 6.0f);
- sdtx_crlf();
- TFLT(_sdtx.cur_ctx->pos.x, 0.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 7.0f);
- sdtx_pos(20.0f, 30.0f);
- sdtx_home();
- TFLT(_sdtx.cur_ctx->pos.x, 0.0f);
- TFLT(_sdtx.cur_ctx->pos.y, 0.0f);
- shutdown();
- }
- UTEST(sokol_debugtext, set_color) {
- init();
- T(_sdtx.cur_ctx->color == _SDTX_DEFAULT_COLOR);
- sdtx_color3b(255, 127, 0);
- T(_sdtx.cur_ctx->color == 0xFF007FFF);
- sdtx_color4b(0, 127, 255, 255);
- T(_sdtx.cur_ctx->color == 0xFFFF7F00);
- sdtx_color3f(1.0f, 0.5f, 0.0f);
- T(_sdtx.cur_ctx->color == 0xFF007FFF);
- sdtx_color4f(0.0f, 0.5f, 1.0f, 1.0f);
- T(_sdtx.cur_ctx->color == 0xFFFF7F00);
- sdtx_color1i(0xFF000000);
- T(_sdtx.cur_ctx->color == 0xFF000000);
- shutdown();
- }
- UTEST(sokol_debugtext, vertex_overflow) {
- // overflowing the vertex buffer must not crash
- init_with(&(sdtx_desc_t){
- .context.char_buf_size = 8,
- });
- for (int i = 0; i < 32; i++) {
- sdtx_putc('A');
- }
- sdtx_puts("1234567890");
- sdtx_putr("1234567890", 5);
- sdtx_printf("Hello World %d!\n", 12);
- T(_sdtx.cur_ctx->vertices.next == _sdtx.cur_ctx->vertices.cap);
- shutdown();
- }
- UTEST(sokol_debugtext, context_overflow) {
- // creating too many contexts should not crash
- init_with(&(sdtx_desc_t){
- .context_pool_size = 4,
- });
- T(_sdtx.context_pool.pool.size == 5);
- // one slot is taken by the default context
- sdtx_context ctx[4];
- for (int i = 0; i < 4; i++) {
- ctx[i] = sdtx_make_context(&(sdtx_context_desc_t){ 0 });
- if (i < 3) {
- T(ctx[i].id != 0);
- }
- else {
- T(ctx[i].id == 0);
- }
- }
- // destroying an invalid context should not crash
- for (int i = 0; i < 4; i++) {
- sdtx_destroy_context(ctx[i]);
- }
- shutdown();
- }
- UTEST(sokol_debugtext, printf_overflow) {
- // overflowing the printf formatting buffer should not crash
- init_with(&(sdtx_desc_t){
- .printf_buf_size = 8
- });
- T(9 == _sdtx.fmt_buf_size);
- T(16 == sdtx_printf("Hello %d\n", 123456789));
- T('H' == _sdtx.fmt_buf[0])
- T('e' == _sdtx.fmt_buf[1])
- T('l' == _sdtx.fmt_buf[2])
- T('l' == _sdtx.fmt_buf[3])
- T('o' == _sdtx.fmt_buf[4])
- T(' ' == _sdtx.fmt_buf[5])
- T('1' == _sdtx.fmt_buf[6])
- T('2' == _sdtx.fmt_buf[7])
- T(0 == _sdtx.fmt_buf[8])
- shutdown();
- }
- UTEST(sokol_debugtext, rewind_after_draw) {
- // calling sdtx_draw() must rewind the cursor position, font and
- // vertex pointer, to keep canvas size and origin as is
- init();
- sdtx_canvas(256, 128);
- TFLT(_sdtx.cur_ctx->canvas_size.x, 256);
- TFLT(_sdtx.cur_ctx->canvas_size.y, 128);
- sdtx_origin(5, 5);
- TFLT(_sdtx.cur_ctx->origin.x, 5);
- TFLT(_sdtx.cur_ctx->origin.y, 5);
- sdtx_pos(10, 20);
- TFLT(_sdtx.cur_ctx->pos.x, 10);
- TFLT(_sdtx.cur_ctx->pos.y, 20);
- sdtx_font(3);
- T(_sdtx.cur_ctx->cur_font == 3);
- sdtx_printf("Hello World!\n");
- T(_sdtx.cur_ctx->vertices.next != 0);
- sg_begin_pass(&(sg_pass){
- .swapchain = {
- .width = 256,
- .height = 256,
- .sample_count = 1,
- .color_format = SG_PIXELFORMAT_RGBA8,
- .depth_format = SG_PIXELFORMAT_DEPTH_STENCIL,
- }
- });
- sdtx_draw();
- sg_end_pass();
- sg_commit();
- TFLT(_sdtx.cur_ctx->canvas_size.x, 256);
- TFLT(_sdtx.cur_ctx->canvas_size.y, 128);
- TFLT(_sdtx.cur_ctx->origin.x, 5);
- TFLT(_sdtx.cur_ctx->origin.y, 5);
- TFLT(_sdtx.cur_ctx->pos.x, 0);
- TFLT(_sdtx.cur_ctx->pos.x, 0);
- T(_sdtx.cur_ctx->cur_font == 0);
- T(_sdtx.cur_ctx->vertices.next == 0);
- shutdown();
- }
- UTEST(sokol_debugtext, putr) {
- // test if sdtx_putr() draws the right amount of characters
- init();
- int start_index = _sdtx.cur_ctx->vertices.next;
- sdtx_putr("Hello World!", 5);
- T((5 * 6) == (_sdtx.cur_ctx->vertices.next - start_index));
- start_index = _sdtx.cur_ctx->vertices.next;
- sdtx_putr("Hello!\n\n\n\n\n\n\n\n\n\n\n", 10);
- // NOTE: the \n's don't result in rendered vertices
- T((6 * 6) == (_sdtx.cur_ctx->vertices.next - start_index));
- shutdown();
- }
- UTEST(sokol_debugtext, default_context) {
- init();
- T(sdtx_default_context().id == SDTX_DEFAULT_CONTEXT.id);
- shutdown();
- }
- // switching layers without any text inbetween should not advance the current draw command
- UTEST(sokol_debug_text, empty_layers) {
- init();
- T(_sdtx.cur_ctx->commands.next == 1);
- T(_sdtx.cur_ctx->commands.ptr[0].layer_id == 0);
- sdtx_layer(1);
- T(_sdtx.cur_ctx->commands.next == 1);
- T(_sdtx.cur_ctx->commands.ptr[0].layer_id == 1);
- sdtx_layer(2);
- T(_sdtx.cur_ctx->commands.next == 1);
- T(_sdtx.cur_ctx->commands.ptr[0].layer_id == 2);
- sdtx_layer(0);
- T(_sdtx.cur_ctx->commands.next == 1);
- T(_sdtx.cur_ctx->commands.ptr[0].layer_id == 0);
- shutdown();
- }
- // switching layers with text inbetween should advance the current draw command
- UTEST(sokol_debug_text, non_empty_layers) {
- init();
- T(_sdtx.cur_ctx->commands.next == 1);
- T(_sdtx.cur_ctx->commands.ptr[0].layer_id == 0);
- T(_sdtx.cur_ctx->commands.ptr[0].first_vertex == 0);
- T(_sdtx.cur_ctx->commands.ptr[0].num_vertices == 0);
- sdtx_puts("123");
- T(_sdtx.cur_ctx->commands.next == 1);
- T(_sdtx.cur_ctx->commands.ptr[0].layer_id == 0);
- T(_sdtx.cur_ctx->commands.ptr[0].first_vertex == 0);
- T(_sdtx.cur_ctx->commands.ptr[0].num_vertices == (3 * 6));
- sdtx_layer(1);
- sdtx_puts("1234");
- T(_sdtx.cur_ctx->commands.next == 2);
- T(_sdtx.cur_ctx->commands.ptr[1].layer_id == 1);
- T(_sdtx.cur_ctx->commands.ptr[1].first_vertex == (3 * 6));
- T(_sdtx.cur_ctx->commands.ptr[1].num_vertices == (4 * 6));
- // switching to same layer should not start a new draw commands
- sdtx_layer(1);
- sdtx_puts("12345");
- T(_sdtx.cur_ctx->commands.next == 2);
- T(_sdtx.cur_ctx->commands.ptr[1].layer_id == 1);
- T(_sdtx.cur_ctx->commands.ptr[1].first_vertex == (3 * 6));
- T(_sdtx.cur_ctx->commands.ptr[1].num_vertices == (9 * 6));
- sdtx_layer(0);
- sdtx_puts("123456");
- T(_sdtx.cur_ctx->commands.next == 3);
- T(_sdtx.cur_ctx->commands.ptr[2].layer_id == 0);
- T(_sdtx.cur_ctx->commands.ptr[2].first_vertex == (12 * 6));
- T(_sdtx.cur_ctx->commands.ptr[2].num_vertices == (6 * 6));
- shutdown();
- }
- UTEST(sokol_debug_text, command_buffer_overflow) {
- init_with(&(sdtx_desc_t){
- .context = {
- .max_commands = 4
- }
- });
- sdtx_puts("0");
- T(_sdtx.cur_ctx->commands.next == 1);
- sdtx_layer(1);
- sdtx_puts("1");
- T(_sdtx.cur_ctx->commands.next == 2);
- sdtx_layer(2);
- sdtx_puts("2");
- T(_sdtx.cur_ctx->commands.next == 3);
- sdtx_layer(3);
- sdtx_puts("3");
- T(_sdtx.cur_ctx->commands.next == 4);
- // from here on should fail
- sdtx_layer(4);
- sdtx_puts("4");
- T(_sdtx.cur_ctx->commands.next == 4);
- }
|