Merge pull request #387 from JupiterRider/master
TraceLog and TraceLogCallback fixes
This commit is contained in:
commit
e824a9b663
3 changed files with 22 additions and 6 deletions
|
@ -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
|
||||
})
|
||||
|
|
|
@ -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
|
||||
|
@ -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))
|
||||
}
|
||||
|
|
|
@ -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 };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue