本文整理汇总了C++中boost::shared_ptr::ForceUndiceable方法的典型用法代码示例。如果您正苦于以下问题:C++ shared_ptr::ForceUndiceable方法的具体用法?C++ shared_ptr::ForceUndiceable怎么用?C++ shared_ptr::ForceUndiceable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类boost::shared_ptr
的用法示例。
在下文中一共展示了shared_ptr::ForceUndiceable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CullSurface
bool CqImageBuffer::CullSurface( CqBound& Bound, const boost::shared_ptr<CqSurface>& pSurface )
{
// If the primitive is completely outside of the hither-yon z range, cull it.
if ( Bound.vecMin().z() >= m_optCache.clipFar ||
Bound.vecMax().z() <= m_optCache.clipNear )
return true;
// This needs to be re-enabled when the RiClippingPlane code is wired up.
#if 0
if(QGetRenderContext()->clippingVolume().whereIs(Bound) == CqBound::Side_Outside)
{
return(true);
}
#endif
// If the primitive spans the epsilon plane and the hither plane and can be split,
if ( Bound.vecMin().z() <= FLT_EPSILON )
{
// Mark the primitive as not dicable.
pSurface->ForceUndiceable();
CqString objname( "unnamed" );
const CqString* pattrName = pSurface->pAttributes() ->GetStringAttribute( "identifier", "name" );
if ( pattrName != 0 )
objname = pattrName[ 0 ];
Aqsis::log() << info << "Object \"" << objname.c_str() << "\" spans the epsilon plane" << std::endl;
if ( pSurface->SplitCount() > m_optCache.maxEyeSplits )
{
Aqsis::log() << warning << "Max eyesplits for object \"" << objname.c_str() << "\" exceeded" << std::endl;
return( true );
}
return ( false );
}
TqFloat minz = Bound.vecMin().z();
TqFloat maxz = Bound.vecMax().z();
// Convert the bounds to raster space.
CqMatrix mat;
QGetRenderContext() ->matSpaceToSpace( "camera", "raster", NULL, NULL, QGetRenderContext()->Time(), mat );
Bound.Transform( mat );
// Take into account depth-of-field
if ( QGetRenderContext() ->UsingDepthOfField() )
{
const CqVector2D minZCoc = QGetRenderContext()->GetCircleOfConfusion( minz );
const CqVector2D maxZCoc = QGetRenderContext()->GetCircleOfConfusion( maxz );
TqFloat cocX = max( minZCoc.x(), maxZCoc.x() );
TqFloat cocY = max( minZCoc.y(), maxZCoc.y() );
Bound.vecMin().x( Bound.vecMin().x() - cocX );
Bound.vecMin().y( Bound.vecMin().y() - cocY );
Bound.vecMax().x( Bound.vecMax().x() + cocX );
Bound.vecMax().y( Bound.vecMax().y() + cocY );
}
// And expand to account for filter size.
Bound.vecMin().x( Bound.vecMin().x() - m_optCache.xFiltSize / 2.0f );
Bound.vecMin().y( Bound.vecMin().y() - m_optCache.yFiltSize / 2.0f );
Bound.vecMax().x( Bound.vecMax().x() + m_optCache.xFiltSize / 2.0f );
Bound.vecMax().y( Bound.vecMax().y() + m_optCache.yFiltSize / 2.0f );
// If the bounds are completely outside the viewing frustum, cull the primitive.
if( Bound.vecMin().x() > QGetRenderContext()->cropWindowXMax() ||
Bound.vecMin().y() > QGetRenderContext()->cropWindowYMax() ||
Bound.vecMax().x() < QGetRenderContext()->cropWindowXMin() ||
Bound.vecMax().y() < QGetRenderContext()->cropWindowYMin() )
return ( true );
// Restore Z-Values to camera space.
Bound.vecMin().z( minz );
Bound.vecMax().z( maxz );
// Cache the Bound.
pSurface->CacheRasterBound( Bound );
return ( false );
}