Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BUG: Hard limit on rendering more than 999 characters #60

Open
alexlnkp opened this issue Oct 4, 2024 · 0 comments
Open

BUG: Hard limit on rendering more than 999 characters #60

alexlnkp opened this issue Oct 4, 2024 · 0 comments

Comments

@alexlnkp
Copy link

alexlnkp commented Oct 4, 2024

I was trying to make a "pseudo-terminal" SDL2 window, when I encountered this.
I thought I was going insane at first, but there ACTUALLY seems to be some kind of a weird limit on number of characters that can be rendered in a single draw call, which is equal to 999.
Code that reproduces the issue:

#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#include <stdio.h>

#include "lib/SDL_FontCache.h"

#define GRID_X_RES 41
#define GRID_Y_RES 41

void render_grid(char* grid) {
    Uint32 x = 0, y = 0, idx = 0;
    for (y = 0; y < GRID_Y_RES; ++y) {
        for (x = 0; x < GRID_X_RES; ++x) {
            idx = x + y * GRID_X_RES;
            grid[idx] = '.' - ('$' * ((idx+1) % GRID_X_RES == 0));
        }
    }
    grid[GRID_X_RES * GRID_Y_RES + GRID_Y_RES] = '\0';
}

int main(int argc, char* argv[]) {
    if (SDL_Init(SDL_INIT_VIDEO) < 0) {
        printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError());
    }

    SDL_Window* window = SDL_CreateWindow(
        "SDL2 Pseudo-Terminal",
        SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED,
        800, 600,
        SDL_WINDOW_SHOWN
    );

    SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);

    FC_Font* font = FC_CreateFont();
    FC_LoadFont(font, renderer, "res/PressStart2P-Regular.ttf", 20, FC_MakeColor(255, 255, 255, 255), TTF_STYLE_NORMAL);  

    int running = 1;

    /* malloc gives same results as simple `char grid[((GRID_X_RES * GRID_Y_RES + GRID_Y_RES) + 1)]` */
    char* grid = malloc(((GRID_X_RES * GRID_Y_RES + GRID_Y_RES) + 1) * sizeof(char));

    SDL_Event event;
    while (running) {
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                running = 0;
            }
        }

        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
        SDL_RenderClear(renderer);

        render_grid(grid);
        FC_Draw(font, renderer, 0, 0, "%s", grid); 

        SDL_RenderPresent(renderer);
    }

    FC_FreeFont(font);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

Screenshot
image

Changing GRID_Y_RES to any number higher than what is currently set doesn't change a thing in rendering, however printing the constructed grid to regular terminal does what is expected.

........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................
........................................

I'm not exactly sure if this is an SDL2 quirk or this library's issue, just thought I'd report this nonetheless

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant