249 lines
7.2 KiB
Go
249 lines
7.2 KiB
Go
package sdl
|
|
|
|
/*
|
|
#include "sdl_wrapper.h"
|
|
#include "log.h"
|
|
|
|
static inline void _SDL_Log(const char *fmt)
|
|
{
|
|
SDL_Log("%s", fmt);
|
|
}
|
|
|
|
static inline void _SDL_LogVerbose(int category, const char *fmt)
|
|
{
|
|
SDL_LogVerbose(category, "%s", fmt);
|
|
}
|
|
|
|
static inline void _SDL_LogDebug(int category, const char *fmt)
|
|
{
|
|
SDL_LogDebug(category, "%s", fmt);
|
|
}
|
|
|
|
static inline void _SDL_LogInfo(int category, const char *fmt)
|
|
{
|
|
SDL_LogInfo(category, "%s", fmt);
|
|
}
|
|
|
|
static inline void _SDL_LogWarn(int category, const char *fmt)
|
|
{
|
|
SDL_LogWarn(category, "%s", fmt);
|
|
}
|
|
|
|
static inline void _SDL_LogError(int category, const char *fmt)
|
|
{
|
|
SDL_LogError(category, "%s", fmt);
|
|
}
|
|
|
|
static inline void _SDL_LogCritical(int category, const char *fmt)
|
|
{
|
|
SDL_LogCritical(category, "%s", fmt);
|
|
}
|
|
|
|
static inline void _SDL_LogMessage(int category, SDL_LogPriority priority, const char *fmt)
|
|
{
|
|
SDL_LogCritical(category, "%s", fmt);
|
|
}
|
|
*/
|
|
import "C"
|
|
import "fmt"
|
|
import "unsafe"
|
|
|
|
// An enumeration of the predefined log categories.
|
|
// (https://wiki.libsdl.org/SDL_LOG_CATEGORY)
|
|
const (
|
|
LOG_CATEGORY_APPLICATION = iota // application log
|
|
LOG_CATEGORY_ERROR // error log
|
|
LOG_CATEGORY_ASSERT // assert log
|
|
LOG_CATEGORY_SYSTEM // system log
|
|
LOG_CATEGORY_AUDIO // audio log
|
|
LOG_CATEGORY_VIDEO // video log
|
|
LOG_CATEGORY_RENDER // render log
|
|
LOG_CATEGORY_INPUT // input log
|
|
LOG_CATEGORY_TEST // test log
|
|
LOG_CATEGORY_RESERVED1 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED2 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED3 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED4 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED5 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED6 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED7 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED8 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED9 // reserved for future SDL library use
|
|
LOG_CATEGORY_RESERVED10 // reserved for future SDL library use
|
|
LOG_CATEGORY_CUSTOM // reserved for application use
|
|
)
|
|
|
|
// An enumeration of the predefined log priorities.
|
|
// (https://wiki.libsdl.org/SDL_LogPriority)
|
|
const (
|
|
LOG_PRIORITY_VERBOSE = iota + 1 // verbose
|
|
LOG_PRIORITY_DEBUG // debug
|
|
LOG_PRIORITY_INFO // info
|
|
LOG_PRIORITY_WARN // warn
|
|
LOG_PRIORITY_ERROR // error
|
|
LOG_PRIORITY_CRITICAL // critical
|
|
NUM_LOG_PRIORITIES // (internal use)
|
|
)
|
|
|
|
// LogPriority is a predefined log priority.
|
|
// (https://wiki.libsdl.org/SDL_LogPriority)
|
|
type LogPriority C.SDL_LogPriority
|
|
|
|
func (p LogPriority) c() C.SDL_LogPriority {
|
|
return C.SDL_LogPriority(p)
|
|
}
|
|
|
|
// LogSetAllPriority sets the priority of all log categories.
|
|
// (https://wiki.libsdl.org/SDL_LogSetAllPriority)
|
|
func LogSetAllPriority(p LogPriority) {
|
|
C.SDL_LogSetAllPriority(p.c())
|
|
}
|
|
|
|
// LogSetPriority sets the priority of a particular log category.
|
|
// (https://wiki.libsdl.org/SDL_LogSetPriority)
|
|
func LogSetPriority(category int, p LogPriority) {
|
|
C.SDL_LogSetPriority(C.int(category), p.c())
|
|
}
|
|
|
|
// LogGetPriority returns the priority of a particular log category.
|
|
// (https://wiki.libsdl.org/SDL_LogGetPriority)
|
|
func LogGetPriority(category int) LogPriority {
|
|
return LogPriority(C.SDL_LogGetPriority(C.int(category)))
|
|
}
|
|
|
|
// LogResetPriorities resets all priorities to default.
|
|
// (https://wiki.libsdl.org/SDL_LogResetPriorities)
|
|
func LogResetPriorities() {
|
|
C.SDL_LogResetPriorities()
|
|
}
|
|
|
|
// Log logs a message with LOG_CATEGORY_APPLICATION and LOG_PRIORITY_INFO.
|
|
// (https://wiki.libsdl.org/SDL_Log)
|
|
func Log(str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_Log(cstr)
|
|
}
|
|
|
|
// LogVerbose logs a message with LOG_PRIORITY_VERBOSE.
|
|
// (https://wiki.libsdl.org/SDL_LogVerbose)
|
|
func LogVerbose(category int, str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_LogVerbose(C.int(category), cstr)
|
|
}
|
|
|
|
// LogDebug logs a message with LOG_PRIORITY_DEBUG.
|
|
// (https://wiki.libsdl.org/SDL_LogDebug)
|
|
func LogDebug(category int, str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_LogDebug(C.int(category), cstr)
|
|
}
|
|
|
|
// LogInfo logs a message with LOG_PRIORITY_INFO.
|
|
// (https://wiki.libsdl.org/SDL_LogInfo)
|
|
func LogInfo(category int, str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_LogInfo(C.int(category), cstr)
|
|
}
|
|
|
|
// LogWarn logs a message with LOG_PRIORITY_WARN.
|
|
// (https://wiki.libsdl.org/SDL_LogWarn)
|
|
func LogWarn(category int, str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_LogWarn(C.int(category), cstr)
|
|
}
|
|
|
|
// LogError logs a message with LOG_PRIORITY_ERROR.
|
|
// (https://wiki.libsdl.org/SDL_LogError)
|
|
func LogError(category int, str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_LogError(C.int(category), cstr)
|
|
}
|
|
|
|
// LogCritical logs a message with LOG_PRIORITY_CRITICAL.
|
|
// (https://wiki.libsdl.org/SDL_LogCritical)
|
|
func LogCritical(category int, str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_LogCritical(C.int(category), cstr)
|
|
}
|
|
|
|
// LogMessage logs a message with the specified category and priority.
|
|
// (https://wiki.libsdl.org/SDL_LogMessage)
|
|
func LogMessage(category int, pri LogPriority, str string, args ...interface{}) {
|
|
str = fmt.Sprintf(str, args...)
|
|
|
|
cstr := C.CString(str)
|
|
defer C.free(unsafe.Pointer(cstr))
|
|
|
|
C._SDL_LogMessage(C.int(category), C.SDL_LogPriority(pri), cstr)
|
|
}
|
|
|
|
// LogOutputFunction is the function to call instead of the default
|
|
type LogOutputFunction func(data interface{}, category int, pri LogPriority, message string)
|
|
|
|
type logOutputFunctionCtx struct {
|
|
f LogOutputFunction
|
|
d interface{}
|
|
}
|
|
|
|
// Yissakhar Z. Beck (DeedleFake)'s implementation
|
|
//
|
|
//export logOutputFunction
|
|
func logOutputFunction(data unsafe.Pointer, category C.int, pri C.SDL_LogPriority, message *C.char) {
|
|
ctx := (*logOutputFunctionCtx)(data)
|
|
|
|
ctx.f(ctx.d, int(category), LogPriority(pri), C.GoString(message))
|
|
}
|
|
|
|
var (
|
|
logOutputFunctionCache LogOutputFunction
|
|
logOutputDataCache interface{}
|
|
)
|
|
|
|
// LogGetOutputFunction returns the current log output function.
|
|
// (https://wiki.libsdl.org/SDL_LogGetOutputFunction)
|
|
func LogGetOutputFunction() (LogOutputFunction, interface{}) {
|
|
return logOutputFunctionCache, logOutputDataCache
|
|
}
|
|
|
|
// LogSetOutputFunction replaces the default log output function with one of your own.
|
|
// (https://wiki.libsdl.org/SDL_LogSetOutputFunction)
|
|
func LogSetOutputFunction(f LogOutputFunction, data interface{}) {
|
|
ctx := &logOutputFunctionCtx{
|
|
f: f,
|
|
d: data,
|
|
}
|
|
|
|
C.LogSetOutputFunction(unsafe.Pointer(ctx))
|
|
|
|
logOutputFunctionCache = f
|
|
logOutputDataCache = data
|
|
}
|