本文整理汇总了C++中clipRect函数的典型用法代码示例。如果您正苦于以下问题:C++ clipRect函数的具体用法?C++ clipRect怎么用?C++ clipRect使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了clipRect函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: clipRect
void CCameraBlurFilter::draw(float amount, bool clearDepth) {
if (amount <= 0.f)
return;
SClipScreenRect clipRect(g_Viewport);
CGraphics::ResolveSpareTexture(clipRect, 0, clearDepth);
float aspect = CGraphics::g_CroppedViewport.xc_width / float(CGraphics::g_CroppedViewport.x10_height);
float xFac = CGraphics::g_CroppedViewport.xc_width / float(g_Viewport.x8_width);
float yFac = CGraphics::g_CroppedViewport.x10_height / float(g_Viewport.xc_height);
float xBias = CGraphics::g_CroppedViewport.x4_left / float(g_Viewport.x8_width);
float yBias = CGraphics::g_CroppedViewport.x8_top / float(g_Viewport.xc_height);
Vert verts[4] = {
{{-1.0, -1.0}, {xBias, yBias}},
{{-1.0, 1.0}, {xBias, yBias + yFac}},
{{1.0, -1.0}, {xBias + xFac, yBias}},
{{1.0, 1.0}, {xBias + xFac, yBias + yFac}},
};
m_vbo->load(verts, sizeof(verts));
for (int i = 0; i < 6; ++i) {
float tmp = i;
tmp *= 2.f * M_PIF;
tmp /= 6.f;
float amtX = std::cos(tmp);
amtX *= amount / 448.f / aspect;
float amtY = std::sin(tmp);
amtY *= amount / 448.f;
m_uniform.m_uv[i][0] = amtX * xFac;
m_uniform.m_uv[i][1] = amtY * yFac;
}
m_uniform.m_opacity = std::min(amount / 2.f, 1.f);
m_uniBuf->load(&m_uniform, sizeof(m_uniform));
CGraphics::SetShaderDataBinding(m_dataBind);
CGraphics::DrawArray(0, 4);
}
开发者ID:AxioDL,项目名称:urde,代码行数:41,代码来源:CCameraBlurFilter.cpp
示例2: clipRect
void CanvasRenderingContext2D::putImageData(ImageData* data, float dx, float dy, float dirtyX, float dirtyY,
float dirtyWidth, float dirtyHeight, ExceptionCode& ec)
{
if (!data) {
ec = TYPE_MISMATCH_ERR;
return;
}
if (!isfinite(dx) || !isfinite(dy) || !isfinite(dirtyX) ||
!isfinite(dirtyY) || !isfinite(dirtyWidth) || !isfinite(dirtyHeight)) {
ec = INDEX_SIZE_ERR;
return;
}
ImageBuffer* buffer = m_canvas ? m_canvas->buffer() : 0;
if (!buffer)
return;
if (dirtyWidth < 0) {
dirtyX += dirtyWidth;
dirtyWidth = -dirtyWidth;
}
if (dirtyHeight < 0) {
dirtyY += dirtyHeight;
dirtyHeight = -dirtyHeight;
}
FloatRect clipRect(dirtyX, dirtyY, dirtyWidth, dirtyHeight);
clipRect.intersect(IntRect(0, 0, data->width(), data->height()));
IntSize destOffset(static_cast<int>(dx), static_cast<int>(dy));
IntRect sourceRect = enclosingIntRect(clipRect);
sourceRect.move(destOffset);
sourceRect.intersect(IntRect(IntPoint(), buffer->size()));
if (sourceRect.isEmpty())
return;
willDraw(sourceRect);
sourceRect.move(-destOffset);
IntPoint destPoint(destOffset.width(), destOffset.height());
buffer->putImageData(data, sourceRect, destPoint);
}
开发者ID:Gin-Rye,项目名称:duibrowser,代码行数:41,代码来源:CanvasRenderingContext2D.cpp
示例3: PROFILER_LABEL
void
PaintedLayerComposite::RenderLayer(const nsIntRect& aClipRect)
{
if (!mBuffer || !mBuffer->IsAttached()) {
return;
}
PROFILER_LABEL("PaintedLayerComposite", "RenderLayer",
js::ProfileEntry::Category::GRAPHICS);
MOZ_ASSERT(mBuffer->GetCompositor() == mCompositeManager->GetCompositor() &&
mBuffer->GetLayer() == this,
"buffer is corrupted");
const nsIntRegion& visibleRegion = GetEffectiveVisibleRegion();
gfx::Rect clipRect(aClipRect.x, aClipRect.y, aClipRect.width, aClipRect.height);
#ifdef MOZ_DUMP_PAINTING
if (gfxUtils::sDumpPainting) {
RefPtr<gfx::DataSourceSurface> surf = mBuffer->GetAsSurface();
if (surf) {
WriteSnapshotToDumpFile(this, surf);
}
}
#endif
EffectChain effectChain(this);
LayerManagerComposite::AutoAddMaskEffect autoMaskEffect(mMaskLayer, effectChain);
AddBlendModeEffect(effectChain);
mBuffer->SetPaintWillResample(MayResample());
mBuffer->Composite(effectChain,
GetEffectiveOpacity(),
GetEffectiveTransform(),
GetEffectFilter(),
clipRect,
&visibleRegion);
mBuffer->BumpFlashCounter();
mCompositeManager->GetCompositor()->MakeCurrent();
}
开发者ID:L2-D2,项目名称:gecko-dev,代码行数:41,代码来源:PaintedLayerComposite.cpp
示例4: clipRect
void ossimQtRoiRectAnnotator::paintAnnotation( QPainter* p,
int clipx,
int clipy,
int clipw,
int cliph )
{
if ( !p || (thePoints.size() != 2) )
{
return;
}
ossimIrect clipRect(clipx, clipy, clipx + (clipw - 1), clipy + (cliph - 1));
if (clipRect.intersects(getRoiRect()))
{
QRect r;
r.setCoords(thePoints[0].x, thePoints[0].y,
thePoints[1].x, thePoints[1].y);
p->setPen(thePenColor);
p->drawRect(r);
}
}
开发者ID:star-labs,项目名称:star_ossim,代码行数:21,代码来源:ossimQtRoiRectAnnotator.cpp
示例5: clipRect
ClipRect PaintLayerClipper::applyOverflowClipToBackgroundRectWithGeometryMapper(
const ClipRectsContext& context,
const ClipRect& clip) const {
const LayoutObject& layoutObject = *m_layer.layoutObject();
FloatRect clipRect(clip.rect());
if (shouldClipOverflow(context)) {
LayoutRect layerBoundsWithVisualOverflow =
layoutObject.isLayoutView()
? toLayoutView(layoutObject).viewRect()
: toLayoutBox(layoutObject).visualOverflowRect();
toLayoutBox(layoutObject)
.flipForWritingMode(
// PaintLayer are in physical coordinates, so the overflow has to be
// flipped.
layerBoundsWithVisualOverflow);
mapLocalToRootWithGeometryMapper(context, layerBoundsWithVisualOverflow);
clipRect.intersect(FloatRect(layerBoundsWithVisualOverflow));
}
return ClipRect(LayoutRect(clipRect));
}
开发者ID:mirror,项目名称:chromium,代码行数:21,代码来源:PaintLayerClipper.cpp
示例6: renderer
void EllipsisBox::paintSelection(GraphicsContext* context, const FloatPoint& boxOrigin, RenderStyle* style, const Font& font)
{
Color textColor = renderer().resolveColor(style, CSSPropertyColor);
Color c = renderer().selectionBackgroundColor();
if (!c.alpha())
return;
// If the text color ends up being the same as the selection background, invert the selection
// background.
if (textColor == c)
c = Color(0xff - c.red(), 0xff - c.green(), 0xff - c.blue());
GraphicsContextStateSaver stateSaver(*context);
LayoutUnit top = root().selectionTop();
LayoutUnit h = root().selectionHeight();
const int deltaY = roundToInt(logicalTop() - top);
const FloatPoint localOrigin(boxOrigin.x(), boxOrigin.y() - deltaY);
FloatRect clipRect(localOrigin, FloatSize(m_logicalWidth, h.toFloat()));
context->clip(clipRect);
context->drawHighlightForText(font, constructTextRun(&renderer(), font, m_str, style, TextRun::AllowTrailingExpansion), localOrigin, h, c);
}
开发者ID:domenic,项目名称:mojo,代码行数:21,代码来源:EllipsisBox.cpp
示例7: Color
void EllipsisBox::paintSelection(GraphicsContext* context, const LayoutPoint& paintOffset, RenderStyle* style, const Font& font)
{
Color textColor = style->visitedDependentColor(CSSPropertyColor);
Color c = m_renderer->selectionBackgroundColor();
if (!c.isValid() || !c.alpha())
return;
// If the text color ends up being the same as the selection background, invert the selection
// background.
if (textColor == c)
c = Color(0xff - c.red(), 0xff - c.green(), 0xff - c.blue());
GraphicsContextStateSaver stateSaver(*context);
LayoutUnit top = root()->selectionTop();
LayoutUnit h = root()->selectionHeight();
FloatRect clipRect(x() + paintOffset.x(), top + paintOffset.y(), m_logicalWidth, h);
alignSelectionRectToDevicePixels(clipRect);
context->clip(clipRect);
// FIXME: Why is this always LTR? Fix by passing correct text run flags below.
context->drawHighlightForText(font, RenderBlock::constructTextRun(renderer(), font, m_str, style, TextRun::AllowTrailingExpansion), roundedIntPoint(LayoutPoint(x() + paintOffset.x(), y() + paintOffset.y() + top)), h, c, style->colorSpace());
}
开发者ID:fatman2021,项目名称:webkitgtk,代码行数:21,代码来源:EllipsisBox.cpp
示例8: ASSERT
void PlatformContextCairo::clipForPatternFilling(const GraphicsContextState& state)
{
ASSERT(state.fillPattern);
// Hold current cairo path in a variable for restoring it after configuring the pattern clip rectangle.
auto currentPath = cairo_copy_path(m_cr.get());
cairo_new_path(m_cr.get());
// Initialize clipping extent from current cairo clip extents, then shrink if needed according to pattern.
// Inspired by GraphicsContextQt::drawRepeatPattern.
double x1, y1, x2, y2;
cairo_clip_extents(m_cr.get(), &x1, &y1, &x2, &y2);
FloatRect clipRect(x1, y1, x2 - x1, y2 - y1);
Image* patternImage = state.fillPattern->tileImage();
ASSERT(patternImage);
const AffineTransform& patternTransform = state.fillPattern->getPatternSpaceTransform();
FloatRect patternRect = patternTransform.mapRect(FloatRect(0, 0, patternImage->width(), patternImage->height()));
bool repeatX = state.fillPattern->repeatX();
bool repeatY = state.fillPattern->repeatY();
if (!repeatX) {
clipRect.setX(patternRect.x());
clipRect.setWidth(patternRect.width());
}
if (!repeatY) {
clipRect.setY(patternRect.y());
clipRect.setHeight(patternRect.height());
}
if (!repeatX || !repeatY) {
cairo_rectangle(m_cr.get(), clipRect.x(), clipRect.y(), clipRect.width(), clipRect.height());
cairo_clip(m_cr.get());
}
// Restoring cairo path.
cairo_append_path(m_cr.get(), currentPath);
cairo_path_destroy(currentPath);
}
开发者ID:edcwconan,项目名称:webkit,代码行数:39,代码来源:PlatformContextCairo.cpp
示例9: paintBounds
void TableCellPainter::paintBackgroundsBehindCell(const PaintInfo& paintInfo, const LayoutPoint& paintOffset, const LayoutObject* backgroundObject, DisplayItem::Type type)
{
if (!backgroundObject)
return;
if (m_layoutTableCell.style()->visibility() != VISIBLE)
return;
LayoutTable* tableElt = m_layoutTableCell.table();
if (!tableElt->collapseBorders() && m_layoutTableCell.style()->emptyCells() == EmptyCellsHide && !m_layoutTableCell.firstChild())
return;
LayoutRect paintRect = paintBounds(paintOffset, backgroundObject != &m_layoutTableCell ? AddOffsetFromParent : DoNotAddOffsetFromParent);
// Record drawing only if the cell is painting background from containers.
Optional<LayoutObjectDrawingRecorder> recorder;
if (backgroundObject != &m_layoutTableCell) {
if (LayoutObjectDrawingRecorder::useCachedDrawingIfPossible(paintInfo.context, m_layoutTableCell, type))
return;
recorder.emplace(paintInfo.context, m_layoutTableCell, type, paintRect);
} else {
ASSERT(paintRect.location() == paintOffset);
}
Color c = backgroundObject->resolveColor(CSSPropertyBackgroundColor);
const FillLayer& bgLayer = backgroundObject->style()->backgroundLayers();
if (bgLayer.hasImage() || c.alpha()) {
// We have to clip here because the background would paint
// on top of the borders otherwise. This only matters for cells and rows.
bool shouldClip = backgroundObject->hasLayer() && (backgroundObject == &m_layoutTableCell || backgroundObject == m_layoutTableCell.parent()) && tableElt->collapseBorders();
GraphicsContextStateSaver stateSaver(paintInfo.context, shouldClip);
if (shouldClip) {
LayoutRect clipRect(paintRect.location(), m_layoutTableCell.size());
clipRect.expand(m_layoutTableCell.borderInsets());
paintInfo.context.clip(pixelSnappedIntRect(clipRect));
}
BoxPainter(m_layoutTableCell).paintFillLayers(paintInfo, c, bgLayer, paintRect, BackgroundBleedNone, SkXfermode::kSrcOver_Mode, backgroundObject);
}
}
开发者ID:aobzhirov,项目名称:ChromiumGStreamerBackend,代码行数:39,代码来源:TableCellPainter.cpp
示例10: Color
void EllipsisBoxPainter::paintSelection(GraphicsContext& context, const LayoutPoint& boxOrigin, const ComputedStyle& style, const Font& font)
{
Color textColor = m_ellipsisBox.getLineLayoutItem().resolveColor(style, CSSPropertyColor);
Color c = m_ellipsisBox.getLineLayoutItem().selectionBackgroundColor();
if (!c.alpha())
return;
// If the text color ends up being the same as the selection background, invert the selection
// background.
if (textColor == c)
c = Color(0xff - c.red(), 0xff - c.green(), 0xff - c.blue());
GraphicsContextStateSaver stateSaver(context);
LayoutUnit selectionBottom = m_ellipsisBox.root().selectionBottom();
LayoutUnit top = m_ellipsisBox.root().selectionTop();
LayoutUnit h = m_ellipsisBox.root().selectionHeight();
const int deltaY = roundToInt(m_ellipsisBox.getLineLayoutItem().styleRef().isFlippedLinesWritingMode() ? selectionBottom - m_ellipsisBox.logicalBottom() : m_ellipsisBox.logicalTop() - top);
const FloatPoint localOrigin(LayoutPoint(boxOrigin.x(), boxOrigin.y() - deltaY));
FloatRect clipRect(localOrigin, FloatSize(LayoutSize(m_ellipsisBox.logicalWidth(), h)));
context.clip(clipRect);
context.drawHighlightForText(font, constructTextRun(font, m_ellipsisBox.ellipsisStr(), style, TextRun::AllowTrailingExpansion), localOrigin, h, c);
}
开发者ID:aobzhirov,项目名称:ChromiumGStreamerBackend,代码行数:22,代码来源:EllipsisBoxPainter.cpp
示例11: clipRect
void ThreadedCompositor::renderLayerTree()
{
if (!m_scene)
return;
if (!ensureGLContext())
return;
FloatRect clipRect(0, 0, m_viewportSize.width(), m_viewportSize.height());
TransformationMatrix viewportTransform;
FloatPoint scrollPostion = viewportController()->visibleContentsRect().location();
viewportTransform.scale(viewportController()->pageScaleFactor());
viewportTransform.translate(-scrollPostion.x(), -scrollPostion.y());
m_scene->paintToCurrentGLContext(viewportTransform, 1, clipRect, Color::white, false, scrollPostion);
#if PLATFORM(BCM_RPI)
auto bufferExport = m_surface->lockFrontBuffer();
m_compositingManager.commitBCMBuffer(bufferExport);
#endif
#if PLATFORM(BCM_NEXUS)
auto bufferExport = m_surface->lockFrontBuffer();
m_compositingManager.commitBCMNexusBuffer(bufferExport);
#endif
#if PLATFORM(INTEL_CE)
auto bufferExport = m_surface->lockFrontBuffer();
m_compositingManager.commitIntelCEBuffer(bufferExport);
#endif
glContext()->swapBuffers();
#if PLATFORM(GBM)
auto bufferExport = m_surface->lockFrontBuffer();
m_compositingManager.commitPrimeBuffer(bufferExport);
#endif
}
开发者ID:abihf,项目名称:WebKitForWayland,代码行数:39,代码来源:ThreadedCompositor.cpp
示例12: frameRectsChanged
virtual void frameRectsChanged()
{
if (!platformWidget())
return;
IntRect windowRect = convertToContainingWindow(IntRect(0, 0, frameRect().width(), frameRect().height()));
platformWidget()->setGeometry(windowRect);
ScrollView* parentScrollView = parent();
if (!parentScrollView)
return;
ASSERT(parentScrollView->isFrameView());
IntRect clipRect(static_cast<FrameView*>(parentScrollView)->windowClipRect());
clipRect.move(-windowRect.x(), -windowRect.y());
clipRect.intersect(platformWidget()->rect());
QRegion clipRegion = QRegion(clipRect);
platformWidget()->setMask(clipRegion);
handleVisibility();
}
开发者ID:mikezit,项目名称:Webkit_Code,代码行数:22,代码来源:FrameLoaderClientQt.cpp
示例13: offset
Rect2I GUIInputCaret::getSpriteClipRect(const Rect2I& parentClipRect) const
{
Vector2I offset(mElement->_getLayoutData().area.x, mElement->_getLayoutData().area.y);
Vector2I clipOffset = getSpriteOffset() - offset -
Vector2I(mElement->_getTextInputRect().x, mElement->_getTextInputRect().y);
Rect2I clipRect(-clipOffset.x, -clipOffset.y, mTextDesc.width, mTextDesc.height);
Rect2I localParentCliprect = parentClipRect;
// Move parent rect to our space
localParentCliprect.x += mElement->_getTextInputOffset().x + clipRect.x;
localParentCliprect.y += mElement->_getTextInputOffset().y + clipRect.y;
// Clip our rectangle so its not larger then the parent
clipRect.clip(localParentCliprect);
// Increase clip size by 1, so we can fit the caret in case it is fully at the end of the text
clipRect.width += 1;
return clipRect;
}
开发者ID:lysannschlegel,项目名称:bsf,代码行数:23,代码来源:BsGUIInputCaret.cpp
示例14: clipRect
NS_IMETHODIMP
nsFileControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
const nsRect& aDirtyRect,
const nsDisplayListSet& aLists)
{
// Our background is inherited to the text input, and we don't really want to
// paint it or out padding and borders (which we never have anyway, per
// styles in forms.css) -- doing it just makes us look ugly in some cases and
// has no effect in others.
nsDisplayListCollection tempList;
nsresult rv = nsAreaFrame::BuildDisplayList(aBuilder, aDirtyRect, tempList);
if (NS_FAILED(rv))
return rv;
tempList.BorderBackground()->DeleteAll();
// Clip height only
nsRect clipRect(aBuilder->ToReferenceFrame(this), GetSize());
clipRect.width = GetOverflowRect().XMost();
rv = OverflowClip(aBuilder, tempList, aLists, clipRect);
NS_ENSURE_SUCCESS(rv, rv);
// Disabled file controls don't pass mouse events to their children, so we
// put an invisible item in the display list above the children
// just to catch events
// REVIEW: I'm not sure why we do this, but that's what nsFileControlFrame::
// GetFrameForPoint was doing
if (mContent->HasAttr(kNameSpaceID_None, nsGkAtoms::disabled) &&
IsVisibleForPainting(aBuilder)) {
nsDisplayItem* item = new (aBuilder) nsDisplayEventReceiver(this);
if (!item)
return NS_ERROR_OUT_OF_MEMORY;
aLists.Content()->AppendToTop(item);
}
return DisplaySelectionOverlay(aBuilder, aLists);
}
开发者ID:ahadzi,项目名称:celtx,代码行数:37,代码来源:nsFileControlFrame.cpp
示例15: xf
bool GiGraphics::setClipBox(const RECT_2D& rc)
{
if (!isDrawing() || isStopping())
return false;
bool ret = false;
Box2d rect;
if (!rect.intersectWith(Box2d(rc), Box2d(m_impl->clipBox0)).isEmpty()) {
if (rect != Box2d(m_impl->clipBox)) {
rect.get(m_impl->clipBox);
m_impl->rectDraw.set(Box2d(rc));
m_impl->rectDraw.inflate(GiGraphicsImpl::CLIP_INFLATE);
m_impl->rectDrawM = m_impl->rectDraw * xf().displayToModel();
m_impl->rectDrawW = m_impl->rectDrawM * xf().modelToWorld();
SafeCall(m_impl->canvas, clipRect(m_impl->clipBox.left, m_impl->clipBox.top,
m_impl->clipBox.width(),
m_impl->clipBox.height()));
}
ret = true;
}
return ret;
}
开发者ID:Vito2015,项目名称:vgcore,代码行数:24,代码来源:gigraph.cpp
示例16: Color
void EllipsisBox::paintSelection(GraphicsContext* context, const FloatPoint& boxOrigin, RenderStyle* style, const Font& font)
{
Color textColor = m_renderer->resolveColor(style, CSSPropertyColor);
Color c = m_renderer->selectionBackgroundColor();
if (!c.isValid() || !c.alpha())
return;
// If the text color ends up being the same as the selection background, invert the selection
// background.
if (textColor == c)
c = Color(0xff - c.red(), 0xff - c.green(), 0xff - c.blue());
GraphicsContextStateSaver stateSaver(*context);
LayoutUnit selectionBottom = root()->selectionBottom();
LayoutUnit top = root()->selectionTop();
LayoutUnit h = root()->selectionHeight();
const int deltaY = roundToInt(renderer()->style()->isFlippedLinesWritingMode() ? selectionBottom - logicalBottom() : logicalTop() - top);
const FloatPoint localOrigin(boxOrigin.x(), boxOrigin.y() - deltaY);
FloatRect clipRect(localOrigin, FloatSize(m_logicalWidth, h));
alignSelectionRectToDevicePixels(clipRect);
context->clip(clipRect);
// FIXME: Why is this always LTR? Fix by passing correct text run flags below.
context->drawHighlightForText(font, RenderBlockFlow::constructTextRun(renderer(), font, m_str, style, TextRun::AllowTrailingExpansion), localOrigin, h, c);
}
开发者ID:Metrological,项目名称:chromium,代码行数:24,代码来源:EllipsisBox.cpp
示例17: clipRect
ossimAnnotationObject* ossimAnnotationMultiLineObject::getNewClippedObject(const ossimDrect& rect)const
{
ossimAnnotationMultiLineObject* result = (ossimAnnotationMultiLineObject*)NULL;
if(intersects(rect))
{
vector<ossimPolyLine> lineList;
vector<ossimPolyLine> tempResult;
ossimDrect clipRect(rect.ul().x - 10,
rect.ul().y - 10,
rect.lr().x + 10,
rect.lr().y + 10);
for(ossim_uint32 i =0; i< thePolyLineList.size();++i)
{
if(thePolyLineList[i].clipToRect(tempResult, clipRect))
{
lineList.insert(lineList.end(),
tempResult.begin(),
tempResult.end());
}
}
if(lineList.size() > 0)
{
result = new ossimAnnotationMultiLineObject(lineList,
theRed,
theGreen,
theBlue,
theThickness);
}
}
return result;
}
开发者ID:LucHermitte,项目名称:ossim,代码行数:36,代码来源:ossimAnnotationMultiLineObject.cpp
示例18: ToMatrix4x4
void
ImageLayerComposite::RenderLayer(const nsIntPoint& aOffset,
const nsIntRect& aClipRect)
{
if (!mImageHost) {
return;
}
mCompositor->MakeCurrent();
EffectChain effectChain;
LayerManagerComposite::AddMaskEffect(mMaskLayer, effectChain);
gfx::Matrix4x4 transform;
ToMatrix4x4(GetEffectiveTransform(), transform);
gfx::Rect clipRect(aClipRect.x, aClipRect.y, aClipRect.width, aClipRect.height);
mImageHost->SetCompositor(mCompositor);
mImageHost->Composite(effectChain,
GetEffectiveOpacity(),
transform,
gfx::Point(aOffset.x, aOffset.y),
gfx::ToFilter(mFilter),
clipRect);
}
开发者ID:vitillo,项目名称:mozilla-central,代码行数:24,代码来源:ImageLayerComposite.cpp
示例19: TEST_STEP
testStep->assertMessage()); \
} \
TEST_STEP(NAME, NAME##TestStep )
///////////////////////////////////////////////////////////////////////////////
// Basic test steps for most virtual methods in SkCanvas that draw or affect
// the state of the canvas.
SIMPLE_TEST_STEP(Translate, translate(SkIntToScalar(1), SkIntToScalar(2)));
SIMPLE_TEST_STEP(Scale, scale(SkIntToScalar(1), SkIntToScalar(2)));
SIMPLE_TEST_STEP(Rotate, rotate(SkIntToScalar(1)));
SIMPLE_TEST_STEP(Skew, skew(SkIntToScalar(1), SkIntToScalar(2)));
SIMPLE_TEST_STEP(Concat, concat(d.fMatrix));
SIMPLE_TEST_STEP(SetMatrix, setMatrix(d.fMatrix));
SIMPLE_TEST_STEP(ClipRect, clipRect(d.fRect));
SIMPLE_TEST_STEP(ClipPath, clipPath(d.fPath));
SIMPLE_TEST_STEP(ClipRegion, clipRegion(d.fRegion, SkRegion::kReplace_Op));
SIMPLE_TEST_STEP(Clear, clear(d.fColor));
///////////////////////////////////////////////////////////////////////////////
// Complex test steps
static void SaveMatrixClipStep(SkCanvas* canvas, const TestData& d,
skiatest::Reporter* reporter, CanvasTestStep* testStep) {
int saveCount = canvas->getSaveCount();
canvas->save();
canvas->translate(SkIntToScalar(1), SkIntToScalar(2));
canvas->clipRegion(d.fRegion);
canvas->restore();
REPORTER_ASSERT_MESSAGE(reporter, canvas->getSaveCount() == saveCount,
开发者ID:mariospr,项目名称:chromium-browser,代码行数:31,代码来源:CanvasTest.cpp
示例20: defined
/////////////////////////////////////////////////////////////////////////////
// RenderAllShadows : render all shadow instances
/////////////////////////////////////////////////////////////////////////////
void VBlobShadowManager::RenderAllShadows()
{
// if enabled, a 2D bounding box is additionally used for clipping, which saves a lot of fillrate!
// TODO: PSP2 - fix 2d clipping
#if defined(_VISION_PSP2)
static bool bClipScissor = false;
#else
static bool bClipScissor = true;
#endif
VisFrustum_cl viewFrustum;
IVisVisibilityCollector_cl *pVisColl = VisRenderContext_cl::GetCurrentContext()->GetVisibilityCollector();
if (pVisColl==NULL || pVisColl->GetBaseFrustum()==NULL)
return;
viewFrustum.CopyFrom((VisFrustum_cl&)*pVisColl->GetBaseFrustum());
// render all shadows
VISION_PROFILE_FUNCTION(PROFILING_BS_OVERALL);
// get the collection of visible (opaque) primitives. For each shadow instance determine
// the primitives in this list, which intersect with the shadow box
// (we do not want to render primitives that are not visible)
const VisStaticGeometryInstanceCollection_cl *pVisibleGeom = pVisColl->GetVisibleStaticGeometryInstancesForPass(VPT_PrimaryOpaquePass);
VRectanglef clipRect(false);
VRectanglef screenRect(0.f,0.f,(float)Vision::Video.GetXRes(),(float)Vision::Video.GetYRes());
hkvVec3 vBoxCorner[8];
hkvVec2 vCorner2D(false);
// now render the shadows:
FOR_ALL_SHADOWS
if (pShadow->GetOwner())
pShadow->SetBoundingBoxFromOwnerProperties();
// shadow box visible?
if (!viewFrustum.Overlaps(pShadow->m_ShadowBox))
continue;
// build 2D bounding box for scissor clipping
if (bClipScissor)
{
VISION_PROFILE_FUNCTION(PROFILING_BS_SCISSORRECT);
clipRect.Reset();
pShadow->m_ShadowBox.getCorners(vBoxCorner);
for (int i=0; i<8; i++)
{
// if one vertex is behind camera, do not use clipping
if (!Vision::Contexts.GetCurrentContext()->Project2D(vBoxCorner[i],vCorner2D.x,vCorner2D.y))
{
Vision::RenderLoopHelper.SetScissorRect(NULL);
goto render_shadow;
}
clipRect.Add(vCorner2D);
}
VASSERT(clipRect.IsValid());
clipRect = clipRect.GetIntersection(screenRect);
if (!clipRect.IsValid())
continue; // do not render shadows at all if rect is outside the screen
Vision::RenderLoopHelper.SetScissorRect(&clipRect);
}
render_shadow:
// get the visible primitives in the shadow bounding box
{
VISION_PROFILE_FUNCTION(PROFILING_BS_DETERMINE_PRIMS);
// affected static geometry:
shadowGeom.Clear();
pVisibleGeom->DetermineEntriesTouchingBox(pShadow->m_ShadowBox,shadowGeom);
}
// split into geometry types:
if (!shadowGeom.GetNumEntries())
continue;
const VisStaticGeometryType_e relevantTypes[2] = {STATIC_GEOMETRY_TYPE_MESHINSTANCE,STATIC_GEOMETRY_TYPE_TERRAIN};
// two relevant geometry types:
for (int iType=0; iType<2; iType++)
{
shadowGeomOfType.Clear();
shadowGeom.GetEntriesOfType(shadowGeomOfType,relevantTypes[iType]);
VCompiledTechnique *pFX = GetDefaultTechnique(relevantTypes[iType]);
if (shadowGeomOfType.GetNumEntries()==0 || pFX==NULL)
continue;
// for all the shader in the projection effect (usually 1 shader), render the primitive collection
const int iShaderCount = pFX->GetShaderCount();
for (int j=0; j<iShaderCount; j++)
{
VBlobShadowShader *pShader = (VBlobShadowShader *)pFX->GetShader(j);
{ // code block for easier profiling
VISION_PROFILE_FUNCTION(PROFILING_BS_PREPARE_SHADER);
// prepare the shader, i.e. setup shadow specific projection planes, colors etc.
//.........这里部分代码省略.........
开发者ID:romance-ii,项目名称:projectanarchy,代码行数:101,代码来源:BlobShadowManager.cpp
注:本文中的clipRect函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论