mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-03 23:21:15 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			145 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
Copyright (c) 2013 Advanced Micro Devices, Inc.  
 | 
						|
 | 
						|
This software is provided 'as-is', without any express or implied warranty.
 | 
						|
In no event will the authors be held liable for any damages arising from the use of this software.
 | 
						|
Permission is granted to anyone to use this software for any purpose, 
 | 
						|
including commercial applications, and to alter it and redistribute it freely, 
 | 
						|
subject to the following restrictions:
 | 
						|
 | 
						|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
 | 
						|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
 | 
						|
3. This notice may not be removed or altered from any source distribution.
 | 
						|
*/
 | 
						|
//Originally written by Erwin Coumans
 | 
						|
 | 
						|
#include "b3Logging.h"
 | 
						|
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdarg.h>
 | 
						|
 | 
						|
#ifdef _WIN32
 | 
						|
#include <windows.h>
 | 
						|
#endif  //_WIN32
 | 
						|
 | 
						|
void b3PrintfFuncDefault(const char* msg)
 | 
						|
{
 | 
						|
#ifdef _WIN32
 | 
						|
	OutputDebugStringA(msg);
 | 
						|
#endif
 | 
						|
	printf("%s", msg);
 | 
						|
	//is this portable?
 | 
						|
	fflush(stdout);
 | 
						|
}
 | 
						|
 | 
						|
void b3WarningMessageFuncDefault(const char* msg)
 | 
						|
{
 | 
						|
#ifdef _WIN32
 | 
						|
	OutputDebugStringA(msg);
 | 
						|
#endif
 | 
						|
	printf("%s", msg);
 | 
						|
	//is this portable?
 | 
						|
	fflush(stdout);
 | 
						|
}
 | 
						|
 | 
						|
void b3ErrorMessageFuncDefault(const char* msg)
 | 
						|
{
 | 
						|
#ifdef _WIN32
 | 
						|
	OutputDebugStringA(msg);
 | 
						|
#endif
 | 
						|
	printf("%s", msg);
 | 
						|
 | 
						|
	//is this portable?
 | 
						|
	fflush(stdout);
 | 
						|
}
 | 
						|
 | 
						|
static b3PrintfFunc* b3s_printfFunc = b3PrintfFuncDefault;
 | 
						|
static b3WarningMessageFunc* b3s_warningMessageFunc = b3WarningMessageFuncDefault;
 | 
						|
static b3ErrorMessageFunc* b3s_errorMessageFunc = b3ErrorMessageFuncDefault;
 | 
						|
 | 
						|
///The developer can route b3Printf output using their own implementation
 | 
						|
void b3SetCustomPrintfFunc(b3PrintfFunc* printfFunc)
 | 
						|
{
 | 
						|
	b3s_printfFunc = printfFunc;
 | 
						|
}
 | 
						|
void b3SetCustomWarningMessageFunc(b3PrintfFunc* warningMessageFunc)
 | 
						|
{
 | 
						|
	b3s_warningMessageFunc = warningMessageFunc;
 | 
						|
}
 | 
						|
void b3SetCustomErrorMessageFunc(b3PrintfFunc* errorMessageFunc)
 | 
						|
{
 | 
						|
	b3s_errorMessageFunc = errorMessageFunc;
 | 
						|
}
 | 
						|
 | 
						|
//#define B3_MAX_DEBUG_STRING_LENGTH 2048
 | 
						|
#define B3_MAX_DEBUG_STRING_LENGTH 32768
 | 
						|
 | 
						|
void b3OutputPrintfVarArgsInternal(const char* str, ...)
 | 
						|
{
 | 
						|
	char strDebug[B3_MAX_DEBUG_STRING_LENGTH] = {0};
 | 
						|
	va_list argList;
 | 
						|
	va_start(argList, str);
 | 
						|
#ifdef _MSC_VER
 | 
						|
	vsprintf_s(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
 | 
						|
#else
 | 
						|
	vsnprintf(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
 | 
						|
#endif
 | 
						|
	(b3s_printfFunc)(strDebug);
 | 
						|
	va_end(argList);
 | 
						|
}
 | 
						|
void b3OutputWarningMessageVarArgsInternal(const char* str, ...)
 | 
						|
{
 | 
						|
	char strDebug[B3_MAX_DEBUG_STRING_LENGTH] = {0};
 | 
						|
	va_list argList;
 | 
						|
	va_start(argList, str);
 | 
						|
#ifdef _MSC_VER
 | 
						|
	vsprintf_s(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
 | 
						|
#else
 | 
						|
	vsnprintf(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
 | 
						|
#endif
 | 
						|
	(b3s_warningMessageFunc)(strDebug);
 | 
						|
	va_end(argList);
 | 
						|
}
 | 
						|
void b3OutputErrorMessageVarArgsInternal(const char* str, ...)
 | 
						|
{
 | 
						|
	char strDebug[B3_MAX_DEBUG_STRING_LENGTH] = {0};
 | 
						|
	va_list argList;
 | 
						|
	va_start(argList, str);
 | 
						|
#ifdef _MSC_VER
 | 
						|
	vsprintf_s(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
 | 
						|
#else
 | 
						|
	vsnprintf(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
 | 
						|
#endif
 | 
						|
	(b3s_errorMessageFunc)(strDebug);
 | 
						|
	va_end(argList);
 | 
						|
}
 | 
						|
 | 
						|
void b3EnterProfileZoneDefault(const char* name)
 | 
						|
{
 | 
						|
}
 | 
						|
void b3LeaveProfileZoneDefault()
 | 
						|
{
 | 
						|
}
 | 
						|
static b3EnterProfileZoneFunc* b3s_enterFunc = b3EnterProfileZoneDefault;
 | 
						|
static b3LeaveProfileZoneFunc* b3s_leaveFunc = b3LeaveProfileZoneDefault;
 | 
						|
void b3EnterProfileZone(const char* name)
 | 
						|
{
 | 
						|
	(b3s_enterFunc)(name);
 | 
						|
}
 | 
						|
void b3LeaveProfileZone()
 | 
						|
{
 | 
						|
	(b3s_leaveFunc)();
 | 
						|
}
 | 
						|
 | 
						|
void b3SetCustomEnterProfileZoneFunc(b3EnterProfileZoneFunc* enterFunc)
 | 
						|
{
 | 
						|
	b3s_enterFunc = enterFunc;
 | 
						|
}
 | 
						|
void b3SetCustomLeaveProfileZoneFunc(b3LeaveProfileZoneFunc* leaveFunc)
 | 
						|
{
 | 
						|
	b3s_leaveFunc = leaveFunc;
 | 
						|
}
 | 
						|
 | 
						|
#ifndef _MSC_VER
 | 
						|
#undef vsprintf_s
 | 
						|
#endif
 |