#include "quakedef.h"
#include "cl_video.h"
+#include "jpeg.h"
cvar_t scr_viewsize = {CVAR_SAVE, "viewsize","100"};
cvar_t scr_fov = {CVAR_SAVE, "fov","90"}; // 10 - 170
cvar_t scr_showpause = {CVAR_SAVE, "showpause","1"};
cvar_t scr_printspeed = {0, "scr_printspeed","8"};
cvar_t scr_2dresolution = {CVAR_SAVE, "scr_2dresolution", "1"};
+cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","0"};
cvar_t cl_avidemo = {0, "cl_avidemo", "0"};
qboolean scr_initialized; // ready to draw
extern int c_rt_lights, c_rt_clears, c_rt_scissored;
extern int c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris;
extern int c_rtcached_shadowmeshes, c_rtcached_shadowtris;
-extern int r_shadow_lightingmode;
void R_TimeReport_Start(void)
{
r_timereport_active = r_speeds.integer && cls.signon == SIGNONS && cls.state == ca_connected;
c_faces, c_nodes, c_leafs, c_light_polys,
c_models, c_bmodels, c_sprites, c_particles, c_dlights,
c_alias_polys, c_meshs, c_meshelements / 3);
- if (r_shadow_lightingmode)
- {
- sprintf(r_speeds_string + strlen(r_speeds_string),
- "realtime lighting:%4i lights%4i clears%4i scissored\n"
- "dynamic: %6i shadowmeshes%6i shadowtris%6i lightmeshes%6i lighttris\n"
- "precomputed: %6i shadowmeshes%6i shadowtris\n",
- c_rt_lights, c_rt_clears, c_rt_scissored,
- c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris,
- c_rtcached_shadowmeshes, c_rtcached_shadowtris);
- }
+
+ sprintf(r_speeds_string + strlen(r_speeds_string),
+ "realtime lighting:%4i lights%4i clears%4i scissored\n"
+ "dynamic: %6i shadowmeshes%6i shadowtris%6i lightmeshes%6i lighttris\n"
+ "precomputed: %6i shadowmeshes%6i shadowtris\n",
+ c_rt_lights, c_rt_clears, c_rt_scissored,
+ c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris,
+ c_rtcached_shadowmeshes, c_rtcached_shadowtris);
c_alias_polys = 0;
c_light_polys = 0;
Cvar_RegisterVariable (&scr_centertime);
Cvar_RegisterVariable (&scr_printspeed);
Cvar_RegisterVariable (&scr_2dresolution);
+ Cvar_RegisterVariable (&scr_screenshot_jpeg);
Cvar_RegisterVariable (&cl_avidemo);
Cmd_AddCommand ("sizeup",SCR_SizeUp_f);
// HACK HACK HACK
// load the image data for the player image in the config menu
- dat = (qpic_t *)COM_LoadFile ("gfx/menuplyr.lmp", false);
+ dat = (qpic_t *)FS_LoadFile ("gfx/menuplyr.lmp", false);
if (!dat)
Sys_Error("unable to load gfx/menuplyr.lmp");
SwapPic (dat);
mesh.numtriangles = 2;
mesh.numvertices = 4;
mesh.indices = picelements;
- mesh.vertices = floats;
- mesh.texcoords = floats + 16;
- mesh.colors = floats + 32;
+ mesh.vertex3f = floats;
+ mesh.texcoord2f = floats + 16;
+ mesh.color4f = floats + 32;
memset(floats, 0, sizeof(floats));
- mesh.vertices[0] = mesh.vertices[12] = x;
- mesh.vertices[1] = mesh.vertices[5] = y;
- mesh.vertices[4] = mesh.vertices[8] = x + width;
- mesh.vertices[9] = mesh.vertices[13] = y + height;
- mesh.texcoords[4] = mesh.texcoords[8] = mesh.texcoords[9] = mesh.texcoords[13] = 1;
- mesh.colors[0] = mesh.colors[4] = mesh.colors[8] = mesh.colors[12] = red;
- mesh.colors[1] = mesh.colors[5] = mesh.colors[9] = mesh.colors[13] = green;
- mesh.colors[2] = mesh.colors[6] = mesh.colors[10] = mesh.colors[14] = blue;
- mesh.colors[3] = mesh.colors[7] = mesh.colors[11] = mesh.colors[15] = alpha;
+ mesh.vertex3f[0] = mesh.vertex3f[12] = x;
+ mesh.vertex3f[1] = mesh.vertex3f[5] = y;
+ mesh.vertex3f[4] = mesh.vertex3f[8] = x + width;
+ mesh.vertex3f[9] = mesh.vertex3f[13] = y + height;
+ mesh.texcoord2f[4] = mesh.texcoord2f[8] = mesh.texcoord2f[9] = mesh.texcoord2f[13] = 1;
+ mesh.color4f[0] = mesh.color4f[4] = mesh.color4f[8] = mesh.color4f[12] = red;
+ mesh.color4f[1] = mesh.color4f[5] = mesh.color4f[9] = mesh.color4f[13] = green;
+ mesh.color4f[2] = mesh.color4f[6] = mesh.color4f[10] = mesh.color4f[14] = blue;
+ mesh.color4f[3] = mesh.color4f[7] = mesh.color4f[11] = mesh.color4f[15] = alpha;
DrawQ_Mesh (&mesh, flags);
#else
int size;
mesh.numtriangles = 2;
mesh.numvertices = 4;
mesh.indices = picelements;
- mesh.vertices = floats;
- mesh.texcoords = floats + 16;
- mesh.colors = floats + 32;
+ mesh.vertex3f = floats;
+ mesh.texcoord2f = floats + 16;
+ mesh.color4f = floats + 32;
memset(floats, 0, sizeof(floats));
- mesh.vertices[0] = mesh.vertices[12] = x;
- mesh.vertices[1] = mesh.vertices[5] = y;
- mesh.vertices[4] = mesh.vertices[8] = x + w;
- mesh.vertices[9] = mesh.vertices[13] = y + h;
- mesh.colors[0] = mesh.colors[4] = mesh.colors[8] = mesh.colors[12] = red;
- mesh.colors[1] = mesh.colors[5] = mesh.colors[9] = mesh.colors[13] = green;
- mesh.colors[2] = mesh.colors[6] = mesh.colors[10] = mesh.colors[14] = blue;
- mesh.colors[3] = mesh.colors[7] = mesh.colors[11] = mesh.colors[15] = alpha;
+ mesh.vertex3f[0] = mesh.vertex3f[12] = x;
+ mesh.vertex3f[1] = mesh.vertex3f[5] = y;
+ mesh.vertex3f[4] = mesh.vertex3f[8] = x + w;
+ mesh.vertex3f[9] = mesh.vertex3f[13] = y + h;
+ mesh.color4f[0] = mesh.color4f[4] = mesh.color4f[8] = mesh.color4f[12] = red;
+ mesh.color4f[1] = mesh.color4f[5] = mesh.color4f[9] = mesh.color4f[13] = green;
+ mesh.color4f[2] = mesh.color4f[6] = mesh.color4f[10] = mesh.color4f[14] = blue;
+ mesh.color4f[3] = mesh.color4f[7] = mesh.color4f[11] = mesh.color4f[15] = alpha;
DrawQ_Mesh (&mesh, flags);
#else
int size;
void DrawQ_SuperPic(float x, float y, char *picname, float width, float height, float s1, float t1, float r1, float g1, float b1, float a1, float s2, float t2, float r2, float g2, float b2, float a2, float s3, float t3, float r3, float g3, float b3, float a3, float s4, float t4, float r4, float g4, float b4, float a4, int flags)
{
- float floats[48];
+ float floats[36];
cachepic_t *pic;
drawqueuemesh_t mesh;
memset(&mesh, 0, sizeof(mesh));
}
mesh.numtriangles = 2;
mesh.numvertices = 4;
- mesh.indices = picelements;
- mesh.vertices = floats;
- mesh.texcoords = floats + 16;
- mesh.colors = floats + 32;
+ mesh.element3i = picelements;
+ mesh.vertex3f = floats;
+ mesh.texcoord2f = floats + 12;
+ mesh.color4f = floats + 20;
memset(floats, 0, sizeof(floats));
- mesh.vertices[0] = mesh.vertices[12] = x;
- mesh.vertices[1] = mesh.vertices[5] = y;
- mesh.vertices[4] = mesh.vertices[8] = x + width;
- mesh.vertices[9] = mesh.vertices[13] = y + height;
- mesh.texcoords[ 0] = s1;mesh.texcoords[ 1] = t1;mesh.colors[ 0] = r1;mesh.colors[ 1] = g1;mesh.colors[ 2] = b1;mesh.colors[ 3] = a1;
- mesh.texcoords[ 4] = s2;mesh.texcoords[ 5] = t2;mesh.colors[ 4] = r2;mesh.colors[ 5] = g2;mesh.colors[ 6] = b2;mesh.colors[ 7] = a2;
- mesh.texcoords[ 8] = s4;mesh.texcoords[ 9] = t4;mesh.colors[ 8] = r4;mesh.colors[ 9] = g4;mesh.colors[10] = b4;mesh.colors[11] = a4;
- mesh.texcoords[12] = s3;mesh.texcoords[13] = t3;mesh.colors[12] = r3;mesh.colors[13] = g3;mesh.colors[14] = b3;mesh.colors[15] = a3;
+ mesh.vertex3f[0] = mesh.vertex3f[9] = x;
+ mesh.vertex3f[1] = mesh.vertex3f[4] = y;
+ mesh.vertex3f[3] = mesh.vertex3f[6] = x + width;
+ mesh.vertex3f[7] = mesh.vertex3f[10] = y + height;
+ mesh.texcoord2f[0] = s1;mesh.texcoord2f[1] = t1;mesh.color4f[ 0] = r1;mesh.color4f[ 1] = g1;mesh.color4f[ 2] = b1;mesh.color4f[ 3] = a1;
+ mesh.texcoord2f[2] = s2;mesh.texcoord2f[3] = t2;mesh.color4f[ 4] = r2;mesh.color4f[ 5] = g2;mesh.color4f[ 6] = b2;mesh.color4f[ 7] = a2;
+ mesh.texcoord2f[4] = s4;mesh.texcoord2f[5] = t4;mesh.color4f[ 8] = r4;mesh.color4f[ 9] = g4;mesh.color4f[10] = b4;mesh.color4f[11] = a4;
+ mesh.texcoord2f[6] = s3;mesh.texcoord2f[7] = t3;mesh.color4f[12] = r3;mesh.color4f[13] = g3;mesh.color4f[14] = b3;mesh.color4f[15] = a3;
DrawQ_Mesh (&mesh, flags);
}
size = sizeof(*dq);
size += sizeof(drawqueuemesh_t);
size += sizeof(int[3]) * mesh->numtriangles;
- size += sizeof(float[4]) * mesh->numvertices;
- size += sizeof(float[4]) * mesh->numvertices;
+ size += sizeof(float[3]) * mesh->numvertices;
+ size += sizeof(float[2]) * mesh->numvertices;
size += sizeof(float[4]) * mesh->numvertices;
if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
return;
m->numtriangles = mesh->numtriangles;
m->numvertices = mesh->numvertices;
m->texture = mesh->texture;
- m->indices = p;memcpy(m->indices , mesh->indices , m->numtriangles * sizeof(int[3]));(qbyte *)p += m->numtriangles * sizeof(int[3]);
- m->vertices = p;memcpy(m->vertices , mesh->vertices , m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
- m->texcoords = p;memcpy(m->texcoords, mesh->texcoords, m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
- m->colors = p;memcpy(m->colors , mesh->colors , m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
+ m->element3i = p;memcpy(m->element3i , mesh->element3i , m->numtriangles * sizeof(int[3]));(qbyte *)p += m->numtriangles * sizeof(int[3]);
+ m->vertex3f = p;memcpy(m->vertex3f , mesh->vertex3f , m->numvertices * sizeof(float[3]));(qbyte *)p += m->numvertices * sizeof(float[3]);
+ m->texcoord2f = p;memcpy(m->texcoord2f, mesh->texcoord2f, m->numvertices * sizeof(float[2]));(qbyte *)p += m->numvertices * sizeof(float[2]);
+ m->color4f = p;memcpy(m->color4f , mesh->color4f , m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
r_refdef.drawqueuesize += dq->size;
}
static int i = 0;
char filename[16];
char checkname[MAX_OSPATH];
-//
-// find a file name to save it to
-//
+ const char* extens;
+ qboolean jpeg = (scr_screenshot_jpeg.integer != 0);
+
+ if (jpeg)
+ extens = "jpg";
+ else
+ extens = "tga";
+
+ // find a file name to save it to
for (; i<=9999 ; i++)
{
- sprintf (filename, "dp%04i.tga", i);
- sprintf (checkname, "%s/%s", com_gamedir, filename);
- if (Sys_FileTime(checkname) == -1)
- break; // file doesn't exist
+ sprintf (filename, "dp%04i.%s", i, extens);
+ sprintf (checkname, "%s/%s", fs_gamedir, filename);
+ if (!FS_SysFileExists(checkname))
+ break;
}
if (i==10000)
{
- Con_Printf ("SCR_ScreenShot_f: Couldn't create a TGA file\n");
+ Con_Printf ("SCR_ScreenShot_f: Couldn't create the image file\n");
return;
}
- if (SCR_ScreenShot(filename, vid.realx, vid.realy, vid.realwidth, vid.realheight))
+ if (SCR_ScreenShot (filename, vid.realx, vid.realy, vid.realwidth, vid.realheight, jpeg))
Con_Printf ("Wrote %s\n", filename);
else
Con_Printf ("unable to write %s\n", filename);
{
char filename[32];
sprintf(filename, "dpavi%06d.tga", cl_avidemo_frame);
- if (SCR_ScreenShot(filename, vid.realx, vid.realy, vid.realwidth, vid.realheight))
+ if (SCR_ScreenShot(filename, vid.realx, vid.realy, vid.realwidth, vid.realheight, false))
cl_avidemo_frame++;
else
{
VectorCopy(envmapinfo[j].angles, r_refdef.viewangles);
R_ClearScreen();
R_RenderView ();
- SCR_ScreenShot(filename, vid.realx, vid.realy, size, size);
+ SCR_ScreenShot(filename, vid.realx, vid.realy, size, size, false);
}
envmap = false;