};
MipMapsStatus fMipMapsStatus;
- // These two shift a fixed-point value into normalized coordinates
- // for this texture if the texture is power of two sized.
- int fShiftFixedX;
- int fShiftFixedY;
friend class GrTexturePriv;
GrTexturePriv::ComputeScratchKey(desc, &key);
this->setScratchKey(key);
}
- // only make sense if alloc size is pow2
- fShiftFixedX = 31 - SkCLZ(fDesc.fWidth);
- fShiftFixedY = 31 - SkCLZ(fDesc.fHeight);
}
void GrTexturePriv::ComputeScratchKey(const GrSurfaceDesc& desc, GrScratchKey* key) {
static void ComputeScratchKey(const GrSurfaceDesc&, GrScratchKey*);
- // TODO: Move this logic and the shift values out of here and to the callers.
- SkFixed normalizeFixedX(SkFixed x) const {
- SkASSERT(SkIsPow2(fTexture->fDesc.fWidth));
- return x >> fTexture->fShiftFixedX;
- }
-
- SkFixed normalizeFixedY(SkFixed y) const {
- SkASSERT(SkIsPow2(fTexture->fDesc.fHeight));
- return y >> fTexture->fShiftFixedY;
- }
-
private:
GrTexturePriv(GrTexture* texture) : fTexture(texture) { }
GrTexturePriv(const GrTexturePriv& that) : fTexture(that.fTexture) { }
width *= invScale;
height *= invScale;
- SkFixed tx = SkIntToFixed(pathData->fAtlasLocation.fX);
- SkFixed ty = SkIntToFixed(pathData->fAtlasLocation.fY);
- SkFixed tw = SkScalarToFixed(pathData->fBounds.width());
- SkFixed th = SkScalarToFixed(pathData->fBounds.height());
-
SkPoint* positions = reinterpret_cast<SkPoint*>(offset);
// vertex positions
*colorPtr = color;
}
+ const SkScalar tx = SkIntToScalar(pathData->fAtlasLocation.fX);
+ const SkScalar ty = SkIntToScalar(pathData->fAtlasLocation.fY);
+
// vertex texture coords
SkPoint* textureCoords = (SkPoint*)(offset + sizeof(SkPoint) + sizeof(GrColor));
- textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normalizeFixedX(tx)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedX(tx + tw)),
- SkFixedToFloat(texture->texturePriv().normalizeFixedY(ty + th)),
+ textureCoords->setRectFan(tx / texture->width(),
+ ty / texture->height(),
+ (tx + pathData->fBounds.width()) / texture->width(),
+ (ty + pathData->fBounds.height()) / texture->height(),
vertexStride);
}