예제 #1
0
/*
=================
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();
}
/*
=================
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();
}