ioq3/code/renderervk/ref_import.c
Trung Lê 15ff484715
Add vulkan renderer
Copied from vkQuake3 which is in turn based on Quake III Kenny Edition
2025-03-14 00:31:15 +11:00

158 lines
2.8 KiB
C

#include "../qcommon/q_shared.h"
#include "../renderercommon/tr_public.h"
extern refexport_t* R_Export(void);
refimport_t ri;
/*
@@@@@@@@@@@@@@@@@@@@@
GetRefAPI
@@@@@@@@@@@@@@@@@@@@@
*/
#ifdef USE_RENDERER_DLOPEN
Q_EXPORT refexport_t* QDECL GetRefAPI( int apiVersion, refimport_t *rimp )
{
#else
refexport_t* GetRefAPI(int apiVersion, refimport_t *rimp)
{
#endif
ri = *rimp;
if( apiVersion != REF_API_VERSION )
{
ri.Printf(PRINT_ALL, "Mismatched REF_API_VERSION: expected %i, got %i\n", REF_API_VERSION, apiVersion );
return NULL;
}
return R_Export();
}
//
// common function replacements for modular renderer
//
#ifdef USE_RENDERER_DLOPEN
void QDECL Com_Printf( const char *msg, ... )
{
va_list argptr;
char text[1024];
va_start(argptr, msg);
Q_vsnprintf(text, sizeof(text), msg, argptr);
va_end(argptr);
ri.Printf(PRINT_ALL, "%s", text);
}
void QDECL Com_Error( int level, const char *error, ... )
{
va_list argptr;
char text[1024];
va_start(argptr, error);
Q_vsnprintf(text, sizeof(text), error, argptr);
va_end(argptr);
ri.Error(level, "%s", text);
}
#endif
// =======================================
// =======================================
// =======================================
char* R_SkipPath (char *pathname)
{
char* last = pathname;
while (*pathname)
{
if (*pathname=='/')
last = pathname+1;
pathname++;
}
return last;
}
/*
char* SkipPath(char *pathname)
{
char* last = pathname;
char c;
do{
c = *pathname;
if (c == '/')
last = pathname+1;
pathname++;
}while(c);
return last;
}
*/
void R_StripExtension( const char *in, char *out, int destsize )
{
const char *dot = strrchr(in, '.'), *slash;
if (dot && (!(slash = strrchr(in, '/')) || slash < dot))
destsize = (destsize < dot-in+1 ? destsize : dot-in+1);
if ( in == out && destsize > 1 )
out[destsize-1] = '\0';
else
Q_strncpyz(out, in, destsize);
}
/*
void stripExtension(const char *in, char *out, int destsize)
{
const char *dot = strrchr(in, '.');
const char *slash = strrchr(in, '/');
if ((dot != NULL) && ( (slash == NULL) || (slash < dot) ) )
{
int len = dot-in+1;
if(len <= destsize)
destsize = len;
else
ri.Printf( PRINT_WARNING, "stripExtension: dest size not enough!\n");
}
if(in != out)
strncpy(out, in, destsize-1);
out[destsize-1] = '\0';
}
const char *R_GetExtension( const char *name )
{
const char *dot = strrchr(name, '.'), *slash;
if (dot && (!(slash = strrchr(name, '/')) || slash < dot))
return dot + 1;
else
return "";
}
*/
/*
char* GetExtension( const char *name )
{
char* dot = strrchr(name, '.');
char* slash = strrchr(name, '/');
if ((dot != NULL) && ((slash == NULL) || (slash < dot) ))
return dot + 1;
else
return "";
}
*/