Skip to content

Commit

Permalink
Merge pull request #387 from JupiterRider/master
Browse files Browse the repository at this point in the history
TraceLog and TraceLogCallback fixes
  • Loading branch information
gen2brain committed May 15, 2024
2 parents f68049c + 4c0391d commit e824a9b
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 6 deletions.
19 changes: 18 additions & 1 deletion raylib/purego_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package rl

import (
"fmt"
"syscall"
"unsafe"

"github.com/ebitengine/purego"
Expand All @@ -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)
Expand All @@ -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
})
Expand Down
7 changes: 3 additions & 4 deletions raylib/raylib_purego.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
package rl

import (
"fmt"
"image"
"image/color"
"os"
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -1580,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))
}
Expand Down
2 changes: 1 addition & 1 deletion raylib/utils_log.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <stdio.h> // Required for: vprintf()
#include <string.h> // 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 };
Expand Down

0 comments on commit e824a9b

Please sign in to comment.