Remove SkBitmapShaderTemplate.
Remove files that are no longer needed: src/core/SkBitmapShaderTemplate.h src/core/SkBitmapShader16BilerpTemplate.h BUG=skia:1976 R=scroggo@google.com Author: dominikg@chromium.org Review URL: https://codereview.chromium.org/225023028 git-svn-id: http://skia.googlecode.com/svn/trunk@14078 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
94bd822801
commit
c96268d792
@ -1,245 +0,0 @@
|
||||
|
||||
/*
|
||||
* Copyright 2006 The Android Open Source Project
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
|
||||
#include "SkFilterProc.h"
|
||||
|
||||
class BILERP_BITMAP16_SHADER_CLASS : public HasSpan16_Sampler_BitmapShader {
|
||||
public:
|
||||
BILERP_BITMAP16_SHADER_CLASS(const SkBitmap& src)
|
||||
: HasSpan16_Sampler_BitmapShader(src, true,
|
||||
SkShader::kClamp_TileMode,
|
||||
SkShader::kClamp_TileMode)
|
||||
{
|
||||
}
|
||||
|
||||
virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count)
|
||||
{
|
||||
SkASSERT(count > 0);
|
||||
|
||||
U8CPU alpha = this->getPaintAlpha();
|
||||
|
||||
const SkMatrix& inv = this->getTotalInverse();
|
||||
const SkBitmap& srcBitmap = this->getSrcBitmap();
|
||||
unsigned srcMaxX = srcBitmap.width() - 1;
|
||||
unsigned srcMaxY = srcBitmap.height() - 1;
|
||||
unsigned srcRB = srcBitmap.rowBytes();
|
||||
|
||||
BILERP_BITMAP16_SHADER_PREAMBLE(srcBitmap);
|
||||
|
||||
const SkFilterProc* proc_table = SkGetBilinearFilterProcTable();
|
||||
const BILERP_BITMAP16_SHADER_TYPE* srcPixels = (const BILERP_BITMAP16_SHADER_TYPE*)srcBitmap.getPixels();
|
||||
|
||||
if (this->getInverseClass() == kPerspective_MatrixClass)
|
||||
{
|
||||
SkPerspIter iter(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, count);
|
||||
while ((count = iter.next()) != 0)
|
||||
{
|
||||
const SkFixed* srcXY = iter.getXY();
|
||||
while (--count >= 0)
|
||||
{
|
||||
SkFixed fx = *srcXY++ - SK_FixedHalf;
|
||||
SkFixed fy = *srcXY++ - SK_FixedHalf;
|
||||
int ix = fx >> 16;
|
||||
int iy = fy >> 16;
|
||||
int x = SkClampMax(ix, srcMaxX);
|
||||
int y = SkClampMax(iy, srcMaxY);
|
||||
|
||||
const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
|
||||
|
||||
p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const char*)srcPixels + y * srcRB)) + x;
|
||||
if ((unsigned)ix < srcMaxX)
|
||||
p01 += 1;
|
||||
p10 = p00;
|
||||
p11 = p01;
|
||||
if ((unsigned)iy < srcMaxY)
|
||||
{
|
||||
p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p10 + srcRB);
|
||||
p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p11 + srcRB);
|
||||
}
|
||||
|
||||
SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
|
||||
uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p00)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p01)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p10)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p11)));
|
||||
|
||||
*dstC++ = expanded_rgb16_to_8888(c, alpha);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // linear case
|
||||
{
|
||||
SkFixed fx, fy, dx, dy;
|
||||
|
||||
// now init fx, fy, dx, dy
|
||||
{
|
||||
SkPoint srcPt;
|
||||
this->getInverseMapPtProc()(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, &srcPt);
|
||||
|
||||
fx = SkScalarToFixed(srcPt.fX) - SK_FixedHalf;
|
||||
fy = SkScalarToFixed(srcPt.fY) - SK_FixedHalf;
|
||||
|
||||
if (this->getInverseClass() == kFixedStepInX_MatrixClass)
|
||||
(void)inv.fixedStepInX(SkIntToScalar(y), &dx, &dy);
|
||||
else
|
||||
{
|
||||
dx = SkScalarToFixed(inv.getScaleX());
|
||||
dy = SkScalarToFixed(inv.getSkewY());
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
int ix = fx >> 16;
|
||||
int iy = fy >> 16;
|
||||
|
||||
const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
|
||||
|
||||
p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const char*)srcPixels +
|
||||
SkClampMax(iy, srcMaxY) * srcRB)) +
|
||||
SkClampMax(ix, srcMaxX);
|
||||
if ((unsigned)ix < srcMaxX)
|
||||
p01 += 1;
|
||||
p10 = p00;
|
||||
p11 = p01;
|
||||
if ((unsigned)iy < srcMaxY)
|
||||
{
|
||||
p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p10 + srcRB);
|
||||
p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p11 + srcRB);
|
||||
}
|
||||
|
||||
SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
|
||||
uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p00)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p01)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p10)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p11)));
|
||||
*dstC++ = expanded_rgb16_to_8888(c, alpha);
|
||||
|
||||
fx += dx;
|
||||
fy += dy;
|
||||
} while (--count != 0);
|
||||
}
|
||||
BILERP_BITMAP16_SHADER_POSTAMBLE(srcBitmap);
|
||||
}
|
||||
|
||||
virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count)
|
||||
{
|
||||
SkASSERT(count > 0);
|
||||
|
||||
const SkMatrix& inv = this->getTotalInverse();
|
||||
const SkBitmap& srcBitmap = this->getSrcBitmap();
|
||||
unsigned srcMaxX = srcBitmap.width() - 1;
|
||||
unsigned srcMaxY = srcBitmap.height() - 1;
|
||||
unsigned srcRB = srcBitmap.rowBytes();
|
||||
|
||||
BILERP_BITMAP16_SHADER_PREAMBLE(srcBitmap);
|
||||
|
||||
const SkFilterProc* proc_table = SkGetBilinearFilterProcTable();
|
||||
const BILERP_BITMAP16_SHADER_TYPE* srcPixels = (const BILERP_BITMAP16_SHADER_TYPE*)srcBitmap.getPixels();
|
||||
|
||||
if (this->getInverseClass() == kPerspective_MatrixClass)
|
||||
{
|
||||
SkPerspIter iter(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, count);
|
||||
while ((count = iter.next()) != 0)
|
||||
{
|
||||
const SkFixed* srcXY = iter.getXY();
|
||||
while (--count >= 0)
|
||||
{
|
||||
SkFixed fx = *srcXY++ - SK_FixedHalf;
|
||||
SkFixed fy = *srcXY++ - SK_FixedHalf;
|
||||
int ix = fx >> 16;
|
||||
int iy = fy >> 16;
|
||||
|
||||
const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
|
||||
|
||||
p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const char*)srcPixels +
|
||||
SkClampMax(iy, srcMaxY) * srcRB)) +
|
||||
SkClampMax(ix, srcMaxX);
|
||||
if ((unsigned)ix < srcMaxX)
|
||||
p01 += 1;
|
||||
p10 = p00;
|
||||
p11 = p01;
|
||||
if ((unsigned)iy < srcMaxY)
|
||||
{
|
||||
p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p10 + srcRB);
|
||||
p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p11 + srcRB);
|
||||
}
|
||||
|
||||
SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
|
||||
uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p00)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p01)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p10)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p11)));
|
||||
*dstC++ = SkCompact_rgb_16(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // linear case
|
||||
{
|
||||
SkFixed fx, fy, dx, dy;
|
||||
|
||||
// now init fx, fy, dx, dy
|
||||
{
|
||||
SkPoint srcPt;
|
||||
this->getInverseMapPtProc()(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, &srcPt);
|
||||
|
||||
fx = SkScalarToFixed(srcPt.fX) - SK_FixedHalf;
|
||||
fy = SkScalarToFixed(srcPt.fY) - SK_FixedHalf;
|
||||
|
||||
if (this->getInverseClass() == kFixedStepInX_MatrixClass)
|
||||
(void)inv.fixedStepInX(SkIntToScalar(y), &dx, &dy);
|
||||
else
|
||||
{
|
||||
dx = SkScalarToFixed(inv.getScaleX());
|
||||
dy = SkScalarToFixed(inv.getSkewY());
|
||||
}
|
||||
}
|
||||
|
||||
do {
|
||||
int ix = fx >> 16;
|
||||
int iy = fy >> 16;
|
||||
|
||||
const BILERP_BITMAP16_SHADER_TYPE *p00, *p01, *p10, *p11;
|
||||
|
||||
p00 = p01 = ((const BILERP_BITMAP16_SHADER_TYPE*)((const char*)srcPixels +
|
||||
SkClampMax(iy, srcMaxY) * srcRB)) +
|
||||
SkClampMax(ix, srcMaxX);
|
||||
if ((unsigned)ix < srcMaxX)
|
||||
p01 += 1;
|
||||
p10 = p00;
|
||||
p11 = p01;
|
||||
if ((unsigned)iy < srcMaxY)
|
||||
{
|
||||
p10 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p10 + srcRB);
|
||||
p11 = (const BILERP_BITMAP16_SHADER_TYPE*)((const char*)p11 + srcRB);
|
||||
}
|
||||
|
||||
SkFilterProc proc = SkGetBilinearFilterProc(proc_table, fx, fy);
|
||||
uint32_t c = proc(SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p00)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p01)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p10)),
|
||||
SkExpand_rgb_16(BILERP_BITMAP16_SHADER_PIXEL(*p11)));
|
||||
*dstC++ = SkCompact_rgb_16(c);
|
||||
|
||||
fx += dx;
|
||||
fy += dy;
|
||||
} while (--count != 0);
|
||||
}
|
||||
BILERP_BITMAP16_SHADER_POSTAMBLE(srcBitmap);
|
||||
}
|
||||
};
|
||||
|
||||
#undef BILERP_BITMAP16_SHADER_CLASS
|
||||
#undef BILERP_BITMAP16_SHADER_TYPE
|
||||
#undef BILERP_BITMAP16_SHADER_PREAMBLE
|
||||
#undef BILERP_BITMAP16_SHADER_PIXEL
|
||||
#undef BILERP_BITMAP16_SHADER_POSTAMBLE
|
@ -1,306 +0,0 @@
|
||||
|
||||
/*
|
||||
* Copyright 2006 The Android Open Source Project
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license that can be
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#ifndef NOFILTER_BITMAP_SHADER_PREAMBLE
|
||||
#define NOFILTER_BITMAP_SHADER_PREAMBLE(bitmap, rb)
|
||||
#endif
|
||||
#ifndef NOFILTER_BITMAP_SHADER_POSTAMBLE
|
||||
#define NOFILTER_BITMAP_SHADER_POSTAMBLE(bitmap)
|
||||
#endif
|
||||
#ifndef NOFILTER_BITMAP_SHADER_PREAMBLE16
|
||||
#define NOFILTER_BITMAP_SHADER_PREAMBLE16(bitmap, rb)
|
||||
#endif
|
||||
#ifndef NOFILTER_BITMAP_SHADER_POSTAMBLE16
|
||||
#define NOFILTER_BITMAP_SHADER_POSTAMBLE16(bitmap)
|
||||
#endif
|
||||
|
||||
class NOFILTER_BITMAP_SHADER_CLASS : public HasSpan16_Sampler_BitmapShader {
|
||||
public:
|
||||
NOFILTER_BITMAP_SHADER_CLASS(const SkBitmap& src)
|
||||
: HasSpan16_Sampler_BitmapShader(src, false,
|
||||
NOFILTER_BITMAP_SHADER_TILEMODE,
|
||||
NOFILTER_BITMAP_SHADER_TILEMODE)
|
||||
{
|
||||
}
|
||||
|
||||
virtual bool setContext(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix)
|
||||
{
|
||||
if (!this->INHERITED::setContext(device, paint, matrix))
|
||||
return false;
|
||||
|
||||
#ifdef NOFILTER_BITMAP_SHADER_USE_UNITINVERSE
|
||||
this->computeUnitInverse();
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual void shadeSpan(int x, int y, SkPMColor dstC[], int count)
|
||||
{
|
||||
SkASSERT(count > 0);
|
||||
|
||||
#ifdef NOFILTER_BITMAP_SHADER_SPRITEPROC32
|
||||
if ((this->getTotalInverse().getType() & ~SkMatrix::kTranslate_Mask) == 0)
|
||||
{
|
||||
NOFILTER_BITMAP_SHADER_SPRITEPROC32(this, x, y, dstC, count);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
unsigned scale = SkAlpha255To256(this->getPaintAlpha());
|
||||
#ifdef NOFILTER_BITMAP_SHADER_USE_UNITINVERSE
|
||||
const SkMatrix& inv = this->getUnitInverse();
|
||||
SkMatrix::MapPtProc invProc = this->getUnitInverseProc();
|
||||
#else
|
||||
const SkMatrix& inv = this->getTotalInverse();
|
||||
SkMatrix::MapPtProc invProc = this->getInverseMapPtProc();
|
||||
#endif
|
||||
const SkBitmap& srcBitmap = this->getSrcBitmap();
|
||||
unsigned srcMaxX = srcBitmap.width() - 1;
|
||||
unsigned srcMaxY = srcBitmap.height() - 1;
|
||||
unsigned srcRB = srcBitmap.rowBytes();
|
||||
SkFixed fx, fy, dx, dy;
|
||||
|
||||
const NOFILTER_BITMAP_SHADER_TYPE* srcPixels = (const NOFILTER_BITMAP_SHADER_TYPE*)srcBitmap.getPixels();
|
||||
NOFILTER_BITMAP_SHADER_PREAMBLE(srcBitmap, srcRB);
|
||||
|
||||
if (this->getInverseClass() == kPerspective_MatrixClass)
|
||||
{
|
||||
SkPerspIter iter(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, count);
|
||||
while ((count = iter.next()) != 0)
|
||||
{
|
||||
const SkFixed* srcXY = iter.getXY();
|
||||
|
||||
/* Do I need this?
|
||||
#ifndef NOFILTER_BITMAP_SHADER_USE_UNITINVERSE
|
||||
fx >>= level;
|
||||
fy >>= level;
|
||||
#endif
|
||||
*/
|
||||
if (256 == scale)
|
||||
{
|
||||
while (--count >= 0)
|
||||
{
|
||||
fx = *srcXY++;
|
||||
fy = *srcXY++;
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
unsigned y = NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY);
|
||||
*dstC++ = NOFILTER_BITMAP_SHADER_SAMPLE_XY(srcPixels, x, y, srcRB);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
while (--count >= 0)
|
||||
{
|
||||
fx = *srcXY++;
|
||||
fy = *srcXY++;
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
unsigned y = NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY);
|
||||
uint32_t c = NOFILTER_BITMAP_SHADER_SAMPLE_XY(srcPixels, x, y, srcRB);
|
||||
*dstC++ = SkAlphaMulQ(c, scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// now init fx, fy, dx, dy
|
||||
{
|
||||
SkPoint srcPt;
|
||||
invProc(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, &srcPt);
|
||||
|
||||
fx = SkScalarToFixed(srcPt.fX);
|
||||
fy = SkScalarToFixed(srcPt.fY);
|
||||
|
||||
if (this->getInverseClass() == kFixedStepInX_MatrixClass)
|
||||
(void)inv.fixedStepInX(SkIntToScalar(y), &dx, &dy);
|
||||
else
|
||||
{
|
||||
dx = SkScalarToFixed(inv.getScaleX());
|
||||
dy = SkScalarToFixed(inv.getSkewY());
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NOFILTER_BITMAP_SHADER_USE_UNITINVERSE
|
||||
{ int level = this->getMipLevel() >> 16;
|
||||
fx >>= level;
|
||||
fy >>= level;
|
||||
dx >>= level;
|
||||
dy >>= level;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (dy == 0)
|
||||
{
|
||||
int y_index = NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY);
|
||||
// SkDEBUGF(("fy = %g, srcMaxY = %d, y_index = %d\n", SkFixedToFloat(fy), srcMaxY, y_index));
|
||||
srcPixels = (const NOFILTER_BITMAP_SHADER_TYPE*)((const char*)srcPixels + y_index * srcRB);
|
||||
if (scale == 256)
|
||||
while (--count >= 0)
|
||||
{
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
fx += dx;
|
||||
*dstC++ = NOFILTER_BITMAP_SHADER_SAMPLE_X(srcPixels, x);
|
||||
}
|
||||
else
|
||||
while (--count >= 0)
|
||||
{
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
SkPMColor c = NOFILTER_BITMAP_SHADER_SAMPLE_X(srcPixels, x);
|
||||
fx += dx;
|
||||
*dstC++ = SkAlphaMulQ(c, scale);
|
||||
}
|
||||
}
|
||||
else // dy != 0
|
||||
{
|
||||
if (scale == 256)
|
||||
while (--count >= 0)
|
||||
{
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
unsigned y = NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY);
|
||||
fx += dx;
|
||||
fy += dy;
|
||||
*dstC++ = NOFILTER_BITMAP_SHADER_SAMPLE_XY(srcPixels, x, y, srcRB);
|
||||
}
|
||||
else
|
||||
while (--count >= 0)
|
||||
{
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
unsigned y = NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY);
|
||||
SkPMColor c = NOFILTER_BITMAP_SHADER_SAMPLE_XY(srcPixels, x, y, srcRB);
|
||||
fx += dx;
|
||||
fy += dy;
|
||||
*dstC++ = SkAlphaMulQ(c, scale);
|
||||
}
|
||||
}
|
||||
|
||||
NOFILTER_BITMAP_SHADER_POSTAMBLE(srcBitmap);
|
||||
}
|
||||
|
||||
virtual void shadeSpan16(int x, int y, uint16_t dstC[], int count)
|
||||
{
|
||||
SkASSERT(count > 0);
|
||||
SkASSERT(this->getFlags() & SkShader::kHasSpan16_Flag);
|
||||
|
||||
#ifdef NOFILTER_BITMAP_SHADER_SPRITEPROC16
|
||||
if ((this->getTotalInverse().getType() & ~SkMatrix::kTranslate_Mask) == 0)
|
||||
{
|
||||
NOFILTER_BITMAP_SHADER_SPRITEPROC16(this, x, y, dstC, count);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef NOFILTER_BITMAP_SHADER_USE_UNITINVERSE
|
||||
const SkMatrix& inv = this->getUnitInverse();
|
||||
SkMatrix::MapPtProc invProc = this->getUnitInverseProc();
|
||||
#else
|
||||
const SkMatrix& inv = this->getTotalInverse();
|
||||
SkMatrix::MapPtProc invProc = this->getInverseMapPtProc();
|
||||
#endif
|
||||
const SkBitmap& srcBitmap = this->getSrcBitmap();
|
||||
unsigned srcMaxX = srcBitmap.width() - 1;
|
||||
unsigned srcMaxY = srcBitmap.height() - 1;
|
||||
unsigned srcRB = srcBitmap.rowBytes();
|
||||
SkFixed fx, fy, dx, dy;
|
||||
|
||||
const NOFILTER_BITMAP_SHADER_TYPE* srcPixels = (const NOFILTER_BITMAP_SHADER_TYPE*)srcBitmap.getPixels();
|
||||
NOFILTER_BITMAP_SHADER_PREAMBLE16(srcBitmap, srcRB);
|
||||
|
||||
if (this->getInverseClass() == kPerspective_MatrixClass)
|
||||
{
|
||||
SkPerspIter iter(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, count);
|
||||
while ((count = iter.next()) != 0)
|
||||
{
|
||||
const SkFixed* srcXY = iter.getXY();
|
||||
|
||||
while (--count >= 0)
|
||||
{
|
||||
fx = *srcXY++;
|
||||
fy = *srcXY++;
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
unsigned y = NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY);
|
||||
*dstC++ = NOFILTER_BITMAP_SHADER_SAMPLE_XY16(srcPixels, x, y, srcRB);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// now init fx, fy, dx, dy
|
||||
{
|
||||
SkPoint srcPt;
|
||||
invProc(inv, SkIntToScalar(x) + SK_ScalarHalf,
|
||||
SkIntToScalar(y) + SK_ScalarHalf, &srcPt);
|
||||
|
||||
fx = SkScalarToFixed(srcPt.fX);
|
||||
fy = SkScalarToFixed(srcPt.fY);
|
||||
|
||||
if (this->getInverseClass() == kFixedStepInX_MatrixClass)
|
||||
(void)inv.fixedStepInX(SkIntToScalar(y), &dx, &dy);
|
||||
else
|
||||
{
|
||||
dx = SkScalarToFixed(inv.getScaleX());
|
||||
dy = SkScalarToFixed(inv.getSkewY());
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef NOFILTER_BITMAP_SHADER_USE_UNITINVERSE
|
||||
{ int level = this->getMipLevel() >> 16;
|
||||
fx >>= level;
|
||||
fy >>= level;
|
||||
dx >>= level;
|
||||
dy >>= level;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (dy == 0)
|
||||
{
|
||||
srcPixels = (const NOFILTER_BITMAP_SHADER_TYPE*)((const char*)srcPixels + NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY) * srcRB);
|
||||
do {
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
fx += dx;
|
||||
*dstC++ = NOFILTER_BITMAP_SHADER_SAMPLE_X16(srcPixels, x);
|
||||
} while (--count != 0);
|
||||
}
|
||||
else // dy != 0
|
||||
{
|
||||
do {
|
||||
unsigned x = NOFILTER_BITMAP_SHADER_TILEPROC(fx, srcMaxX);
|
||||
unsigned y = NOFILTER_BITMAP_SHADER_TILEPROC(fy, srcMaxY);
|
||||
fx += dx;
|
||||
fy += dy;
|
||||
*dstC++ = NOFILTER_BITMAP_SHADER_SAMPLE_XY16(srcPixels, x, y, srcRB);
|
||||
} while (--count != 0);
|
||||
}
|
||||
|
||||
NOFILTER_BITMAP_SHADER_POSTAMBLE16(srcBitmap);
|
||||
}
|
||||
private:
|
||||
typedef HasSpan16_Sampler_BitmapShader INHERITED;
|
||||
};
|
||||
|
||||
#undef NOFILTER_BITMAP_SHADER_CLASS
|
||||
#undef NOFILTER_BITMAP_SHADER_TYPE
|
||||
#undef NOFILTER_BITMAP_SHADER_PREAMBLE
|
||||
#undef NOFILTER_BITMAP_SHADER_POSTAMBLE
|
||||
#undef NOFILTER_BITMAP_SHADER_SAMPLE_X //(x)
|
||||
#undef NOFILTER_BITMAP_SHADER_SAMPLE_XY //(x, y, rowBytes)
|
||||
#undef NOFILTER_BITMAP_SHADER_TILEMODE
|
||||
#undef NOFILTER_BITMAP_SHADER_TILEPROC
|
||||
|
||||
#undef NOFILTER_BITMAP_SHADER_PREAMBLE16
|
||||
#undef NOFILTER_BITMAP_SHADER_POSTAMBLE16
|
||||
#undef NOFILTER_BITMAP_SHADER_SAMPLE_X16 //(x)
|
||||
#undef NOFILTER_BITMAP_SHADER_SAMPLE_XY16 //(x, y, rowBytes)
|
||||
|
||||
#undef NOFILTER_BITMAP_SHADER_USE_UNITINVERSE
|
||||
#undef NOFILTER_BITMAP_SHADER_SPRITEPROC16
|
||||
#undef NOFILTER_BITMAP_SHADER_SPRITEPROC32
|
Loading…
Reference in New Issue
Block a user