本文整理汇总了C++中R_RenderView函数的典型用法代码示例。如果您正苦于以下问题:C++ R_RenderView函数的具体用法?C++ R_RenderView怎么用?C++ R_RenderView使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了R_RenderView函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: from
/*
==================
V_RenderView
The player's clipping box goes from (-16 -16 -24) to (16 16 32) from
the entity origin, so any view position inside that will be valid
==================
*/
void V_RenderView (void)
{
if (con_forcedup)
return;
// don't allow cheats in multiplayer
if (cl.maxclients > 1)
{
Cvar_Set ("scr_ofsx", "0");
Cvar_Set ("scr_ofsy", "0");
Cvar_Set ("scr_ofsz", "0");
}
if (cl.intermission)
{ // intermission / finale rendering
V_CalcIntermissionRefdef ();
}
else
{
if (!cl.paused /* && (sv.maxclients > 1 || key_dest == key_game) */ )
V_CalcRefdef ();
}
R_PushDlights ();
if (lcd_x.value)
{
//
// render two interleaved views
//
int i;
vid.rowbytes <<= 1;
vid.aspect *= 0.5f;
r_refdef.viewangles[YAW] -= lcd_yaw.value;
for (i=0 ; i<3 ; i++)
r_refdef.vieworg[i] -= right[i]*lcd_x.value;
R_RenderView ();
vid.buffer += vid.rowbytes>>1;
R_PushDlights ();
r_refdef.viewangles[YAW] += lcd_yaw.value*2;
for (i=0 ; i<3 ; i++)
r_refdef.vieworg[i] += 2*right[i]*lcd_x.value;
R_RenderView ();
vid.buffer -= vid.rowbytes>>1;
r_refdef.vrect.height <<= 1;
vid.rowbytes >>= 1;
vid.aspect *= 2;
}
开发者ID:BackupGGCode,项目名称:quake-gamecube,代码行数:64,代码来源:view.c
示例2: R_XrayRender
/*
=================
R_XrayRender
=================
*/
void R_XrayRender( drawSurf_t *surf, textureStage_t *stage, idScreenRect scissor ) {
viewDef_t *parms;
// remote views can be reused in a single frame
if( stage->dynamicFrameCount == tr.frameCount ) {
return;
}
// issue a new view command
parms = R_XrayViewBySurface( surf );
if( !parms ) {
return;
}
tr.CropRenderSize( stage->width, stage->height, true );
parms->renderView.x = 0;
parms->renderView.y = 0;
parms->renderView.width = SCREEN_WIDTH;
parms->renderView.height = SCREEN_HEIGHT;
tr.RenderViewToViewport( &parms->renderView, &parms->viewport );
parms->scissor.x1 = 0;
parms->scissor.y1 = 0;
parms->scissor.x2 = parms->viewport.x2 - parms->viewport.x1;
parms->scissor.y2 = parms->viewport.y2 - parms->viewport.y1;
parms->superView = tr.viewDef;
parms->subviewSurface = surf;
// triangle culling order changes with mirroring
parms->isMirror = ( ( ( int )parms->isMirror ^ ( int )tr.viewDef->isMirror ) != 0 );
// generate render commands for it
R_RenderView( parms );
// copy this rendering to the image
stage->dynamicFrameCount = tr.frameCount;
stage->image = globalImages->scratchImage2;
tr.CaptureRenderToImage( stage->image->imgName );
tr.UnCrop();
}
开发者ID:revelator,项目名称:Revelation,代码行数:38,代码来源:tr_subview.cpp
示例3: R_TimeRefresh_f
/*
====================
R_TimeRefresh_f
For program optimization
====================
*/
void R_TimeRefresh_f (void)
{
int i;
float start, stop, time;
int startangle;
vrect_t vr;
startangle = r_refdef.viewangles[1];
start = Sys_FloatTime ();
for (i=0 ; i<128 ; i++)
{
r_refdef.viewangles[1] = i/128.0*360.0;
VID_LockBuffer ();
R_RenderView ();
VID_UnlockBuffer ();
vr.x = r_refdef.vrect.x;
vr.y = r_refdef.vrect.y;
vr.width = r_refdef.vrect.width;
vr.height = r_refdef.vrect.height;
vr.pnext = NULL;
VID_Update (&vr);
}
stop = Sys_FloatTime ();
time = stop-start;
Con_Printf ("%f seconds (%f fps)\n", time, 128/time);
r_refdef.viewangles[1] = startangle;
}
开发者ID:ACSOP,项目名称:android_external_quake,代码行数:40,代码来源:r_misc.cpp
示例4: from
/*
==================
V_RenderView
The player's clipping box goes from (-16 -16 -24) to (16 16 32) from
the entity origin, so any view position inside that will be valid
==================
*/
void
V_RenderView(void)
{
if (con_forcedup)
return;
// don't allow cheats in multiplayer
if (cl.maxclients > 1) {
Cvar_Set("scr_ofsx", "0");
Cvar_Set("scr_ofsy", "0");
Cvar_Set("scr_ofsz", "0");
}
if (cl.intermission) { // intermission / finale rendering
V_CalcIntermissionRefdef();
} else {
if (!cl.paused /* && (sv.maxclients > 1 || key_dest == key_game) */ )
V_CalcRefdef();
}
R_PushDlights();
R_RenderView();
#ifndef GLQUAKE
if (crosshair.value)
Draw_Crosshair();
#endif
}
开发者ID:CatalystG,项目名称:tyrquake,代码行数:37,代码来源:view.c
示例5: R_RemoteRender
/*
===============
R_RemoteRender
===============
*/
static void R_RemoteRender( drawSurf_t *surf, textureStage_t *stage ) {
viewDef_t *parms;
// remote views can be reused in a single frame
if ( stage->dynamicFrameCount == tr.frameCount ) {
return;
}
// if the entity doesn't have a remoteRenderView, do nothing
if ( !surf->space->entityDef->parms.remoteRenderView ) {
return;
}
// copy the viewport size from the original
parms = (viewDef_t *)R_FrameAlloc( sizeof( *parms ) );
*parms = *tr.viewDef;
parms->isSubview = true;
parms->isMirror = false;
parms->renderView = *surf->space->entityDef->parms.remoteRenderView;
parms->renderView.viewID = 0; // clear to allow player bodies to show up, and suppress view weapons
parms->initialViewAreaOrigin = parms->renderView.vieworg;
tr.CropRenderSize( stage->width, stage->height, true );
parms->renderView.x = 0;
parms->renderView.y = 0;
parms->renderView.width = SCREEN_WIDTH;
parms->renderView.height = SCREEN_HEIGHT;
tr.RenderViewToViewport( &parms->renderView, &parms->viewport );
parms->scissor.x1 = 0;
parms->scissor.y1 = 0;
parms->scissor.x2 = parms->viewport.x2 - parms->viewport.x1;
parms->scissor.y2 = parms->viewport.y2 - parms->viewport.y1;
parms->superView = tr.viewDef;
parms->subviewSurface = surf;
// generate render commands for it
R_RenderView(parms);
// copy this rendering to the image
stage->dynamicFrameCount = tr.frameCount;
if (!stage->image) {
stage->image = globalImages->scratchImage;
}
tr.CaptureRenderToImage( stage->image->imgName );
tr.UnCrop();
}
开发者ID:Justasic,项目名称:DOOM-3,代码行数:58,代码来源:tr_subview.cpp
示例6: R_Envmap_f
/* Grab six views for environment mapping tests
*/
void R_Envmap_f(void)
{
uint8_t buffer[256*256*4];
glDrawBuffer(GL_FRONT);
glReadBuffer(GL_FRONT);
r_refdef.bEnvironmentMap = true;
r_refdef.vrect.x =
r_refdef.vrect.y = 0;
r_refdef.vrect.width =
r_refdef.vrect.height = 256;
Math_VectorClear(r_refdef.viewangles);
GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
R_RenderView ();
glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
FileSystem_WriteFile ("env0.rgb", buffer, sizeof(buffer));
r_refdef.viewangles[1] = 90;
GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
R_RenderView ();
glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
FileSystem_WriteFile ("env1.rgb", buffer, sizeof(buffer));
r_refdef.viewangles[1] = 180;
GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
R_RenderView ();
glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
FileSystem_WriteFile ("env2.rgb", buffer, sizeof(buffer));
r_refdef.viewangles[1] = 270;
GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
R_RenderView ();
glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
FileSystem_WriteFile ("env3.rgb", buffer, sizeof(buffer));
r_refdef.viewangles[0] = -90.0f;
r_refdef.viewangles[1] = 0;
GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
R_RenderView ();
glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
FileSystem_WriteFile("env4.rgb", buffer, sizeof(buffer));
r_refdef.viewangles[0] = 90;
r_refdef.viewangles[1] = 0;
GL_BeginRendering (&glx, &gly, &glwidth, &glheight);
R_RenderView ();
glReadPixels (0, 0, 256, 256, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
FileSystem_WriteFile("env5.rgb",buffer,sizeof(buffer));
r_refdef.bEnvironmentMap = false;
glDrawBuffer(GL_BACK);
glReadBuffer(GL_BACK);
GL_EndRendering();
}
开发者ID:ExperimentationBox,项目名称:Edenite,代码行数:62,代码来源:EngineVideoLegacy2.c
示例7: R_MirrorViewBySurface
qboolean R_MirrorViewBySurface (drawSurf_t *drawSurf, int entityNum) {
vec4_t clipDest[128];
viewParms_t newParms;
viewParms_t oldParms;
orientation_t surface, camera;
// don't recursively mirror
if (tr.viewParms.isPortal)
{
ri.Printf( PRINT_DEVELOPER, "WARNING: recursive mirror/portal found\n" );
return qfalse;
}
if ( r_noportals->integer || r_fastsky->integer ) {
return qfalse;
}
// trivially reject portal/mirror
if ( SurfIsOffscreen( drawSurf, clipDest ) ) {
return qfalse;
}
// save old viewParms so we can return to it after the mirror view
oldParms = tr.viewParms;
newParms = tr.viewParms;
newParms.isPortal = qtrue;
if ( !R_GetPortalOrientations( drawSurf, entityNum, &surface, &camera,
newParms.pvsOrigin, &newParms.isMirror ) ) {
return qfalse; // bad portal, no portalentity
}
R_MirrorPoint (oldParms.or.origin, &surface, &camera, newParms.or.origin );
VectorSubtract( vec3_origin, camera.axis[0], newParms.portalPlane.normal );
newParms.portalPlane.dist = DotProduct( camera.origin, newParms.portalPlane.normal );
R_MirrorVector (oldParms.or.axis[0], &surface, &camera, newParms.or.axis[0]);
R_MirrorVector (oldParms.or.axis[1], &surface, &camera, newParms.or.axis[1]);
R_MirrorVector (oldParms.or.axis[2], &surface, &camera, newParms.or.axis[2]);
// OPTIMIZE: restrict the viewport on the mirrored view
// render the mirror view
R_RenderView (&newParms);
tr.viewParms = oldParms;
return qtrue;
}
开发者ID:Agustinlv,项目名称:BlueHarvest,代码行数:50,代码来源:tr_main.cpp
示例8: V_RenderView
void V_RenderView (void)
{
if (con_forcedup)
return;
if (cl.intermission)
V_CalcIntermissionRefdef ();
else if (!cl.paused /* && (cl.maxclients > 1 || key_dest == key_game) */)
V_CalcRefdef ();
//johnfitz -- removed lcd code
R_RenderView ();
V_PolyBlend (); //johnfitz -- moved here from R_Renderview ();
}
开发者ID:ericwa,项目名称:Quakespasm,代码行数:16,代码来源:view.c
示例9: V_RenderView
void V_RenderView (void) {
char *p;
cl.simangles[ROLL] = 0; // FIXME @@@
if (cls.state != ca_active) {
V_CalcBlend ();
return;
}
view_frame = &cl.frames[cl.validsequence & UPDATE_MASK];
if (!cls.nqdemoplayback)
view_message = view_frame->playerstate[cl.viewplayernum];
DropPunchAngle ();
if (cl.intermission) // intermission / finale rendering
V_CalcIntermissionRefdef ();
else
V_CalcRefdef ();
R_PushDlights ();
r_refdef2.time = cl.time;
// restrictions
r_refdef2.allow_cheats = (Info_ValueForKey(cl.serverinfo, "*cheats")[0] && com_serveractive)
|| cls.demoplayback;
if (cls.demoplayback || cl.spectator)
{
r_refdef2.allow_lumas = true;
r_refdef2.max_fbskins = 1;
r_refdef2.max_watervis = 1;
}
else
{
r_refdef2.allow_lumas = !strcmp(Info_ValueForKey(cl.serverinfo, "24bit_fbs"), "0") ? false : true;
r_refdef2.max_fbskins = *(p = Info_ValueForKey(cl.serverinfo, "fbskins")) ? bound(0, Q_atof(p), 1) :
cl.teamfortress ? 0 : 1;
r_refdef2.max_watervis = *(p = Info_ValueForKey(cl.serverinfo, "watervis")) ? bound(0, Q_atof(p), 1) : 0;
}
// r_refdef2.viewplayernum = Cam_PlayerNum();
// r_refdef2.lightstyles = cl_lightstyle;
R_RenderView ();
}
开发者ID:JosephPecoraro,项目名称:ezquake-source,代码行数:46,代码来源:cl_view.c
示例10: R_XrayRender
/*
=================
R_XrayRender
=================
*/
void R_XrayRender( const drawSurf_t* surf, textureStage_t* stage, idScreenRect scissor )
{
// remote views can be reused in a single frame
if( stage->dynamicFrameCount == tr.frameCount )
{
return;
}
// issue a new view command
viewDef_t* parms = R_XrayViewBySurface( surf );
if( parms == NULL )
{
return;
}
int stageWidth = stage->width;
int stageHeight = stage->height;
tr.CropRenderSize( stageWidth, stageHeight );
tr.GetCroppedViewport( &parms->viewport );
parms->scissor.x1 = 0;
parms->scissor.y1 = 0;
parms->scissor.x2 = parms->viewport.x2 - parms->viewport.x1;
parms->scissor.y2 = parms->viewport.y2 - parms->viewport.y1;
parms->superView = tr.viewDef;
parms->subviewSurface = surf;
// triangle culling order changes with mirroring
parms->isMirror = ( ( ( int )parms->isMirror ^ ( int )tr.viewDef->isMirror ) != 0 );
// generate render commands for it
R_RenderView( parms );
// copy this rendering to the image
stage->dynamicFrameCount = tr.frameCount;
stage->image = globalImages->scratchImage2;
tr.CaptureRenderToImage( stage->image->GetName(), true );
tr.UnCrop();
}
开发者ID:BielBdeLuna,项目名称:StormEngine2,代码行数:48,代码来源:tr_frontend_subview.cpp
示例11: R_TimeRefresh_f
/* For program optimization
*/
void R_TimeRefresh_f (void)
{
int i;
float start, stop, time;
glDrawBuffer (GL_FRONT);
glFinish ();
start = System_DoubleTime ();
for (i=0 ; i<128 ; i++)
{
r_refdef.viewangles[1] = i/128.0f*360.0f;
R_RenderView ();
}
glFinish ();
stop = System_DoubleTime ();
time = stop-start;
Con_Printf("%f seconds (%f fps)\n",time,128/time);
glDrawBuffer (GL_BACK);
GL_EndRendering ();
}
开发者ID:ExperimentationBox,项目名称:Edenite,代码行数:25,代码来源:EngineVideoLegacy2.c
示例12: R_TimeRefresh_f
/*
====================
R_TimeRefresh_f
For program optimization
====================
*/
void R_TimeRefresh_f (void)
{
int i;
double start, stop, time;
int startangle;
vrect_t vr;
#ifdef PSP_SOFTWARE_VIDEO
startangle = r_refdef.viewangles[1];
start = Sys_FloatTime ();
for (i=0 ; i<128 ; i++)
{
r_refdef.viewangles[1] = i/128.0*360.0;
VID_LockBuffer ();
R_RenderView ();
VID_UnlockBuffer ();
vr.x = r_refdef.vrect.x;
vr.y = r_refdef.vrect.y;
vr.width = r_refdef.vrect.width;
vr.height = r_refdef.vrect.height;
vr.pnext = NULL;
VID_Update (&vr);
}
stop = Sys_FloatTime ();
time = stop-start;
Con_Printf ("%f seconds (%f fps)\n", time, 128/time);
r_refdef.viewangles[1] = startangle;
#else
Con_Printf ("Sorry: 'timerefresh' command disabled\n");
#endif
}
开发者ID:darkduke606,项目名称:DQuakePlus,代码行数:44,代码来源:r_misc.c
示例13: R_DrawPortalSurface
//.........这里部分代码省略.........
Matrix3_Multiply( rn.viewAxis, B, rot );
Matrix3_Multiply( best->axis, rot, B );
Matrix3_Transpose( C, A );
Matrix3_Multiply( B, A, axis );
// set up portal_plane
VectorCopy( &axis[AXIS_FORWARD], portal_plane->normal );
portal_plane->dist = DotProduct( best->origin2, portal_plane->normal );
CategorizePlane( portal_plane );
// for portals, vis data is taken from portal origin, not
// view origin, because the view point moves around and
// might fly into (or behind) a wall
VectorCopy( best->origin2, rn.pvsOrigin );
VectorCopy( best->origin2, rn.lodOrigin );
rn.renderFlags |= RF_PORTALVIEW;
// ignore entities, if asked politely
if( best->renderfx & RF_NOPORTALENTS ) {
rn.renderFlags |= RF_ENVVIEW;
}
if( prevFlipped ) {
rn.renderFlags |= RF_FLIPFRONTFACE;
}
}
rn.refdef.rdflags &= ~( RDF_UNDERWATER | RDF_CROSSINGWATER | RDF_FLIPPED );
rn.meshlist = &r_portallist;
rn.portalmasklist = NULL;
rn.renderFlags |= RF_CLIPPLANE;
rn.renderFlags &= ~RF_SOFT_PARTICLES;
rn.clipPlane = *portal_plane;
rn.nearClip = Z_NEAR;
rn.farClip = R_DefaultFarClip();
rn.polygonFactor = POLYOFFSET_FACTOR;
rn.polygonUnits = POLYOFFSET_UNITS;
rn.clipFlags |= 16;
rn.frustum[4] = *portal_plane; // nearclip
CategorizePlane( &rn.frustum[4] );
// if we want to render to a texture, initialize texture
// but do not try to render to it more than once
if( captureTextureId >= 0 ) {
int texFlags = shader->flags & SHADER_NO_TEX_FILTERING ? IT_NOFILTERING : 0;
captureTexture = R_GetPortalTexture( rsc.refdef.width, rsc.refdef.height, texFlags,
rsc.frameCount );
portalTexures[captureTextureId] = captureTexture;
if( !captureTexture ) {
// couldn't register a slot for this plane
goto done;
}
x = y = 0;
w = captureTexture->upload_width;
h = captureTexture->upload_height;
rn.refdef.width = w;
rn.refdef.height = h;
rn.refdef.x = 0;
rn.refdef.y = 0;
rn.renderTarget = captureTexture->fbo;
rn.renderFlags |= RF_PORTAL_CAPTURE;
Vector4Set( rn.viewport, rn.refdef.x + x, rn.refdef.y + y, w, h );
Vector4Set( rn.scissor, rn.refdef.x + x, rn.refdef.y + y, w, h );
} else {
rn.renderFlags &= ~RF_PORTAL_CAPTURE;
}
VectorCopy( origin, rn.refdef.vieworg );
Matrix3_Copy( axis, rn.refdef.viewaxis );
R_SetupViewMatrices( &rn.refdef );
R_SetupFrustum( &rn.refdef, rn.nearClip, rn.farClip, rn.frustum, rn.frustumCorners );
R_SetupPVS( &rn.refdef );
R_RenderView( &rn.refdef );
if( doRefraction && !refraction && ( shader->flags & SHADER_PORTAL_CAPTURE2 ) ) {
rn.renderFlags = prevRenderFlags;
refraction = true;
captureTexture = NULL;
captureTextureId = 1;
goto setup_and_render;
}
done:
portalSurface->texures[0] = portalTexures[0];
portalSurface->texures[1] = portalTexures[1];
R_PopRefInst();
}
开发者ID:Picmip,项目名称:qfusion,代码行数:101,代码来源:r_portals.c
示例14: R_DrawSkyportal
/*
* R_DrawSkyportal
*/
static void R_DrawSkyportal( const entity_t *e, skyportal_t *skyportal ) {
if( !R_PushRefInst() ) {
return;
}
rn.renderFlags = ( rn.renderFlags | RF_PORTALVIEW );
//rn.renderFlags &= ~RF_SOFT_PARTICLES;
VectorCopy( skyportal->vieworg, rn.pvsOrigin );
rn.nearClip = Z_NEAR;
rn.farClip = R_DefaultFarClip();
rn.polygonFactor = POLYOFFSET_FACTOR;
rn.polygonUnits = POLYOFFSET_UNITS;
rn.clipFlags = 15;
rn.meshlist = &r_skyportallist;
rn.portalmasklist = NULL;
rn.rtLight = NULL;
//Vector4Set( rn.scissor, rn.refdef.x + x, rn.refdef.y + y, w, h );
if( skyportal->noEnts ) {
rn.renderFlags |= RF_ENVVIEW;
}
if( skyportal->scale ) {
vec3_t centre, diff;
VectorAdd( rsh.worldModel->mins, rsh.worldModel->maxs, centre );
VectorScale( centre, 0.5f, centre );
VectorSubtract( centre, rn.viewOrigin, diff );
VectorMA( skyportal->vieworg, -skyportal->scale, diff, rn.refdef.vieworg );
} else {
VectorCopy( skyportal->vieworg, rn.refdef.vieworg );
}
// FIXME
if( !VectorCompare( skyportal->viewanglesOffset, vec3_origin ) ) {
vec3_t angles;
mat3_t axis;
Matrix3_Copy( rn.refdef.viewaxis, axis );
VectorInverse( &axis[AXIS_RIGHT] );
Matrix3_ToAngles( axis, angles );
VectorAdd( angles, skyportal->viewanglesOffset, angles );
AnglesToAxis( angles, axis );
Matrix3_Copy( axis, rn.refdef.viewaxis );
}
rn.refdef.rdflags &= ~( RDF_UNDERWATER | RDF_CROSSINGWATER | RDF_SKYPORTALINVIEW );
if( skyportal->fov ) {
rn.refdef.fov_y = WidescreenFov( skyportal->fov );
rn.refdef.fov_x = CalcHorizontalFov( rn.refdef.fov_y, rn.refdef.width, rn.refdef.height );
}
R_SetupViewMatrices( &rn.refdef );
R_SetupFrustum( &rn.refdef, rn.nearClip, rn.farClip, rn.frustum, rn.frustumCorners );
R_SetupPVS( &rn.refdef );
R_RenderView( &rn.refdef );
// restore modelview and projection matrices, scissoring, etc for the main view
R_PopRefInst();
}
开发者ID:Picmip,项目名称:qfusion,代码行数:69,代码来源:r_portals.c
示例15: RE_RenderScene
//.........这里部分代码省略.........
tr.refdef.numInteractions = r_firstSceneInteraction;
tr.refdef.interactions = backEndData[ tr.smpFrame ]->interactions;
tr.refdef.numEntities = r_numEntities - r_firstSceneEntity;
tr.refdef.entities = &backEndData[ tr.smpFrame ]->entities[ r_firstSceneEntity ];
tr.refdef.numLights = r_numLights - r_firstSceneLight;
tr.refdef.lights = &backEndData[ tr.smpFrame ]->lights[ r_firstSceneLight ];
tr.refdef.numPolys = r_numPolys - r_firstScenePoly;
tr.refdef.polys = &backEndData[ tr.smpFrame ]->polys[ r_firstScenePoly ];
tr.refdef.numPolybuffers = r_numPolybuffers - r_firstScenePolybuffer;
tr.refdef.polybuffers = &backEndData[ tr.smpFrame ]->polybuffers[ r_firstScenePolybuffer ];
tr.refdef.numDecalProjectors = r_numDecalProjectors - r_firstSceneDecalProjector;
tr.refdef.decalProjectors = &backEndData[ tr.smpFrame ]->decalProjectors[ r_firstSceneDecalProjector ];
tr.refdef.numDecals = r_numDecals - r_firstSceneDecal;
tr.refdef.decals = &backEndData[ tr.smpFrame ]->decals[ r_firstSceneDecal ];
tr.refdef.numVisTests = r_numVisTests - r_firstSceneVisTest;
tr.refdef.visTests = &backEndData[ tr.smpFrame ]->visTests[ r_firstSceneVisTest ];
// a single frame may have multiple scenes draw inside it --
// a 3D game view, 3D status bar renderings, 3D menus, etc.
// They need to be distinguished by the light flare code, because
// the visibility state for a given surface may be different in
// each scene / view.
tr.frameSceneNum++;
tr.sceneCount++;
// Tr3B: a scene can have multiple views caused by mirrors or portals
// the number of views is restricted so we can use hardware occlusion queries
// and put them into the BSP nodes for each view
tr.viewCount = -1;
// setup view parms for the initial view
//
// set up viewport
// The refdef takes 0-at-the-top y coordinates, so
// convert to GL's 0-at-the-bottom space
//
Com_Memset( &parms, 0, sizeof( parms ) );
if ( tr.refdef.pixelTarget == nullptr )
{
parms.viewportX = tr.refdef.x;
parms.viewportY = glConfig.vidHeight - ( tr.refdef.y + tr.refdef.height );
}
else
{
//Driver bug, if we try and do pixel target work along the top edge of a window
//we can end up capturing part of the status bar. (see screenshot corruption..)
//Soooo.. use the middle.
parms.viewportX = glConfig.vidWidth / 2;
parms.viewportY = glConfig.vidHeight / 2;
}
parms.viewportWidth = tr.refdef.width;
parms.viewportHeight = tr.refdef.height;
parms.scissorX = parms.viewportX;
parms.scissorY = parms.viewportY;
parms.scissorWidth = parms.viewportWidth;
parms.scissorHeight = parms.viewportHeight;
Vector4Set( parms.viewportVerts[ 0 ], parms.viewportX, parms.viewportY, 0, 1 );
Vector4Set( parms.viewportVerts[ 1 ], parms.viewportX + parms.viewportWidth, parms.viewportY, 0, 1 );
Vector4Set( parms.viewportVerts[ 2 ], parms.viewportX + parms.viewportWidth, parms.viewportY + parms.viewportHeight, 0, 1 );
Vector4Set( parms.viewportVerts[ 3 ], parms.viewportX, parms.viewportY + parms.viewportHeight, 0, 1 );
parms.isPortal = false;
parms.fovX = tr.refdef.fov_x;
parms.fovY = tr.refdef.fov_y;
VectorCopy( fd->vieworg, parms.orientation.origin );
VectorCopy( fd->viewaxis[ 0 ], parms.orientation.axis[ 0 ] );
VectorCopy( fd->viewaxis[ 1 ], parms.orientation.axis[ 1 ] );
VectorCopy( fd->viewaxis[ 2 ], parms.orientation.axis[ 2 ] );
VectorCopy( fd->vieworg, parms.pvsOrigin );
Vector4Copy( fd->gradingWeights, parms.gradingWeights );
R_RenderView( &parms );
R_RenderPostProcess();
// the next scene rendered in this frame will tack on after this one
r_firstSceneDrawSurf = tr.refdef.numDrawSurfs;
r_firstSceneInteraction = tr.refdef.numInteractions;
r_firstSceneEntity = r_numEntities;
r_firstSceneLight = r_numLights;
r_firstScenePoly = r_numPolys;
r_firstScenePolybuffer = r_numPolybuffers;
r_firstSceneVisTest = r_numVisTests;
tr.frontEndMsec += ri.Milliseconds() - startTime;
}
开发者ID:HaoDrang,项目名称:Unvanquished,代码行数:101,代码来源:tr_scene.cpp
示例16: R_EnvShot_f
/*
* R_EnvShot_f
*/
void R_EnvShot_f( void )
{
int i;
int size, maxSize;
const char *writedir, *gamedir;
int checkname_size;
char *checkname;
refdef_t fd;
struct cubemapSufAndFlip
{
char *suf; vec3_t angles; int flags;
} cubemapShots[6] = {
{ "px", { 0, 0, 0 }, IT_FLIPX|IT_FLIPY|IT_FLIPDIAGONAL },
{ "nx", { 0, 180, 0 }, IT_FLIPDIAGONAL },
{ "py", { 0, 90, 0 }, IT_FLIPY },
{ "ny", { 0, 270, 0 }, IT_FLIPX },
{ "pz", { -90, 180, 0 }, IT_FLIPDIAGONAL },
{ "nz", { 90, 180, 0 }, IT_FLIPDIAGONAL }
};
if( !R_ScreenEnabled() || !rsh.worldModel )
return;
if( ri.Cmd_Argc() != 3 )
{
Com_Printf( "usage: envshot <name> <size>\n" );
return;
}
maxSize = min( min( glConfig.width, glConfig.height ), glConfig.maxTextureSize );
if( maxSize > atoi( ri.Cmd_Argv( 2 ) ) )
maxSize = atoi( ri.Cmd_Argv( 2 ) );
for( size = 1; size < maxSize; size <<= 1 ) ;
if( size > maxSize )
size >>= 1;
writedir = ri.FS_WriteDirectory();
gamedir = ri.FS_GameDirectory();
checkname_size = strlen( writedir ) + 1 + strlen( gamedir ) + strlen( "/env/" ) +
strlen( ri.Cmd_Argv( 1 ) ) + 1 + strlen( cubemapShots[0].suf ) + 4 + 1;
checkname = alloca( checkname_size );
fd = rsc.refdef;
fd.time = 0;
//fd.x = fd.y = 0;
fd.width = fd.height = size;
fd.fov_x = fd.fov_y = 90;
rn.farClip = R_DefaultFarClip();
// do not render non-bmodel entities
rn.renderFlags |= RF_CUBEMAPVIEW;
rn.clipFlags = 15;
rn.shadowGroup = NULL;
rn.fbColorAttachment = rn.fbDepthAttachment = NULL;
Vector4Set( rn.viewport, fd.x, glConfig.height - size - fd.y, size, size );
Vector4Set( rn.scissor, fd.x, glConfig.height - size - fd.y, size, size );
for( i = 0; i < 6; i++ )
{
AnglesToAxis( cubemapShots[i].angles, fd.viewaxis );
R_RenderView( &fd );
Q_snprintfz( checkname, checkname_size, "%s/%s/env/%s_%s", writedir, gamedir, ri.Cmd_Argv( 1 ), cubemapShots[i].suf );
COM_DefaultExtension( checkname, ".tga", checkname_size );
R_ScreenShot( checkname, 0, 0, size, size, 100,
( cubemapShots[i].flags & IT_FLIPX ) ? true : false,
( cubemapShots[i].flags & IT_FLIPY ) ? true : false,
( cubemapShots[i].flags & IT_FLIPDIAGONAL ) ? true : false,
false );
}
// render non-bmodel entities again
rn.renderFlags &= ~RF_CUBEMAPVIEW;
}
开发者ID:MGXRace,项目名称:racesow,代码行数:82,代码来源:r_cmds.c
示例17: RE_RenderScene
//.........这里部分代码省略.........
ri.Error (ERR_DROP, "R_RenderScene: NULL worldmodel");
}
RE_BeginScene(fd);
// SmileTheory: playing with shadow mapping
if (!( fd->rdflags & RDF_NOWORLDMODEL ) && tr.refdef.num_dlights && r_dlightMode->integer >= 2)
{
R_RenderDlightCubemaps(fd);
}
/* playing with more shadows */
if(glRefConfig.framebufferObject && !( fd->rdflags & RDF_NOWORLDMODEL ) && r_shadows->integer == 4)
{
R_RenderPshadowMaps(fd);
}
// playing with even more shadows
if(glRefConfig.framebufferObject && r_sunlightMode->integer && !( fd->rdflags & RDF_NOWORLDMODEL ) && (r_forceSun->integer || tr.sunShadows))
{
if (r_shadowCascadeZFar->integer != 0)
{
R_RenderSunShadowMaps(fd, 0);
R_RenderSunShadowMaps(fd, 1);
R_RenderSunShadowMaps(fd, 2);
}
else
{
Mat4Zero(tr.refdef.sunShadowMvp[0]);
Mat4Zero(tr.refdef.sunShadowMvp[1]);
Mat4Zero(tr.refdef.sunShadowMvp[2]);
}
// only rerender last cascade if sun has changed position
if (r_forceSun->integer == 2 || !VectorCompare(tr.refdef.sunDir, tr.lastCascadeSunDirection))
{
VectorCopy(tr.refdef.sunDir, tr.lastCascadeSunDirection);
R_RenderSunShadowMaps(fd, 3);
Mat4Copy(tr.refdef.sunShadowMvp[3], tr.lastCascadeSunMvp);
}
else
{
Mat4Copy(tr.lastCascadeSunMvp, tr.refdef.sunShadowMvp[3]);
}
}
// playing with cube maps
// this is where dynamic cubemaps would be rendered
if (0) //(glRefConfig.framebufferObject && !( fd->rdflags & RDF_NOWORLDMODEL ))
{
int i, j;
for (i = 0; i < tr.numCubemaps; i++)
{
for (j = 0; j < 6; j++)
{
R_RenderCubemapSide(i, j, qtrue);
}
}
}
// setup view parms for the initial view
//
// set up viewport
// The refdef takes 0-at-the-top y coordinates, so
// convert to GL's 0-at-the-bottom space
//
Com_Memset( &parms, 0, sizeof( parms ) );
parms.viewportX = tr.refdef.x;
parms.viewportY = glConfig.vidHeight - ( tr.refdef.y + tr.refdef.height );
parms.viewportWidth = tr.refdef.width;
parms.viewportHeight = tr.refdef.height;
parms.isPortal = qfalse;
parms.fovX = tr.refdef.fov_x;
parms.fovY = tr.refdef.fov_y;
parms.stereoFrame = tr.refdef.stereoFrame;
VectorCopy( fd->vieworg, parms.or.origin );
VectorCopy( fd->viewaxis[0], parms.or.axis[0] );
VectorCopy( fd->viewaxis[1], parms.or.axis[1] );
VectorCopy( fd->viewaxis[2], parms.or.axis[2] );
VectorCopy( fd->vieworg, parms.pvsOrigin );
if(!( fd->rdflags & RDF_NOWORLDMODEL ) && r_depthPrepass->value && ((r_forceSun->integer) || tr.sunShadows))
{
parms.flags = VPF_USESUNLIGHT;
}
R_RenderView( &parms );
if(!( fd->rdflags & RDF_NOWORLDMODEL ))
R_AddPostProcessCmd();
RE_EndScene();
tr.frontEndMsec += ri.RealMilliseconds() - startTime;
}
开发者ID:brugal,项目名称:wolfcamql,代码行数:101,代码来源:tr_scene.c
示例18: RE_RenderScene
//.........这里部分代码省略.........
tr.refdef.y = fd->y;
tr.refdef.width = fd->width;
tr.refdef.height = fd->height;
tr.refdef.fov_x = fd->fov_x;
tr.refdef.fov_y = fd->fov_y;
VectorCopy( fd->vieworg, tr.refdef.vieworg );
VectorCopy( fd->viewaxis[0], tr.refdef.viewaxis[0] );
VectorCopy( fd->viewaxis[1], tr.refdef.viewaxis[1] );
VectorCopy( fd->viewaxis[2], tr.refdef.viewaxis[2] );
tr.refdef.time = fd->time;
tr.refdef.rdflags = fd->rdflags;
// copy the areamask data over and note if it has changed, which
// will force a reset of the visible leafs even if the view hasn't moved
tr.refdef.areamaskModified = qfalse;
if ( ! (tr.refdef.rdflags & RDF_NOWORLDMODEL) ) {
int areaDiff;
int i;
// compare the area bits
areaDiff = 0;
for (i = 0 ; i < MAX_MAP_AREA_BYTES/4 ; i++) {
areaDiff |= ((int *)tr.refdef.areamask)[i] ^ ((int *)fd->areamask)[i];
((int *)tr.refdef.areamask)[i] = ((int *)fd->areamask)[i];
}
if ( areaDiff ) {
// a door just opened or something
tr.refdef.areamaskModified = qtrue;
}
}
// derived info
tr.refdef.floatTime = tr.refdef.time * 0.001f;
tr.refdef.numDrawSurfs = r_firstSceneDrawSurf;
tr.refdef.drawSurfs = backEndData[tr.smpFrame]->drawSurfs;
tr.refdef.num_entities = r_numentities - r_firstSceneEntity;
tr.refdef.entities = &backEndData[tr.smpFrame]->entities[r_firstSceneEntity];
tr.refdef.num_dlights = r_numdlights - r_firstSceneDlight;
tr.refdef.dlights = &backEndData[tr.smpFrame]->dlights[r_firstSceneDlight];
tr.refdef.numPolys = r_numpolys - r_firstScenePoly;
tr.refdef.polys = &backEndData[tr.smpFrame]->polys[r_firstScenePoly];
// turn off dynamic lighting globally by clearing all the
// dlights if it needs to be disabled or if vertex lighting is enabled
if ( r_dynamiclight->integer == 0 ||
r_vertexLight->integer == 1 ||
glConfig.hardwareType == GLHW_PERMEDIA2 ) {
tr.refdef.num_dlights = 0;
}
// a single frame may have multiple scenes draw inside it --
// a 3D game view, 3D status bar renderings, 3D menus, etc.
// They need to be distinguished by the light flare code, because
// the visibility state for a given surface may be different in
// each scene / view.
tr.frameSceneNum++;
tr.sceneCount++;
// setup view parms for the initial view
//
// set up viewport
// The refdef takes 0-at-the-top y coordinates, so
// convert to GL's 0-at-the-bottom space
//
Com_Memset( &parms, 0, sizeof( parms ) );
parms.viewportX = tr.refdef.x;
parms.viewportY = glConfig.vidHeight - ( tr.refdef.y + tr.refdef.height );
parms.viewportWidth = tr.refdef.width;
parms.viewportHeight = tr.refdef.height;
parms.isPortal = qfalse;
parms.fovX = tr.refdef.fov_x;
parms.fovY = tr.refdef.fov_y;
VectorCopy( fd->vieworg, parms.or.origin );
VectorCopy( fd->viewaxis[0], parms.or.axis[0] );
VectorCopy( fd->viewaxis[1], parms.or.axis[1] );
VectorCopy( fd->viewaxis[2], parms.or.axis[2] );
VectorCopy( fd->vieworg, parms.pvsOrigin );
R_RenderView( &parms );
// the next scene rendered in this frame will tack on after this one
r_firstSceneDrawSurf = tr.refdef.numDrawSurfs;
r_firstSceneEntity = r_numentities;
r_firstSceneDlight = r_numdlights;
r_firstScenePoly = r_numpolys;
tr.frontEndMsec += ri.Milliseconds() - startTime;
}
开发者ID:mtrencseni,项目名称:quake3,代码行数:101,代码来源:tr_scene.c
示例19: RE_RenderScene
//.........这里部分代码省略.........
tr.refdef.fogTcScale = R_FogTcScale( tr.refdef.fogType, tr.refdef.fogDepthForOpaque, tr.refdef.fogDensity );
// copy the areamask data over and note if it has changed, which
// will force a reset of the visible leafs even if the view hasn't moved
tr.refdef.areamaskModified = qfalse;
if ( ! (tr.refdef.rdflags & RDF_NOWORLDMODEL) ) {
int areaDiff;
int i;
// compare the area bits
areaDiff = 0;
for (i = 0 ; i < MAX_MAP_AREA_BYTES/4 ; i++) {
areaDiff |= ((int *)tr.refdef.areamask)[i] ^ ((int *)fd.areamask)[i];
((int *)tr.refdef.areamask)[i] = ((int *)fd.areamask)[i];
}
if ( areaDiff ) {
// a door just opened or something
tr.refdef.areamaskModified = qtrue;
}
}
// derived info
tr.refdef.floatTime = tr.refdef.time * 0.001f;
tr.refdef.numDrawSurfs = r_firstSceneDrawSurf;
tr.refdef.drawSurfs = backEndData->drawSurfs;
tr.refdef.numSkins = r_numskins;
tr.refdef.skins = backEndData->skins;
tr.refdef.num_entities = r_numentities - r_firstSceneEntity;
tr.refdef.entities = &backEndData->entities[r_firstSceneEntity];
tr.refdef.num_dlights = r_numdlights - r_firstSceneDlight;
tr.refdef.dlights = &backEndData->dlights[r_firstSceneDlight];
tr.refdef.dlightBits = 0;
tr.refdef.num_coronas = r_numcoronas - r_firstSceneCorona;
tr.refdef.coronas = &backEndData->coronas[r_firstSceneCorona];
tr.refdef.numPolys = r_numpolys - r_firstScenePoly;
tr.refdef.polys = &backEndData->polys[r_firstScenePoly];
tr.refdef.numPolyBuffers = r_numpolybuffers - r_firstScenePolybuffer;
tr.refdef.polybuffers = &backEndData->polybuffers[r_firstScenePolybuffer];
// turn off dynamic lighting globally by clearing all the
// dlights if it needs to be disabled or if vertex lighting is enabled
if ( r_dynamiclight->integer == 0 ||
r_vertexLight->integer == 1 ) {
tr.refdef.num_dlights = 0;
}
// a single frame may have multiple scenes draw inside it --
// a 3D game view, 3D status bar renderings, 3D menus, etc.
// They need to be distinguished by the light flare code, because
// the visibility state for a given surface may be different in
// each scene / view.
tr.frameSceneNum++;
tr.sceneCount++;
// setup view parms for the initial view
//
// set up viewport
// The refdef takes 0-at-the-top y coordinates, so
// convert to GL's 0-at-the-bottom space
//
Com_Memset( &parms, 0, sizeof( parms ) );
parms.viewportX = tr.refdef.x;
parms.viewportY = glConfig.vidHeight - ( tr.refdef.y + tr.refdef.height );
parms.viewportWidth = tr.refdef.width;
parms.viewportHeight = tr.refdef.height;
parms.isPortal = qfalse;
parms.fovX = tr.refdef.fov_x;
parms.fovY = tr.refdef.fov_y;
parms.stereoFrame = tr.refdef.stereoFrame;
VectorCopy( fd.vieworg, parms.or.origin );
VectorCopy( fd.viewaxis[0], parms.or.axis[0] );
VectorCopy( fd.viewaxis[1], parms.or.axis[1] );
VectorCopy( fd.viewaxis[2], parms.or.axis[2] );
VectorCopy( fd.vieworg, parms.pvsOrigin );
R_RenderView( &parms );
// the next scene rendered in this frame will tack on after this one
r_firstSceneDrawSurf = tr.refdef.numDrawSurfs;
r_firstSceneEntity = r_numentities;
r_firstSceneDlight = r_numdlights;
r_firstScenePoly = r_numpolys;
r_firstScenePolybuffer = r_numpolybuffers;
tr.frontEndMsec += ri.Milliseconds() - startTime;
}
开发者ID:DaneTheory,项目名称:spearmint,代码行数:101,代码来源:tr_scene.c
示例20: RE_RenderScene
//.........这里部分代码省略.........
}
// derived info
tr.refdef.floatTime = tr.refdef.time * 0.001f;
tr.refdef.numDrawSurfs = r_firstSceneDrawSurf;
tr.refdef.drawSurfs = backEndData->drawSurfs;
tr.refdef.num_entities = r_numentities - r_firstSceneEntity;
tr.refdef.entities = &backEndData->entities[r_firstSceneEntity];
tr.refdef.num_dlights = r_numdlights - r_firstSceneDlight;
tr.refdef.dlights = &backEndData->dlights[r_firstSceneDlight];
tr.refdef.numPolys = r_numpolys - r_firstScenePoly;
tr.refdef.polys = &backEndData->polys[r_firstScenePoly];
tr.refdef.num_pshadows = 0;
tr.refdef.pshadows = &backEndData->pshadows[0];
// turn off dynamic lighting globally by clearing all the
// dlights if it needs to be disabled or if vertex lighting is enabled
if ( r_dynamiclight->integer == 0 ||
r_vertexLight->integer == 1 ||
glConfig.hardwareType == GLHW_PERMEDIA2 ) {
tr.refdef.num_dlights = 0;
}
// a single frame may have multiple scenes draw inside it --
// a 3D game view, 3D status bar renderings, 3D menus, etc.
// They need to be distinguished by the light flare code, because
// the visibility state for a given surface may be different in
// each scene / view.
tr.frameSceneNum++;
tr.sceneCount++;
// SmileTheory: playing with shadow mapping
if (!( fd->rdflags & RDF_NOWORLDMODEL ) && tr.refdef.num_dlights && r_dlightMode->integer >= 2)
{
R_RenderDlightCubemaps(fd);
}
/* playing with more shadows */
if(glRefConfig.framebufferObject && !( fd->rdflags & RDF_NOWORLDMODEL ) && r_shadows->integer == 4)
{
R_RenderPshadowMaps(fd);
}
// playing with even more shadows
if(glRefConfig.framebufferObject && !( fd->rdflags & RDF_NOWORLDMODEL ) && (r_forceSun->integer || tr.sunShadows))
{
R_RenderSunShadowMaps(fd, 0);
R_RenderSunShadowMaps(fd, 1);
R_RenderSunShadowMaps(fd, 2);
}
// setup view parms for the initial view
//
// set up viewport
// The refdef takes 0-at-the-top y coordinates, so
// convert to GL's 0-at-the-bottom space
//
Com_Memset( &parms, 0, sizeof( parms ) );
parms.viewportX = tr.refdef
|
请发表评论