added mesh rendering
This commit is contained in:
@@ -3,11 +3,16 @@
|
||||
#include "stdarg.h"
|
||||
#include "unistd.h"
|
||||
#include "sys/stat.h"
|
||||
#include "execinfo.h"
|
||||
#include "dirent.h"
|
||||
#include "dlfcn.h"
|
||||
#include "time.h"
|
||||
|
||||
#ifdef __linux__
|
||||
#include "dlfcn.h"
|
||||
#include "execinfo.h"
|
||||
#endif
|
||||
#ifdef __WIN32__
|
||||
#include "windows.h"
|
||||
#include "dbghelp.h"
|
||||
#endif
|
||||
PLATFORM_INTERFACE void Plat_FatalErrorFunc(const char* szFormat, ...)
|
||||
{
|
||||
va_list list;
|
||||
@@ -76,6 +81,7 @@ PLATFORM_INTERFACE char *Plat_GetExtension( const char *szPath )
|
||||
|
||||
PLATFORM_INTERFACE void Plat_Backtrace( void )
|
||||
{
|
||||
#ifdef __linux__
|
||||
void *buffer[64];
|
||||
int nptrs = backtrace(buffer, 64);
|
||||
char **symbols = backtrace_symbols(buffer, nptrs);
|
||||
@@ -90,22 +96,64 @@ PLATFORM_INTERFACE void Plat_Backtrace( void )
|
||||
}
|
||||
|
||||
free(symbols);
|
||||
#endif
|
||||
#ifdef __WIN32__
|
||||
void* buffer[64];
|
||||
USHORT nptrs = CaptureStackBackTrace(0, 64, buffer, NULL);
|
||||
|
||||
HANDLE process = GetCurrentProcess();
|
||||
SymInitialize(process, NULL, TRUE);
|
||||
|
||||
SYMBOL_INFO* symbol = (SYMBOL_INFO*)calloc(sizeof(SYMBOL_INFO) + 256, 1);
|
||||
symbol->MaxNameLen = 255;
|
||||
symbol->SizeOfStruct = sizeof(SYMBOL_INFO);
|
||||
|
||||
if (!symbol) {
|
||||
V_printf("Backtrace failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
for (USHORT i = 0; i < nptrs; i++) {
|
||||
if (SymFromAddr(process, (DWORD64)(buffer[i]), 0, symbol)) {
|
||||
V_printf(" [%d] %s - 0x%0llX\n", i, symbol->Name, symbol->Address);
|
||||
} else {
|
||||
V_printf(" [%d] ??? - 0x%0llX\n", i, (DWORD64)(buffer[i]));
|
||||
}
|
||||
}
|
||||
|
||||
free(symbol);
|
||||
#endif
|
||||
};
|
||||
|
||||
PLATFORM_INTERFACE void *Plat_LoadLibrary( const char *psz )
|
||||
{
|
||||
#ifdef __linux__
|
||||
void *lib = dlopen(psz, RTLD_GLOBAL | RTLD_NOW);
|
||||
if (!lib)
|
||||
V_printf("Failed to open %s\n\t%s\n", psz, dlerror());
|
||||
return lib;
|
||||
#endif
|
||||
#ifdef __WIN32__
|
||||
return LoadLibraryA(psz);
|
||||
#endif
|
||||
}
|
||||
PLATFORM_INTERFACE void *Plat_GetProc( void *lib, const char *psz )
|
||||
{
|
||||
#ifdef __linux__
|
||||
return dlsym(lib, psz);
|
||||
#endif
|
||||
#ifdef __WIN32__
|
||||
return (void*)GetProcAddress((HMODULE)lib, psz);
|
||||
#endif
|
||||
}
|
||||
PLATFORM_INTERFACE void Plat_UnloadLibrary( void *lib )
|
||||
{
|
||||
#ifdef __linux__
|
||||
dlclose(lib);
|
||||
#endif
|
||||
#ifdef __WIN32__
|
||||
FreeLibrary((HMODULE)lib);
|
||||
#endif
|
||||
};
|
||||
|
||||
PLATFORM_INTERFACE double Plat_GetTime( void )
|
||||
|
||||
Reference in New Issue
Block a user