mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-14 05:46:00 +00:00
Add SDL_RenderDebugTextF & SDL_RenderDebugTextV
This should make it easier to quickly put important numbers and such on the screen without having to format them into a string manually.
This commit is contained in:

committed by
Ryan C. Gordon

parent
5608bf5866
commit
1d0e28a5b3
@@ -149,6 +149,16 @@ static void SDL_InitDynamicAPI(void);
|
||||
va_end(ap); \
|
||||
return result; \
|
||||
} \
|
||||
_static bool SDLCALL SDL_RenderDebugTextF##name(SDL_Renderer *renderer, float x, float y, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
|
||||
{ \
|
||||
bool result; \
|
||||
va_list ap; \
|
||||
initcall; \
|
||||
va_start(ap, fmt); \
|
||||
result = jump_table.SDL_RenderDebugTextV(renderer, x, y, fmt, ap); \
|
||||
va_end(ap); \
|
||||
return result; \
|
||||
} \
|
||||
_static void SDLCALL SDL_Log##name(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) \
|
||||
{ \
|
||||
va_list ap; \
|
||||
|
@@ -1207,6 +1207,8 @@ SDL3_0.0.0 {
|
||||
SDL_SetGPUAllowedFramesInFlight;
|
||||
SDL_RenderTextureAffine;
|
||||
SDL_WaitAndAcquireGPUSwapchainTexture;
|
||||
SDL_RenderDebugTextF;
|
||||
SDL_RenderDebugTextV;
|
||||
# extra symbols go here (don't modify this line)
|
||||
local: *;
|
||||
};
|
||||
|
@@ -1232,3 +1232,5 @@
|
||||
#define SDL_SetGPUAllowedFramesInFlight SDL_SetGPUAllowedFramesInFlight_REAL
|
||||
#define SDL_RenderTextureAffine SDL_RenderTextureAffine_REAL
|
||||
#define SDL_WaitAndAcquireGPUSwapchainTexture SDL_WaitAndAcquireGPUSwapchainTexture_REAL
|
||||
#define SDL_RenderDebugTextF SDL_RenderDebugTextF_REAL
|
||||
#define SDL_RenderDebugTextV SDL_RenderDebugTextV_REAL
|
||||
|
@@ -1238,3 +1238,7 @@ SDL_DYNAPI_PROC(bool,SDL_RunOnMainThread,(SDL_MainThreadCallback a,void *b,bool
|
||||
SDL_DYNAPI_PROC(bool,SDL_SetGPUAllowedFramesInFlight,(SDL_GPUDevice *a,Uint32 b),(a,b),return)
|
||||
SDL_DYNAPI_PROC(bool,SDL_RenderTextureAffine,(SDL_Renderer *a,SDL_Texture *b,const SDL_FRect *c,const SDL_FPoint *d,const SDL_FPoint *e,const SDL_FPoint *f),(a,b,c,d,e,f),return)
|
||||
SDL_DYNAPI_PROC(bool,SDL_WaitAndAcquireGPUSwapchainTexture,(SDL_GPUCommandBuffer *a,SDL_Window *b,SDL_GPUTexture **c,Uint32 *d,Uint32 *e),(a,b,c,d,e),return)
|
||||
#ifndef SDL_DYNAPI_PROC_NO_VARARGS
|
||||
SDL_DYNAPI_PROC(bool,SDL_RenderDebugTextF,(SDL_Renderer *a,float b,float c,SDL_PRINTF_FORMAT_STRING const char *d,...),(a,b,c,d),return)
|
||||
#endif
|
||||
SDL_DYNAPI_PROC(bool,SDL_RenderDebugTextV,(SDL_Renderer *a,float b,float c,SDL_PRINTF_FORMAT_STRING const char *d,va_list e),(a,b,c,d,e),return)
|
||||
|
@@ -168,9 +168,11 @@ def parse_header(header_path: Path) -> list[SdlProcedure]:
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNC(1)", "")
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNC(2)", "")
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNC(3)", "")
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNC(4)", "")
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNCV(1)", "")
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNCV(2)", "")
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNCV(3)", "")
|
||||
func = func.replace(" SDL_PRINTF_VARARG_FUNCV(4)", "")
|
||||
func = func.replace(" SDL_WPRINTF_VARARG_FUNC(3)", "")
|
||||
func = func.replace(" SDL_WPRINTF_VARARG_FUNCV(3)", "")
|
||||
func = func.replace(" SDL_SCANF_VARARG_FUNC(2)", "")
|
||||
|
@@ -3995,7 +3995,7 @@ bool SDL_RenderTextureAffine(SDL_Renderer *renderer, SDL_Texture *texture,
|
||||
xy[0] = real_dstrect.x;
|
||||
xy[1] = real_dstrect.y;
|
||||
}
|
||||
|
||||
|
||||
// (maxx, miny)
|
||||
if (right) {
|
||||
xy[2] = right->x;
|
||||
@@ -4025,7 +4025,7 @@ bool SDL_RenderTextureAffine(SDL_Renderer *renderer, SDL_Texture *texture,
|
||||
|
||||
result = QueueCmdGeometry(
|
||||
renderer, texture,
|
||||
xy, xy_stride,
|
||||
xy, xy_stride,
|
||||
&texture->color, 0 /* color_stride */,
|
||||
uv, uv_stride,
|
||||
num_vertices, indices, num_indices, size_indices,
|
||||
@@ -5589,3 +5589,46 @@ bool SDL_RenderDebugText(SDL_Renderer *renderer, float x, float y, const char *s
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool SDL_RenderDebugTextF(SDL_Renderer *renderer, float x, float y, SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, fmt);
|
||||
bool result = SDL_RenderDebugTextV(renderer, x, y, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool SDL_RenderDebugTextV(SDL_Renderer *renderer, float x, float y, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap)
|
||||
{
|
||||
// Probably for the best to check this here, so we don't do a bunch of string formatting before realizing the renderer isn't even valid...
|
||||
CHECK_RENDERER_MAGIC(renderer, false);
|
||||
|
||||
va_list apc;
|
||||
va_copy(apc, ap); // vsnprintf mangles ap, so copy it so it can be used again later
|
||||
int len = SDL_vsnprintf(NULL, 0, fmt, apc);
|
||||
va_end(apc);
|
||||
|
||||
if (len < 0) {
|
||||
return SDL_SetError("Failed to format debug text");
|
||||
}
|
||||
|
||||
char *buf = SDL_malloc(len + 1);
|
||||
if (buf == NULL) {
|
||||
return SDL_OutOfMemory();
|
||||
}
|
||||
|
||||
len = SDL_vsnprintf(buf, len + 1, fmt, ap);
|
||||
if (len < 0) {
|
||||
SDL_free(buf);
|
||||
return SDL_SetError("Failed to format debug text");
|
||||
}
|
||||
|
||||
bool result = SDL_RenderDebugText(renderer, x, y, buf);
|
||||
|
||||
SDL_free(buf);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Reference in New Issue
Block a user