From ac27873749c667aef020ddba21d771c8d8c3b8b1 Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Tue, 14 May 2024 22:49:48 +0200 Subject: [PATCH 1/4] MAX_TRACELOG_BUFFER_SIZE is 256 since raylib 4.5 --- raylib/utils_log.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/raylib/utils_log.c b/raylib/utils_log.c index 212a4ae0..7d3d95ef 100644 --- a/raylib/utils_log.c +++ b/raylib/utils_log.c @@ -3,7 +3,7 @@ #include // Required for: vprintf() #include // Required for: strcpy(), strcat() -#define MAX_TRACELOG_BUFFER_SIZE 128 // As defined in utils.c from raylib +#define MAX_TRACELOG_BUFFER_SIZE 256 // As defined in utils.c from raylib void rayLogWrapperCallback(int logType, const char *text, va_list args) { char buffer[MAX_TRACELOG_BUFFER_SIZE] = { 0 }; From 6fd7907d3108570fca76c772fcc190291b891f9e Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Tue, 14 May 2024 23:09:47 +0200 Subject: [PATCH 2/4] Use fmt.Sprintf for TraceLog to match with cgo --- raylib/raylib_purego.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/raylib/raylib_purego.go b/raylib/raylib_purego.go index ef58489a..55cbfdff 100644 --- a/raylib/raylib_purego.go +++ b/raylib/raylib_purego.go @@ -4,6 +4,7 @@ package rl import ( + "fmt" "image" "image/color" "os" @@ -121,7 +122,7 @@ var unloadRandomSequence func(sequence *int32) var takeScreenshot func(fileName string) var setConfigFlags func(flags uint32) var openURL func(url string) -var traceLog func(logLevel int32, text string, args ...any) +var traceLog func(logLevel int32, text string) var setTraceLogLevel func(logLevel int32) var memAlloc func(size uint32) unsafe.Pointer var memRealloc func(ptr unsafe.Pointer, size uint32) unsafe.Pointer @@ -1556,7 +1557,7 @@ func OpenURL(url string) { // TraceLog - Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) func TraceLog(logLevel TraceLogLevel, text string, args ...any) { - traceLog(int32(logLevel), text, args...) + traceLog(int32(logLevel), fmt.Sprintf(text, args...)) } // SetTraceLogLevel - Set the current threshold (minimum) log level From fa7e76c6a6e4bffc1e65de850d05dee247149dfd Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Tue, 14 May 2024 23:17:31 +0200 Subject: [PATCH 3/4] implement va_list for tracelog callbacks in purego --- raylib/purego_windows.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/raylib/purego_windows.go b/raylib/purego_windows.go index 470d16d6..a46c8785 100644 --- a/raylib/purego_windows.go +++ b/raylib/purego_windows.go @@ -5,6 +5,7 @@ package rl import ( "fmt" + "syscall" "unsafe" "github.com/ebitengine/purego" @@ -16,6 +17,15 @@ const ( requiredVersion = "5.0" ) +var wvsprintfA uintptr + +func init() { + handle, err := windows.LoadLibrary("user32.dll") + if err == nil { + wvsprintfA, _ = windows.GetProcAddress(handle, "wvsprintfA") + } +} + // loadLibrary loads the raylib dll and panics on error func loadLibrary() uintptr { handle, err := windows.LoadLibrary(libname) @@ -37,7 +47,14 @@ func loadLibrary() uintptr { } func traceLogCallbackWrapper(fn TraceLogCallbackFun) uintptr { - return purego.NewCallback(func(logLevel int32, text *byte) uintptr { + return purego.NewCallback(func(logLevel int32, text *byte, args unsafe.Pointer) uintptr { + if wvsprintfA != 0 { + var buffer [1024]byte // Max size is 1024 (see https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-wvsprintfa) + _, _, errno := syscall.SyscallN(wvsprintfA, uintptr(unsafe.Pointer(&buffer[0])), uintptr(unsafe.Pointer(text)), uintptr(args)) + if errno == 0 { + text = &buffer[0] + } + } fn(int(logLevel), windows.BytePtrToString(text)) return 0 }) From 4c0391d2175200adf5d227cda9c5e1e1ff501e1d Mon Sep 17 00:00:00 2001 From: JupiterRider <60042618+JupiterRider@users.noreply.github.com> Date: Tue, 14 May 2024 23:22:31 +0200 Subject: [PATCH 4/4] comment fixed --- raylib/raylib_purego.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/raylib/raylib_purego.go b/raylib/raylib_purego.go index 55cbfdff..53d061d8 100644 --- a/raylib/raylib_purego.go +++ b/raylib/raylib_purego.go @@ -1581,8 +1581,6 @@ func MemFree(ptr unsafe.Pointer) { } // SetTraceLogCallback - Set custom trace log -// -// REVIEW NEEDED! 2023-11-15 JupiterRider: The argument list paramter isn't impelmented yet. func SetTraceLogCallback(fn TraceLogCallbackFun) { setTraceLogCallback(traceLogCallbackWrapper(fn)) }