2006-04-23 06:44:19 +00:00
|
|
|
#include "compat.h"
|
|
|
|
#include "osd.h"
|
|
|
|
#include "build.h"
|
|
|
|
#include "baselayer.h"
|
|
|
|
|
|
|
|
#ifdef RENDERTYPEWIN
|
|
|
|
#include "winlayer.h"
|
|
|
|
#endif
|
|
|
|
|
2009-08-09 05:32:17 +00:00
|
|
|
#include "polymost.h"
|
|
|
|
|
2008-07-02 01:32:53 +00:00
|
|
|
char scantoasc[128] =
|
|
|
|
{
|
|
|
|
0,0,'1','2','3','4','5','6','7','8','9','0','-','=',0,0,
|
|
|
|
'q','w','e','r','t','y','u','i','o','p','[',']',0,0,'a','s',
|
|
|
|
'd','f','g','h','j','k','l',';',39,'`',0,92,'z','x','c','v',
|
|
|
|
'b','n','m',',','.','/',0,'*',0,32,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,'7','8','9','-','4','5','6','+','1',
|
|
|
|
'2','3','0','.',0,0,0,0,0,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
|
|
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
|
|
};
|
|
|
|
|
2006-04-23 06:44:19 +00:00
|
|
|
#ifdef USE_OPENGL
|
2007-12-12 17:42:14 +00:00
|
|
|
struct glinfo glinfo =
|
|
|
|
{
|
2009-09-30 01:26:13 +00:00
|
|
|
"Unknown", // vendor
|
|
|
|
"Unknown", // renderer
|
|
|
|
"0.0.0", // version
|
|
|
|
"", // extensions
|
|
|
|
|
|
|
|
1.0, // max anisotropy
|
|
|
|
0, // brga texture format
|
|
|
|
0, // clamp-to-edge support
|
|
|
|
0, // texture compression
|
|
|
|
0, // non-power-of-two textures
|
|
|
|
0, // multisampling
|
|
|
|
0, // nvidia multisampling hint
|
|
|
|
0, // ARBfp
|
|
|
|
0, // depth textures
|
|
|
|
0, // shadow comparison
|
|
|
|
0, // Frame Buffer Objects
|
|
|
|
0, // rectangle textures
|
|
|
|
0, // multitexturing
|
|
|
|
0, // env_combine
|
|
|
|
0, // Vertex Buffer Objects
|
|
|
|
0, // VSync support
|
|
|
|
0, // Shader Model 4 support
|
|
|
|
0, // Occlusion Queries
|
|
|
|
0, // GLSL
|
|
|
|
0, // GL info dumped
|
2007-12-12 17:42:14 +00:00
|
|
|
};
|
2006-04-23 06:44:19 +00:00
|
|
|
#endif
|
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
char *strtolower(char *str, int32_t len)
|
2008-12-31 09:07:49 +00:00
|
|
|
{
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t i = 0;
|
2008-12-31 09:07:49 +00:00
|
|
|
if (len <= 0) return str;
|
|
|
|
do
|
|
|
|
{
|
|
|
|
*(str+i) = Btolower(*(str+i));
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
while (--len);
|
|
|
|
return str;
|
|
|
|
}
|
|
|
|
|
2009-06-13 21:06:45 +00:00
|
|
|
int32_t flushlogwindow = 1;
|
2009-01-06 06:59:18 +00:00
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
static void onvideomodechange(int32_t newmode) { UNREFERENCED_PARAMETER(newmode); }
|
|
|
|
void (*baselayer_onvideomodechange)(int32_t) = onvideomodechange;
|
2006-04-23 06:44:19 +00:00
|
|
|
|
2008-07-12 23:44:07 +00:00
|
|
|
#if defined(POLYMOST)
|
2009-01-09 09:29:17 +00:00
|
|
|
static int32_t osdfunc_setrendermode(const osdfuncparm_t *parm)
|
2006-04-23 06:44:19 +00:00
|
|
|
{
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t m;
|
2006-04-24 19:04:22 +00:00
|
|
|
char *p;
|
2006-04-23 06:44:19 +00:00
|
|
|
|
2007-12-12 17:42:14 +00:00
|
|
|
char *modestrs[] =
|
|
|
|
{
|
2008-07-09 23:25:38 +00:00
|
|
|
"classic software", "completely broken polygonal flat-shaded software",
|
2007-12-12 17:42:14 +00:00
|
|
|
"polygonal textured software", "polygonal OpenGL", "great justice"
|
|
|
|
};
|
2006-04-23 06:44:19 +00:00
|
|
|
|
2006-04-24 19:04:22 +00:00
|
|
|
if (parm->numparms != 1) return OSDCMD_SHOWHELP;
|
|
|
|
m = Bstrtol(parm->parms[0], &p, 10);
|
2006-04-23 06:44:19 +00:00
|
|
|
|
2006-08-29 01:58:59 +00:00
|
|
|
if (m < 0 || m > 4) return OSDCMD_SHOWHELP;
|
2006-04-23 06:44:19 +00:00
|
|
|
|
2006-04-24 19:04:22 +00:00
|
|
|
setrendermode(m);
|
2007-12-12 17:42:14 +00:00
|
|
|
OSD_Printf("Rendering method changed to %s\n", modestrs[ getrendermode()]);
|
2006-04-23 06:44:19 +00:00
|
|
|
|
2006-04-24 19:04:22 +00:00
|
|
|
return OSDCMD_OK;
|
2006-04-23 06:44:19 +00:00
|
|
|
}
|
2008-07-12 23:44:07 +00:00
|
|
|
#if defined(USE_OPENGL)
|
2006-04-23 06:44:19 +00:00
|
|
|
#ifdef DEBUGGINGAIDS
|
2009-01-09 09:29:17 +00:00
|
|
|
static int32_t osdcmd_hicsetpalettetint(const osdfuncparm_t *parm)
|
2006-04-23 06:44:19 +00:00
|
|
|
{
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t pal, cols[3], eff;
|
2006-04-24 19:04:22 +00:00
|
|
|
|
|
|
|
if (parm->numparms != 5) return OSDCMD_SHOWHELP;
|
|
|
|
|
|
|
|
pal = Batol(parm->parms[0]);
|
|
|
|
cols[0] = Batol(parm->parms[1]);
|
|
|
|
cols[1] = Batol(parm->parms[2]);
|
|
|
|
cols[2] = Batol(parm->parms[3]);
|
|
|
|
eff = Batol(parm->parms[4]);
|
|
|
|
|
|
|
|
hicsetpalettetint(pal,cols[0],cols[1],cols[2],eff);
|
|
|
|
|
|
|
|
return OSDCMD_OK;
|
2006-04-23 06:44:19 +00:00
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t osdcmd_glinfo(const osdfuncparm_t *parm)
|
2006-04-23 06:44:19 +00:00
|
|
|
{
|
2006-04-24 19:04:22 +00:00
|
|
|
char *s,*t,*u,i;
|
|
|
|
|
2008-03-22 10:23:57 +00:00
|
|
|
UNREFERENCED_PARAMETER(parm);
|
|
|
|
|
2007-12-12 17:42:14 +00:00
|
|
|
if (bpp == 8)
|
|
|
|
{
|
2008-02-24 00:46:57 +00:00
|
|
|
initprintf("glinfo: Not in OpenGL mode.\n");
|
2006-04-24 19:04:22 +00:00
|
|
|
return OSDCMD_OK;
|
|
|
|
}
|
|
|
|
|
2008-02-24 00:46:57 +00:00
|
|
|
initprintf("OpenGL Information:\n"
|
2006-04-24 19:04:22 +00:00
|
|
|
" Version: %s\n"
|
|
|
|
" Vendor: %s\n"
|
2008-07-09 23:25:38 +00:00
|
|
|
" Renderer: %s\n",
|
|
|
|
glinfo.version,
|
|
|
|
glinfo.vendor,
|
|
|
|
glinfo.renderer);
|
|
|
|
|
|
|
|
if (!glinfo.dumped)
|
|
|
|
return OSDCMD_OK;
|
|
|
|
|
|
|
|
initprintf(" Maximum anisotropy: %.1f%s\n"
|
2006-04-24 19:04:22 +00:00
|
|
|
" BGRA textures: %s\n"
|
2009-09-30 01:26:13 +00:00
|
|
|
" Non-power-of-2 textures: %s\n"
|
2006-04-24 19:04:22 +00:00
|
|
|
" Texure compression: %s\n"
|
|
|
|
" Clamp-to-edge: %s\n"
|
|
|
|
" Multisampling: %s\n"
|
|
|
|
" Nvidia multisample hint: %s\n"
|
2007-01-06 01:29:45 +00:00
|
|
|
" ARBfp fragment programs: %s\n"
|
|
|
|
" Depth textures: %s\n"
|
|
|
|
" Shadow textures: %s\n"
|
|
|
|
" Frame Buffer Objects: %s\n"
|
|
|
|
" Rectangle textures: %s\n"
|
2007-03-08 03:07:10 +00:00
|
|
|
" Multitexturing: %s\n"
|
|
|
|
" env_combine: %s\n"
|
|
|
|
" Vertex Buffer Objects: %s\n"
|
2009-02-05 08:56:59 +00:00
|
|
|
" Shader Model 4: %s\n"
|
2009-09-30 01:26:13 +00:00
|
|
|
" Occlusion queries: %s\n"
|
|
|
|
" GLSL: %s\n"
|
2006-04-24 19:04:22 +00:00
|
|
|
" Extensions:\n",
|
|
|
|
glinfo.maxanisotropy, glinfo.maxanisotropy>1.0?"":" (no anisotropic filtering)",
|
|
|
|
glinfo.bgra ? "supported": "not supported",
|
|
|
|
glinfo.texnpot ? "supported": "not supported",
|
|
|
|
glinfo.texcompr ? "supported": "not supported",
|
|
|
|
glinfo.clamptoedge ? "supported": "not supported",
|
|
|
|
glinfo.multisample ? "supported": "not supported",
|
2007-01-06 01:29:45 +00:00
|
|
|
glinfo.nvmultisamplehint ? "supported": "not supported",
|
|
|
|
glinfo.arbfp ? "supported": "not supported",
|
|
|
|
glinfo.depthtex ? "supported": "not supported",
|
|
|
|
glinfo.shadow ? "supported": "not supported",
|
|
|
|
glinfo.fbos ? "supported": "not supported",
|
2007-03-08 03:07:10 +00:00
|
|
|
glinfo.rect ? "supported": "not supported",
|
|
|
|
glinfo.multitex ? "supported": "not supported",
|
|
|
|
glinfo.envcombine ? "supported": "not supported",
|
2009-02-05 08:56:59 +00:00
|
|
|
glinfo.vbos ? "supported": "not supported",
|
2009-09-30 01:26:13 +00:00
|
|
|
glinfo.sm4 ? "supported": "not supported",
|
|
|
|
glinfo.occlusionqueries ? "supported": "not supported",
|
|
|
|
glinfo.glsl ? "supported": "not supported"
|
2006-04-24 19:04:22 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
s = Bstrdup(glinfo.extensions);
|
2008-02-24 00:46:57 +00:00
|
|
|
if (!s) initprintf(glinfo.extensions);
|
2007-12-12 17:42:14 +00:00
|
|
|
else
|
|
|
|
{
|
2006-04-24 19:04:22 +00:00
|
|
|
i = 0; t = u = s;
|
2007-12-12 17:42:14 +00:00
|
|
|
while (*t)
|
|
|
|
{
|
|
|
|
if (*t == ' ')
|
|
|
|
{
|
|
|
|
if (i&1)
|
|
|
|
{
|
2006-04-24 19:04:22 +00:00
|
|
|
*t = 0;
|
2008-02-24 00:46:57 +00:00
|
|
|
initprintf(" %s\n",u);
|
2006-04-24 19:04:22 +00:00
|
|
|
u = t+1;
|
|
|
|
}
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
t++;
|
|
|
|
}
|
2008-02-24 00:46:57 +00:00
|
|
|
if (i&1) initprintf(" %s\n",u);
|
2006-04-24 19:04:22 +00:00
|
|
|
Bfree(s);
|
|
|
|
}
|
|
|
|
|
|
|
|
return OSDCMD_OK;
|
2006-04-23 06:44:19 +00:00
|
|
|
}
|
|
|
|
#endif
|
2008-07-12 23:44:07 +00:00
|
|
|
#endif
|
2006-04-23 06:44:19 +00:00
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
static int32_t osdcmd_vars(const osdfuncparm_t *parm)
|
2006-04-23 06:44:19 +00:00
|
|
|
{
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t showval = (parm->numparms < 1);
|
2006-04-24 19:04:22 +00:00
|
|
|
|
2008-07-03 07:37:41 +00:00
|
|
|
if (!Bstrcasecmp(parm->name, "r_scrcaptureformat"))
|
2007-12-12 17:42:14 +00:00
|
|
|
{
|
2007-01-04 07:15:17 +00:00
|
|
|
const char *fmts[] = {"TGA", "PCX"};
|
2008-07-03 07:37:41 +00:00
|
|
|
if (showval) { OSD_Printf("r_scrcaptureformat is %s\n", fmts[captureformat]); }
|
2007-12-12 17:42:14 +00:00
|
|
|
else
|
|
|
|
{
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t j;
|
2006-04-24 19:04:22 +00:00
|
|
|
for (j=0; j<2; j++)
|
2007-12-12 17:42:14 +00:00
|
|
|
if (!Bstrcasecmp(parm->parms[0], fmts[j])) break;
|
2006-04-24 19:04:22 +00:00
|
|
|
if (j == 2) return OSDCMD_SHOWHELP;
|
2007-01-04 07:15:17 +00:00
|
|
|
captureformat = j;
|
2006-04-24 19:04:22 +00:00
|
|
|
}
|
|
|
|
return OSDCMD_OK;
|
|
|
|
}
|
|
|
|
return OSDCMD_SHOWHELP;
|
2006-04-23 06:44:19 +00:00
|
|
|
}
|
|
|
|
|
2009-01-09 09:29:17 +00:00
|
|
|
int32_t baselayer_init(void)
|
2006-04-23 06:44:19 +00:00
|
|
|
{
|
2009-04-29 06:20:07 +00:00
|
|
|
uint32_t i;
|
|
|
|
|
|
|
|
cvar_t cvars_engine[] =
|
|
|
|
{
|
|
|
|
#ifdef SUPERBUILD
|
2009-04-29 07:47:10 +00:00
|
|
|
{ "r_novoxmips","r_novoxmips: turn off/on the use of mipmaps when rendering 8-bit voxels",(void *)&novoxmips, CVAR_BOOL, 0, 0, 1 },
|
|
|
|
{ "r_voxels","r_voxels: enable/disable automatic sprite->voxel rendering",(void *)&usevoxels, CVAR_BOOL, 0, 0, 1 },
|
|
|
|
{ "r_scrcaptureformat","r_scrcaptureformat: sets the output format for screenshots (TGA or PCX)",osdcmd_vars, CVAR_FUNCPTR, 0, 0, 0 },
|
2009-04-29 06:20:07 +00:00
|
|
|
#endif
|
|
|
|
};
|
|
|
|
|
|
|
|
for (i=0; i<sizeof(cvars_engine)/sizeof(cvars_engine[0]); i++)
|
|
|
|
{
|
|
|
|
OSD_RegisterCvar(&cvars_engine[i]);
|
|
|
|
if (cvars_engine[i].type == CVAR_FUNCPTR) OSD_RegisterFunction(cvars_engine[i].name, cvars_engine[i].helpstr, cvars_engine[i].var);
|
|
|
|
else OSD_RegisterFunction(cvars_engine[i].name, cvars_engine[i].helpstr, osdcmd_cvar_set);
|
|
|
|
}
|
|
|
|
|
2006-04-23 06:44:19 +00:00
|
|
|
#ifdef POLYMOST
|
2006-04-24 19:04:22 +00:00
|
|
|
OSD_RegisterFunction("setrendermode","setrendermode <number>: sets the engine's rendering mode.\n"
|
|
|
|
"Mode numbers are:\n"
|
|
|
|
" 0 - Classic Build software\n"
|
|
|
|
" 1 - Polygonal flat-shaded software\n"
|
|
|
|
" 2 - Polygonal textured software\n"
|
2006-04-23 06:44:19 +00:00
|
|
|
#ifdef USE_OPENGL
|
2006-04-24 19:04:22 +00:00
|
|
|
" 3 - Polygonal OpenGL\n"
|
2009-04-12 21:52:49 +00:00
|
|
|
" 4 - Great justice renderer\n"
|
2006-04-23 06:44:19 +00:00
|
|
|
#endif
|
2006-04-24 19:04:22 +00:00
|
|
|
,
|
|
|
|
osdfunc_setrendermode);
|
2009-04-29 06:20:07 +00:00
|
|
|
|
2006-04-23 06:44:19 +00:00
|
|
|
#ifdef DEBUGGINGAIDS
|
2006-04-24 19:04:22 +00:00
|
|
|
OSD_RegisterFunction("hicsetpalettetint","hicsetpalettetint: sets palette tinting values",osdcmd_hicsetpalettetint);
|
2006-04-23 06:44:19 +00:00
|
|
|
#endif
|
2009-04-29 06:20:07 +00:00
|
|
|
|
2009-05-07 16:00:49 +00:00
|
|
|
#ifdef USE_OPENGL
|
2006-04-24 19:04:22 +00:00
|
|
|
OSD_RegisterFunction("glinfo","glinfo: shows OpenGL information about the current OpenGL mode",osdcmd_glinfo);
|
2009-05-07 16:00:49 +00:00
|
|
|
#endif
|
2009-04-29 06:20:07 +00:00
|
|
|
polymost_initosdfuncs();
|
2006-04-23 06:44:19 +00:00
|
|
|
#endif
|
2009-04-29 06:20:07 +00:00
|
|
|
|
2006-04-24 19:04:22 +00:00
|
|
|
return 0;
|
2006-04-23 06:44:19 +00:00
|
|
|
}
|
|
|
|
|