/* ================= 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(); }