Use GrAARectRenderer in GPU AA clip mask generation

http://codereview.appspot.com/6300097/



git-svn-id: http://skia.googlecode.com/svn/trunk@4261 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
robertphillips@google.com 2012-06-15 13:58:07 +00:00
parent 14ca1d33bc
commit f69a11b5c5
3 changed files with 18 additions and 36 deletions

View File

@ -254,6 +254,8 @@ public:
const GrRenderTarget* getRenderTarget() const;
GrRenderTarget* getRenderTarget();
GrAARectRenderer* getAARectRenderer() { return fAARectRenderer; }
/**
* Can the provided configuration act as a color render target?
*/
@ -705,9 +707,9 @@ private:
GrIndexBufferAllocPool* fDrawBufferIBAllocPool;
GrInOrderDrawBuffer* fDrawBuffer;
GrContext(GrGpu* gpu);
GrAARectRenderer* fAARectRenderer;
GrAARectRenderer* fAARectRenderer;
GrContext(GrGpu* gpu);
void setupDrawBuffer();

View File

@ -108,9 +108,9 @@ GrIndexBuffer* GrAARectRenderer::aaStrokeRectIndexBuffer(GrGpu* gpu) {
}
void GrAARectRenderer::fillAARect(GrGpu* gpu,
GrDrawTarget* target,
const GrRect& devRect,
bool useVertexCoverage) {
GrDrawTarget* target,
const GrRect& devRect,
bool useVertexCoverage) {
GrVertexLayout layout = aa_rect_layout(target, useVertexCoverage);
size_t vsize = GrDrawTarget::VertexSize(layout);

View File

@ -96,31 +96,14 @@ bool GrClipMaskManager::useSWOnlyPath(GrGpu* gpu, const GrClip& clipIn) {
useSW = false;
}
if (kRect_ClipType == clipIn.getElementType(i)) {
// Non-anti-aliased rects can always be drawn directly (w/o
// using the software path) so the anti-aliased rects are all
// that need to be checked here
if (clipIn.getDoAA(i)) {
// Antialiased rects are converted to paths and then drawn with
// kEvenOdd_GrPathFill.
// TODO: wrap GrContext::fillAARect in a helper class and
// draw AA rects directly rather than converting to paths
SkPath temp;
temp.addRect(clipIn.getRect(i));
if (path_needs_SW_renderer(this->getContext(), gpu, temp,
kEvenOdd_GrPathFill, true)) {
useSW = true;
}
}
} else {
if (path_needs_SW_renderer(this->getContext(), gpu,
clipIn.getPath(i),
clipIn.getPathFill(i),
clipIn.getDoAA(i))) {
useSW = true;
}
// rects can always be drawn directly w/o using the software path
// so only paths need to be checked
if (kPath_ClipType == clipIn.getElementType(i) &&
path_needs_SW_renderer(this->getContext(), gpu,
clipIn.getPath(i),
clipIn.getPathFill(i),
clipIn.getDoAA(i))) {
useSW = true;
}
}
@ -414,12 +397,9 @@ bool GrClipMaskManager::drawClipShape(GrGpu* gpu,
if (kRect_ClipType == clipIn.getElementType(index)) {
if (clipIn.getDoAA(index)) {
// convert the rect to a path for AA
SkPath temp;
temp.addRect(clipIn.getRect(index));
return draw_path(this->getContext(), gpu, temp,
kEvenOdd_GrPathFill, clipIn.getDoAA(index));
getContext()->getAARectRenderer()->fillAARect(gpu, gpu,
clipIn.getRect(index),
true);
} else {
gpu->drawSimpleRect(clipIn.getRect(index), NULL, 0);
}