#include "cl_video.h"
#include "jpeg.h"
#include "cl_collision.h"
+#include "csprogs.h"
cvar_t scr_viewsize = {CVAR_SAVE, "viewsize","100"};
cvar_t scr_fov = {CVAR_SAVE, "fov","90"}; // 1 - 170
cvar_t scr_showram = {CVAR_SAVE, "showram","1"};
cvar_t scr_showturtle = {CVAR_SAVE, "showturtle","0"};
cvar_t scr_showpause = {CVAR_SAVE, "showpause","1"};
+cvar_t scr_showbrand = {0, "showbrand","0"};
cvar_t scr_printspeed = {0, "scr_printspeed","8"};
cvar_t vid_conwidth = {CVAR_SAVE, "vid_conwidth", "640"};
cvar_t vid_conheight = {CVAR_SAVE, "vid_conheight", "480"};
-cvar_t vid_pixelaspect = {CVAR_SAVE, "vid_pixelaspect", "1"};
-cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","0"};
+cvar_t vid_pixelheight = {CVAR_SAVE, "vid_pixelheight", "1"};
+cvar_t scr_screenshot_jpeg = {CVAR_SAVE, "scr_screenshot_jpeg","1"};
cvar_t scr_screenshot_jpeg_quality = {CVAR_SAVE, "scr_screenshot_jpeg_quality","0.9"};
cvar_t scr_screenshot_gamma = {CVAR_SAVE, "scr_screenshot_gamma","2.2"};
-cvar_t scr_screenshot_name = {0, "scr_screenshot_name","dp"};
+// scr_screenshot_name is defined in fs.c
cvar_t cl_capturevideo = {0, "cl_capturevideo", "0"};
cvar_t cl_capturevideo_sound = {0, "cl_capturevideo_sound", "0"};
cvar_t cl_capturevideo_fps = {0, "cl_capturevideo_fps", "30"};
// backend
void R_ClearScreen(void);
+// color tag printing
+static vec4_t string_colors[] =
+{
+ // Quake3 colors
+ // LordHavoc: why on earth is cyan before magenta in Quake3?
+ // LordHavoc: note: Doom3 uses white for [0] and [7]
+ {0.0, 0.0, 0.0, 1.0}, // black
+ {1.0, 0.0, 0.0, 1.0}, // red
+ {0.0, 1.0, 0.0, 1.0}, // green
+ {1.0, 1.0, 0.0, 1.0}, // yellow
+ {0.0, 0.0, 1.0, 1.0}, // blue
+ {0.0, 1.0, 1.0, 1.0}, // cyan
+ {1.0, 0.0, 1.0, 1.0}, // magenta
+ {1.0, 1.0, 1.0, 1.0}, // white
+ // [515]'s BX_COLOREDTEXT extension
+ {1.0, 1.0, 1.0, 0.5}, // half transparent
+ {0.5, 0.5, 0.5, 1.0} // half brightness
+ // Black's color table
+ //{1.0, 1.0, 1.0, 1.0},
+ //{1.0, 0.0, 0.0, 1.0},
+ //{0.0, 1.0, 0.0, 1.0},
+ //{0.0, 0.0, 1.0, 1.0},
+ //{1.0, 1.0, 0.0, 1.0},
+ //{0.0, 1.0, 1.0, 1.0},
+ //{1.0, 0.0, 1.0, 1.0},
+ //{0.1, 0.1, 0.1, 1.0}
+};
+
+#define STRING_COLORS_COUNT (sizeof(string_colors) / sizeof(vec4_t))
+
+// color is read and changed in the end
+void DrawQ_ColoredString( float x, float y, const char *text, int maxlen, float scalex, float scaley, float basered, float basegreen, float baseblue, float basealpha, int flags, int *outcolor )
+{
+ vec_t *color;
+ int len;
+ int colorindex;
+ const char *start, *current;
+
+ if( !outcolor || *outcolor == -1 ) {
+ colorindex = STRING_COLOR_DEFAULT;
+ } else {
+ colorindex = *outcolor;
+ }
+ color = string_colors[colorindex];
+
+ if( maxlen < 1)
+ len = (int)strlen( text );
+ else
+ len = min( maxlen, (int) strlen( text ) );
+
+ start = current = text;
+ while( len > 0 ) {
+ // check for color control char
+ if( *current == STRING_COLOR_TAG ) {
+ // get next char
+ current++;
+ len--;
+ if( len == 0 ) {
+ break;
+ }
+ // display the tag char?
+ if( *current == STRING_COLOR_TAG ) {
+ // only display one of the two
+ start = current;
+ // get the next char
+ current++;
+ len--;
+ } else if( '0' <= *current && *current <= '9' ) {
+ colorindex = 0;
+ do {
+ colorindex = colorindex * 10 + (*current - '0');
+ // only read as long as it makes a valid index
+ if( colorindex >= (int)STRING_COLORS_COUNT ) {
+ // undo the last operation
+ colorindex /= 10;
+ break;
+ }
+ current++;
+ len--;
+ } while( len > 0 && '0' <= *current && *current <= '9' );
+ // set the color
+ color = string_colors[colorindex];
+ // we jump over the color tag
+ start = current;
+ }
+ }
+ // go on and read normal text in until the next control char
+ while( len > 0 && *current != STRING_COLOR_TAG ) {
+ current++;
+ len--;
+ }
+ // display the text
+ if( start != current ) {
+ // draw the string
+ DrawQ_String( x, y, start, current - start, scalex, scaley, basered * color[0], basegreen * color[1], baseblue * color[2], basealpha * color[3], flags );
+ // update x to be at the new start position
+ x += (current - start) * scalex;
+ // set start accordingly
+ start = current;
+ }
+ }
+
+ // return the last colorindex
+ if( outcolor ) {
+ *outcolor = colorindex;
+ }
+}
+
/*
===============================================================================
===============================================================================
*/
-char scr_centerstring[1024];
+char scr_centerstring[MAX_INPUTLINE];
float scr_centertime_start; // for slow victory printing
float scr_centertime_off;
int scr_center_lines;
int l;
int x, y;
int remaining;
+ int color;
// the finale prints the characters one at a time
if (cl.intermission)
scr_erase_center = 0;
start = scr_centerstring;
+ if (remaining < 1)
+ return;
+
if (scr_center_lines <= 4)
y = vid_conheight.integer*0.35;
else
y = 48;
+ color = -1;
do
{
// scan the width of the line
{
if (remaining < l)
l = remaining;
- DrawQ_String(x, y, start, l, 8, 8, 1, 1, 1, 1, 0);
+ DrawQ_ColoredString(x, y, start, l, 8, 8, 1, 1, 1, 1, 0, &color);
remaining -= l;
if (remaining <= 0)
return;
DrawQ_Pic ((vid_conwidth.integer - pic->width)/2, (vid_conheight.integer - pic->height)/2, "gfx/pause", 0, 0, 1, 1, 1, 1, 0);
}
+/*
+==============
+SCR_DrawBrand
+==============
+*/
+void SCR_DrawBrand (void)
+{
+ cachepic_t *pic;
+ float x, y;
+
+ if (!scr_showbrand.value)
+ return;
+ pic = Draw_CachePic ("gfx/brand", true);
+ switch ((int)scr_showbrand.value)
+ {
+ case 1: // bottom left
+ x = 0;
+ y = vid_conheight.integer - pic->height;
+ break;
+ case 2: // bottom centre
+ x = (vid_conwidth.integer - pic->width) / 2;
+ y = vid_conheight.integer - pic->height;
+ break;
+ case 3: // bottom right
+ x = vid_conwidth.integer - pic->width;
+ y = vid_conheight.integer - pic->height;
+ break;
+ case 4: // centre right
+ x = vid_conwidth.integer - pic->width;
+ y = (vid_conheight.integer - pic->height) / 2;
+ break;
+ case 5: // top right
+ x = vid_conwidth.integer - pic->width;
+ y = 0;
+ break;
+ case 6: // top centre
+ x = (vid_conwidth.integer - pic->width) / 2;
+ y = 0;
+ break;
+ case 7: // top left
+ x = 0;
+ y = 0;
+ break;
+ case 8: // centre left
+ x = 0;
+ y = (vid_conheight.integer - pic->height) / 2;
+ break;
+ default:
+ return;
+ }
+ DrawQ_Pic (x, y, "gfx/brand", 0, 0, 1, 1, 1, 1, 0);
+}
//=============================================================================
if (!r_timereport_active || r_showtrispass)
return;
+ qglFinish();
r_timereport_temp = r_timereport_current;
r_timereport_current = Sys_DoubleTime();
t = (int) ((r_timereport_current - r_timereport_temp) * 1000000.0);
dpsnprintf(tempbuf, sizeof(tempbuf), "%8i %s", t, desc);
- length = strlen(tempbuf);
+ length = (int)strlen(tempbuf);
while (length < 20)
tempbuf[length++] = ' ';
tempbuf[length] = 0;
{
speedstringcount = 0;
sprintf(r_speeds_string + strlen(r_speeds_string), "org:'%+8.2f %+8.2f %+8.2f' dir:'%+2.3f %+2.3f %+2.3f'\n", r_vieworigin[0], r_vieworigin[1], r_vieworigin[2], r_viewforward[0], r_viewforward[1], r_viewforward[2]);
- sprintf(r_speeds_string + strlen(r_speeds_string), "world:%6i faces%6i nodes%6i leafs%6i dlitwalls\n", c_faces, c_nodes, c_leafs, c_light_polys);
- sprintf(r_speeds_string + strlen(r_speeds_string), "%5i models%5i bmodels%5i sprites%6i particles%4i dlights\n", c_models, c_bmodels, c_sprites, c_particles, c_dlights);
- sprintf(r_speeds_string + strlen(r_speeds_string), "%6i modeltris%6i meshs%6i meshtris\n", c_alias_polys, c_meshs, c_meshelements / 3);
- sprintf(r_speeds_string + strlen(r_speeds_string), "bloom %s: %i copies (%i pixels) %i draws (%i pixels)\n", c_bloom ? "active" : "inactive", c_bloomcopies, c_bloomcopypixels, c_bloomdraws, c_bloomdrawpixels);
- sprintf(r_speeds_string + strlen(r_speeds_string), "realtime lighting:%4i lights%4i clears%4i scissored\n", c_rt_lights, c_rt_clears, c_rt_scissored);
- sprintf(r_speeds_string + strlen(r_speeds_string), "dynamic: %6i shadowmeshes%6i shadowtris%6i lightmeshes%6i lighttris\n", c_rt_shadowmeshes, c_rt_shadowtris, c_rt_lightmeshes, c_rt_lighttris);
- sprintf(r_speeds_string + strlen(r_speeds_string), "precomputed: %6i shadowmeshes%6i shadowtris\n", c_rtcached_shadowmeshes, c_rtcached_shadowtris);
-
- c_alias_polys = 0;
- c_light_polys = 0;
- c_faces = 0;
- c_nodes = 0;
- c_leafs = 0;
- c_models = 0;
- c_bmodels = 0;
- c_sprites = 0;
- c_particles = 0;
- c_dlights = 0;
- c_meshs = 0;
- c_meshelements = 0;
- c_rt_lights = 0;
- c_rt_clears = 0;
- c_rt_scissored = 0;
- c_rt_shadowmeshes = 0;
- c_rt_shadowtris = 0;
- c_rt_lightmeshes = 0;
- c_rt_lighttris = 0;
- c_rtcached_shadowmeshes = 0;
- c_rtcached_shadowtris = 0;
- c_bloom = 0;
- c_bloomcopies = 0;
- c_bloomcopypixels = 0;
- c_bloomdraws = 0;
- c_bloomdrawpixels = 0;
+ sprintf(r_speeds_string + strlen(r_speeds_string), "%5i entities%6i surfaces%6i triangles%5i leafs%5i portals%6i particles\n", renderstats.entities, renderstats.entities_surfaces, renderstats.entities_triangles, renderstats.world_leafs, renderstats.world_portals, renderstats.particles);
+ sprintf(r_speeds_string + strlen(r_speeds_string), "%4i lights%4i clears%4i scissored%7i light%7i shadow%7i dynamic\n", renderstats.lights, renderstats.lights_clears, renderstats.lights_scissored, renderstats.lights_lighttriangles, renderstats.lights_shadowtriangles, renderstats.lights_dynamicshadowtriangles);
+ if (renderstats.bloom)
+ sprintf(r_speeds_string + strlen(r_speeds_string), "rendered%6i meshes%8i triangles bloompixels%8i copied%8i drawn\n", renderstats.meshes, renderstats.meshes_elements / 3, renderstats.bloom_copypixels, renderstats.bloom_drawpixels);
+ else
+ sprintf(r_speeds_string + strlen(r_speeds_string), "rendered%6i meshes%8i triangles\n", renderstats.meshes, renderstats.meshes_elements / 3);
r_timereport_start = Sys_DoubleTime();
}
+
+ memset(&renderstats, 0, sizeof(renderstats));
}
void R_TimeReport_End(void)
Cvar_RegisterVariable (&scr_showram);
Cvar_RegisterVariable (&scr_showturtle);
Cvar_RegisterVariable (&scr_showpause);
+ Cvar_RegisterVariable (&scr_showbrand);
Cvar_RegisterVariable (&scr_centertime);
Cvar_RegisterVariable (&scr_printspeed);
Cvar_RegisterVariable (&vid_conwidth);
Cvar_RegisterVariable (&vid_conheight);
- Cvar_RegisterVariable (&vid_pixelaspect);
+ Cvar_RegisterVariable (&vid_pixelheight);
Cvar_RegisterVariable (&scr_screenshot_jpeg);
Cvar_RegisterVariable (&scr_screenshot_jpeg_quality);
Cvar_RegisterVariable (&scr_screenshot_gamma);
if (alpha < (1.0f / 255.0f))
return;
if (maxlen < 1)
- len = strlen(string);
+ len = (int)strlen(string);
else
for (len = 0;len < maxlen && string[len];len++);
for (;len > 0 && string[0] == ' ';string++, x += scalex, len--);
green = bound(0, green, 1);
blue = bound(0, blue, 1);
alpha = bound(0, alpha, 1);
- dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
+ dq = (drawqueue_t *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
dq->size = size;
dq->command = DRAWQUEUE_STRING;
dq->flags = flags;
DrawQ_String_Real(x,y,string,maxlen,scalex,scaley,red,green,blue,alpha,flags);
}
+
+
void DrawQ_Fill (float x, float y, float w, float h, float red, float green, float blue, float alpha, int flags)
{
DrawQ_SuperPic(x,y,NULL,w,h,0,0,red,green,blue,alpha,1,0,red,green,blue,alpha,0,1,red,green,blue,alpha,1,1,red,green,blue,alpha,flags);
size += sizeof(float[4]) * mesh->num_vertices;
if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
return;
- dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
+ dq = (drawqueue_t *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
dq->size = size;
dq->command = DRAWQUEUE_MESH;
dq->flags = flags;
dq->scalex = 0;
dq->scaley = 0;
p = (void *)(dq + 1);
- m = p;p = (qbyte*)p + sizeof(drawqueuemesh_t);
+ m = (drawqueuemesh_t *)p;p = (unsigned char*)p + sizeof(drawqueuemesh_t);
m->num_triangles = mesh->num_triangles;
m->num_vertices = mesh->num_vertices;
m->texture = mesh->texture;
- m->data_element3i = p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (qbyte*)p + m->num_triangles * sizeof(int[3]);
- m->data_vertex3f = p;memcpy(m->data_vertex3f , mesh->data_vertex3f , m->num_vertices * sizeof(float[3]));p = (qbyte*)p + m->num_vertices * sizeof(float[3]);
- m->data_texcoord2f = p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (qbyte*)p + m->num_vertices * sizeof(float[2]);
- m->data_color4f = p;memcpy(m->data_color4f , mesh->data_color4f , m->num_vertices * sizeof(float[4]));p = (qbyte*)p + m->num_vertices * sizeof(float[4]);
+ m->data_element3i = (int *)p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (unsigned char*)p + m->num_triangles * sizeof(int[3]);
+ m->data_vertex3f = (float *)p;memcpy(m->data_vertex3f , mesh->data_vertex3f , m->num_vertices * sizeof(float[3]));p = (unsigned char*)p + m->num_vertices * sizeof(float[3]);
+ m->data_texcoord2f = (float *)p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (unsigned char*)p + m->num_vertices * sizeof(float[2]);
+ m->data_color4f = (float *)p;memcpy(m->data_color4f , mesh->data_color4f , m->num_vertices * sizeof(float[4]));p = (unsigned char*)p + m->num_vertices * sizeof(float[4]);
+ r_refdef.drawqueuesize += dq->size;
+}
+
+void DrawQ_LineLoop (drawqueuemesh_t *mesh, int flags)
+{
+ int size;
+ void *p;
+ drawqueue_t *dq;
+ drawqueuemesh_t *m;
+ size = sizeof(*dq);
+ size += sizeof(drawqueuemesh_t);
+ size += sizeof(int[3]) * mesh->num_triangles;
+ size += sizeof(float[3]) * mesh->num_vertices;
+ size += sizeof(float[2]) * mesh->num_vertices;
+ size += sizeof(float[4]) * mesh->num_vertices;
+ if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
+ return;
+ dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
+ dq->size = size;
+ dq->command = DRAWQUEUE_LINES;
+ dq->flags = flags;
+ dq->color = 0;
+ dq->x = 0;
+ dq->y = 0;
+ dq->scalex = 0;
+ dq->scaley = 0;
+ p = (void *)(dq + 1);
+ m = p;p = (unsigned char*)p + sizeof(drawqueuemesh_t);
+ m->num_triangles = mesh->num_triangles;
+ m->num_vertices = mesh->num_vertices;
+ m->texture = mesh->texture;
+ m->data_element3i = p;memcpy(m->data_element3i , mesh->data_element3i , m->num_triangles * sizeof(int[3]));p = (unsigned char*)p + m->num_triangles * sizeof(int[3]);
+ m->data_vertex3f = p;memcpy(m->data_vertex3f , mesh->data_vertex3f , m->num_vertices * sizeof(float[3]));p = (unsigned char*)p + m->num_vertices * sizeof(float[3]);
+ m->data_texcoord2f = p;memcpy(m->data_texcoord2f, mesh->data_texcoord2f, m->num_vertices * sizeof(float[2]));p = (unsigned char*)p + m->num_vertices * sizeof(float[2]);
+ m->data_color4f = p;memcpy(m->data_color4f , mesh->data_color4f , m->num_vertices * sizeof(float[4]));p = (unsigned char*)p + m->num_vertices * sizeof(float[4]);
+ r_refdef.drawqueuesize += dq->size;
+}
+
+//LordHavoc: FIXME: this is nasty!
+void DrawQ_LineWidth (float width)
+{
+ drawqueue_t *dq;
+ static int linewidth = 1;
+ if(width == linewidth)
+ return;
+ linewidth = width;
+ if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize)
+ {
+ Con_DPrint("DrawQueue full !\n");
+ return;
+ }
+ dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+ dq->size = sizeof(*dq);
+ dq->command = DRAWQUEUE_LINEWIDTH;
+ dq->x = width;
+
+ r_refdef.drawqueuesize += dq->size;
+}
+
+//[515]: this is old, delete
+void DrawQ_Line (float width, float x1, float y1, float x2, float y2, float r, float g, float b, float alpha, int flags)
+{
+ drawqueue_t *dq;
+ if(width > 0)
+ DrawQ_LineWidth(width);
+ if(r_refdef.drawqueuesize + (int)sizeof(*dq) > r_refdef.maxdrawqueuesize)
+ {
+ Con_DPrint("DrawQueue full !\n");
+ return;
+ }
+ dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+ dq->size = sizeof(*dq);
+ dq->command = DRAWQUEUE_LINES;
+ dq->x = x1;
+ dq->y = y1;
+ dq->scalex = x2;
+ dq->scaley = y2;
+ dq->flags = flags;
+ dq->color = ((unsigned int) (r * 255.0f) << 24) | ((unsigned int) (g * 255.0f) << 16) | ((unsigned int) (b * 255.0f) << 8) | ((unsigned int) (alpha * 255.0f));
+
r_refdef.drawqueuesize += dq->size;
}
Con_DPrint("DrawQueue full !\n");
return;
}
- dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+ dq = (drawqueue_t *) (r_refdef.drawqueue + r_refdef.drawqueuesize);
dq->size = sizeof(*dq);
dq->command = DRAWQUEUE_SETCLIP;
dq->x = x;
Con_DPrint("DrawQueue full !\n");
return;
}
- dq = (void*) (r_refdef.drawqueue + r_refdef.drawqueuesize);
+ dq = (drawqueue_t *) (r_refdef.drawqueue + r_refdef.drawqueuesize);
dq->size = sizeof(*dq);
dq->command = DRAWQUEUE_RESETCLIP;
dq->x = 0;
static char oldname[MAX_QPATH];
char base[MAX_QPATH];
char filename[MAX_QPATH];
- qbyte *buffer1;
- qbyte *buffer2;
- qbyte *buffer3;
+ unsigned char *buffer1;
+ unsigned char *buffer2;
+ unsigned char *buffer3;
qboolean jpeg = (scr_screenshot_jpeg.integer != 0);
sprintf (base, "screenshots/%s", scr_screenshot_name.string);
sprintf(filename, "%s%06d.%s", base, shotnumber, jpeg ? "jpg" : "tga");
- buffer1 = Mem_Alloc(tempmempool, vid.width * vid.height * 3);
- buffer2 = Mem_Alloc(tempmempool, vid.width * vid.height * 3);
- buffer3 = Mem_Alloc(tempmempool, vid.width * vid.height * 3 + 18);
+ buffer1 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3);
+ buffer2 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3);
+ buffer3 = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * 3 + 18);
if (SCR_ScreenShot (filename, buffer1, buffer2, buffer3, 0, 0, vid.width, vid.height, false, false, false, jpeg, true))
Con_Printf("Wrote %s\n", filename);
double cl_capturevideo_framerate = 0;
static int cl_capturevideo_soundrate = 0;
static int cl_capturevideo_frame = 0;
-static qbyte *cl_capturevideo_buffer = NULL;
+static unsigned char *cl_capturevideo_buffer = NULL;
static qfile_t *cl_capturevideo_videofile = NULL;
qfile_t *cl_capturevideo_soundfile = NULL;
static short cl_capturevideo_rgbtoyuvscaletable[3][3][256];
{
double gamma, g;
unsigned int i;
- qbyte out[44];
+ unsigned char out[44];
if (cl_capturevideo_active)
return;
// soundrate is figured out on the first SoundFrame
cl_capturevideo_framerate = bound(1, cl_capturevideo_fps.value, 1000);
cl_capturevideo_soundrate = 0;
cl_capturevideo_frame = 0;
- cl_capturevideo_buffer = Mem_Alloc(tempmempool, vid.width * vid.height * (3+3+3) + 18);
+ cl_capturevideo_buffer = (unsigned char *)Mem_Alloc(tempmempool, vid.width * vid.height * (3+3+3) + 18);
gamma = 1.0/scr_screenshot_gamma.value;
/*
void SCR_CaptureVideo_EndVideo(void)
{
int i, n;
- qbyte out[44];
+ unsigned char out[44];
if (!cl_capturevideo_active)
return;
cl_capturevideo_active = false;
// finish the wave file
if (cl_capturevideo_soundfile)
{
- i = FS_Tell (cl_capturevideo_soundfile);
+ i = (int)FS_Tell (cl_capturevideo_soundfile);
//"RIFF", (int) unknown (chunk size), "WAVE",
//"fmt ", (int) 16 (chunk size), (short) format 1 (uncompressed PCM), (short) 2 channels, (int) unknown rate, (int) unknown bytes per second, (short) 4 bytes per sample (channels * bytes per channel), (short) 16 bits per channel
//"data", (int) unknown (chunk size)
}
}
-void SCR_CaptureVideo_SoundFrame(qbyte *bufstereo16le, size_t length, int rate)
+void SCR_CaptureVideo_SoundFrame(unsigned char *bufstereo16le, size_t length, int rate)
{
if (!cl_capturevideo_soundfile)
return;
cl_capturevideo_soundrate = rate;
- if (FS_Write (cl_capturevideo_soundfile, bufstereo16le, 4 * length) < 4 * length)
+ if (FS_Write (cl_capturevideo_soundfile, bufstereo16le, 4 * length) < (fs_offset_t)(4 * length))
{
Cvar_SetValueQuick(&cl_capturevideo, 0);
Con_Printf("video sound saving failed on frame %i, out of disk space? stopping video capture.\n", cl_capturevideo_frame);
Grab six views for environment mapping tests
===============
*/
-struct
+struct envmapinfo_s
{
float angles[3];
char *name;
static void R_Envmap_f (void)
{
int j, size;
- char filename[256], basename[256];
- qbyte *buffer1;
- qbyte *buffer2;
- qbyte *buffer3;
+ char filename[MAX_QPATH], basename[MAX_QPATH];
+ unsigned char *buffer1;
+ unsigned char *buffer2;
+ unsigned char *buffer3;
if (Cmd_Argc() != 3)
{
r_refdef.width = size;
r_refdef.height = size;
- r_refdef.fov_x = 90;
- r_refdef.fov_y = 90;
+ r_refdef.frustum_x = tan(90 * M_PI / 360.0);
+ r_refdef.frustum_y = tan(90 * M_PI / 360.0);
- buffer1 = Mem_Alloc(tempmempool, size * size * 3);
- buffer2 = Mem_Alloc(tempmempool, size * size * 3);
- buffer3 = Mem_Alloc(tempmempool, size * size * 3 + 18);
+ buffer1 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3);
+ buffer2 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3);
+ buffer3 = (unsigned char *)Mem_Alloc(tempmempool, size * size * 3 + 18);
for (j = 0;j < 12;j++)
{
void SHOWLMP_decodehide(void)
{
int i;
- qbyte *lmplabel;
+ char *lmplabel;
lmplabel = MSG_ReadString();
for (i = 0;i < SHOWLMP_MAXLABELS;i++)
if (showlmp[i].isactive && strcmp(showlmp[i].label, lmplabel) == 0)
void SHOWLMP_decodeshow(void)
{
int i, k;
- qbyte lmplabel[256], picname[256];
+ char lmplabel[256], picname[256];
float x, y;
strlcpy (lmplabel,MSG_ReadString(), sizeof (lmplabel));
strlcpy (picname, MSG_ReadString(), sizeof (picname));
}
R_Shadow_EditLights_DrawSelectedLightProperties();
- SCR_DrawConsole();
+ if(!csqc_loaded)
+ SCR_DrawConsole();
+
+ SCR_DrawBrand();
SCR_UpdateScreen();
}