void InitObjectViewer(C_Window *win,long client) { float l,t,r,b; TheTimeManager.SetTime( ( unsigned long )( 12 * 60 * 60 * 1000 ) ); viewRot = IMatrix; viewPos.x =0.0f; viewPos.y =0.0f; viewPos.z =0.0f; UIrend3d=new Render3D; UIrend3d->Setup(gMainHandler->GetFront()); UIrend3d->SetFOV( 30.0f * PI/180.f ); CalculateViewport(win,client,&l,&t,&r,&b); UIrend3d->SetViewport( l, t, r, b); UIrend3d->SetCamera( &viewPos, &viewRot ); if(gBSPList == NULL) { gBSPList=new C_BSPList; gBSPList->Setup(); } else gBSPList->RemoveAll(); }
void CGammaCompositorPlane::AdjustBufferInfoForScaling(const stm_display_buffer_t * const pFrame, GAMMA_QUEUE_BUFFER_INFO &qbinfo) const { if(!qbinfo.isSourceInterlaced && qbinfo.isDisplayInterlaced) { if(m_bHasProgressive2InterlacedHW) { DEBUGF2(3,("%s: using P2I\n", __PRETTY_FUNCTION__)); qbinfo.isUsingProgressive2InterlacedHW = true; } else if (m_ulMaxLineStep > 1) { DEBUGF2(3,("%s: using line skip (max %lu)\n\n", __PRETTY_FUNCTION__, m_ulMaxLineStep)); } else { /* * without a P2I block we have to convert to interlaced using a * 2x downscale. But, if the hardware cannot do that or the overall * scale then goes outside the hardware capabilities, we treat the * source as interlaced instead. */ int maxverticaldownscale = m_ulMaxVSrcInc/2; bool convert_to_interlaced = (qbinfo.dst.height < (qbinfo.src.height * m_fixedpointONE / maxverticaldownscale)); if(convert_to_interlaced) { DEBUGF2(3,("%s: converting source to interlaced for " "downscaling\n", __PRETTY_FUNCTION__)); qbinfo.isSourceInterlaced = true; qbinfo.firstFieldType = GNODE_TOP_FIELD; } } } if(qbinfo.isDisplayInterlaced) { /* * Convert the height from frame to field lines. Note that we * do not support an "odd" number of lines on an interlaced display, * there must always be a matched top and bottom field line. The * start line must also be located on a top field to prevent fields * getting accidentally swapped. */ qbinfo.dst.height /= 2; qbinfo.dst.y &= 0xfffffffe; } /* * Save the original source height in frame coordinates. */ qbinfo.srcFrameHeight = qbinfo.src.height; if(qbinfo.isSourceInterlaced) { /* * For interlaced content we change the source height to the height * of each field. */ qbinfo.src.height /= 2; /* * Also change the vertical start position from frame to field * coordinates, unless we are using the hardware de-interlacer in * which case we keep it in frame coordinates. * * Remember that this value is in the fixed point format. */ if(!qbinfo.isHWDeinterlacing) qbinfo.src.y /= 2; } CalculateHorizontalScaling(qbinfo); CalculateVerticalScaling(qbinfo); /* * Save the adjusted destination height in frame coordinates */ qbinfo.dstFrameHeight = (qbinfo.isDisplayInterlaced ? qbinfo.dst.height * 2 : qbinfo.dst.height); /* * Now adjust the source coordinate system to take into account line skipping */ qbinfo.src.y /= qbinfo.line_step; /* * Define the Y coordinate limit in the source image, used to ensure we * do not go outside of the required source image crop when the Y position * is adjusted for re-scale purposes. */ qbinfo.maxYCoordinate = ((qbinfo.src.y / m_fixedpointONE) + qbinfo.verticalFilterInputSamples - 1); /* * Now we have the global scale and adjusted destination, deal with * any non-linear scaling to convert between pixel aspect ratios. * * If this succeeds, then the hsrcinc and chroma_hsrcinc fields will have * been changed to reflect the zoom in the "centre" region of the image * only. */ if(pFrame->dst.ulFlags & STM_PLANE_DST_CONVERT_TO_16_9_DISPLAY) CalculateNonLinearZoom(pFrame,qbinfo); CalculateViewport(qbinfo); }