/* Image */
/************************************************************************/
-static bool _translucentImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity)
+static bool _translucentImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto dst = &surface->buffer[span->y * surface->stride + span->x];
auto src = image->data + span->x + span->y * image->w; //TODO: need to use image's stride
auto alpha = ALPHA_MULTIPLY(span->coverage, opacity);
}
-static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity)
+static bool _rasterTranslucentImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity)
{
if (surface->compositor) {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentImageRleAlphaMask()");
-// return _translucentImageRleAlphaMask(surface, rle, image, opacity);
+// return _translucentImageRleAlphaMask(surface, image, opacity);
}
if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentImageRleInvAlphaMask()");
-// return _translucentImageRleInvAlphaMask(surface, rle, image, opacity);
+// return _translucentImageRleInvAlphaMask(surface, image, opacity);
}
}
- return _translucentImageRle(surface, rle, image, opacity);
+ return _translucentImageRle(surface, image, opacity);
}
-static bool _translucentImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity, const Matrix* itransform)
+static bool _translucentImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity, const Matrix* itransform)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
auto img = image->data;
auto w = image->w;
auto h = image->h;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto ey1 = span->y * itransform->e12 + itransform->e13;
auto ey2 = span->y * itransform->e22 + itransform->e23;
auto dst = &surface->buffer[span->y * surface->stride + span->x];
}
-static bool _rasterTranslucentImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity, const Matrix* itransform)
+static bool _rasterTranslucentImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity, const Matrix* itransform)
{
if (surface->compositor) {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentImageRleAlphaMask()");
-// return _translucentImageRleAlphaMask(surface, rle, image, opacity, itransform);
+// return _translucentImageRleAlphaMask(surface, image, opacity, itransform);
}
if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentImageRleInvAlphaMask()");
-// return _translucentImageRleInvAlphaMask(surface, rle, image, opacity, itransform);
+// return _translucentImageRleInvAlphaMask(surface, image, opacity, itransform);
}
}
- return _translucentImageRle(surface, rle, image, opacity, itransform);
+ return _translucentImageRle(surface, image, opacity, itransform);
}
-static bool _translucentUpScaleImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity, const Matrix* itransform)
+static bool _translucentUpScaleImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity, const Matrix* itransform)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
auto img = image->data;
auto w = image->w;
auto h = image->h;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto ey1 = span->y * itransform->e12 + itransform->e13;
auto ey2 = span->y * itransform->e22 + itransform->e23;
auto dst = &surface->buffer[span->y * surface->stride + span->x];
}
-static bool _rasterTranslucentUpScaleImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity, const Matrix* itransform)
+static bool _rasterTranslucentUpScaleImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity, const Matrix* itransform)
{
if (surface->compositor) {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentUpScaleImageRleAlphaMask()");
-// return _translucentUpScaleImageRleAlphaMask(surface, rle, image, opacity, itransform);
+// return _translucentUpScaleImageRleAlphaMask(surface, image, opacity, itransform);
}
if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentUpScaleImageRleInvAlphaMask()");
-// return _translucentUpScaleImageRleInvAlphaMask(surface, rle, image, opacity, itransform);
+// return _translucentUpScaleImageRleInvAlphaMask(surface, image, opacity, itransform);
}
}
- return _translucentUpScaleImageRle(surface, rle, image, opacity, itransform);
+ return _translucentUpScaleImageRle(surface, image, opacity, itransform);
}
-static bool _translucentDownScaleImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity, const Matrix* itransform, float scale)
+static bool _translucentDownScaleImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity, const Matrix* itransform, float scale)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
auto img = image->data;
auto w = image->w;
auto h = image->h;
auto halfScale = static_cast<uint32_t>(0.5f / scale);
if (halfScale == 0) halfScale = 1;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto ey1 = span->y * itransform->e12 + itransform->e13;
auto ey2 = span->y * itransform->e22 + itransform->e23;
auto dst = &surface->buffer[span->y * surface->stride + span->x];
}
-static bool _rasterTranslucentDownScaleImageRle(SwSurface* surface, const SwRleData* rle, const SwImage* image, uint32_t opacity, const Matrix* itransform, float scale)
+static bool _rasterTranslucentDownScaleImageRle(SwSurface* surface, const SwImage* image, uint32_t opacity, const Matrix* itransform, float scale)
{
if (surface->compositor) {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentDownScaleImageRleAlphaMask()");
-// return _translucentDownScaleImageRleAlphaMask(surface, rle, image, opacity, itransform, scale);
+// return _translucentDownScaleImageRleAlphaMask(surface, image, opacity, itransform, scale);
}
if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
TVGERR("SW_ENGINE", "Missing Implementation _translucentDownScaleImageRleInvAlphaMask()");
-// return _translucentDownScaleImageRleInvAlphaMask(surface, rle, image, opacity, itransform, scale);
+// return _translucentDownScaleImageRleInvAlphaMask(surface, image, opacity, itransform, scale);
}
}
- return _translucentDownScaleImageRle(surface, rle, image, opacity, itransform, scale);
+ return _translucentDownScaleImageRle(surface, image, opacity, itransform, scale);
}
-static bool _rasterImageRle(SwSurface* surface, SwRleData* rle, const SwImage* image)
+static bool _rasterImageRle(SwSurface* surface, const SwImage* image)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto dst = &surface->buffer[span->y * surface->stride + span->x];
auto src = image->data + span->x + span->y * image->w; //TODO: need to use image's stride
for (uint32_t x = 0; x < span->len; ++x, ++dst, ++src) {
}
-static bool _rasterImageRle(SwSurface* surface, SwRleData* rle, const SwImage* image, const Matrix* itransform)
+static bool _rasterImageRle(SwSurface* surface, const SwImage* image, const Matrix* itransform)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
auto img = image->data;
auto w = image->w;
auto h = image->h;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto ey1 = span->y * itransform->e12 + itransform->e13;
auto ey2 = span->y * itransform->e22 + itransform->e23;
auto dst = &surface->buffer[span->y * surface->stride + span->x];
}
-static bool _rasterUpScaleImageRle(SwSurface* surface, SwRleData* rle, const SwImage* image, const Matrix* itransform)
+static bool _rasterUpScaleImageRle(SwSurface* surface, const SwImage* image, const Matrix* itransform)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
auto img = image->data;
auto w = image->w;
auto h = image->h;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto ey1 = span->y * itransform->e12 + itransform->e13;
auto ey2 = span->y * itransform->e22 + itransform->e23;
auto dst = &surface->buffer[span->y * surface->stride + span->x];
}
-static bool _rasterDownScaleImageRle(SwSurface* surface, SwRleData* rle, const SwImage* image, const Matrix* itransform, float scale)
+static bool _rasterDownScaleImageRle(SwSurface* surface, const SwImage* image, const Matrix* itransform, float scale)
{
- auto span = rle->spans;
+ auto span = image->rle->spans;
auto img = image->data;
auto w = image->w;
auto h = image->h;
auto halfScale = static_cast<uint32_t>(0.5f / scale);
if (halfScale == 0) halfScale = 1;
- for (uint32_t i = 0; i < rle->size; ++i, ++span) {
+ for (uint32_t i = 0; i < image->rle->size; ++i, ++span) {
auto ey1 = span->y * itransform->e12 + itransform->e13;
auto ey2 = span->y * itransform->e22 + itransform->e23;
auto dst = &surface->buffer[span->y * surface->stride + span->x];
if (image->rle) {
if (transformed) {
if (translucent) {
- if (fabsf(scale - 1.0f) <= FLT_EPSILON) return _rasterTranslucentImageRle(surface, image->rle, image, opacity, &itransform);
- else if (scale < downScaleTolerance) return _rasterTranslucentDownScaleImageRle(surface, image->rle, image, opacity, &itransform, scale);
- else return _rasterTranslucentUpScaleImageRle(surface, image->rle, image, opacity, &itransform);
+ if (fabsf(scale - 1.0f) <= FLT_EPSILON) return _rasterTranslucentImageRle(surface, image, opacity, &itransform);
+ else if (scale < downScaleTolerance) return _rasterTranslucentDownScaleImageRle(surface, image, opacity, &itransform, scale);
+ else return _rasterTranslucentUpScaleImageRle(surface, image, opacity, &itransform);
} else {
- if (fabsf(scale - 1.0f) <= FLT_EPSILON) return _rasterImageRle(surface, image->rle, image, &itransform);
- else if (scale < downScaleTolerance) return _rasterDownScaleImageRle(surface, image->rle, image, &itransform, scale);
- else return _rasterUpScaleImageRle(surface, image->rle, image, &itransform);
+ if (fabsf(scale - 1.0f) <= FLT_EPSILON) return _rasterImageRle(surface, image, &itransform);
+ else if (scale < downScaleTolerance) return _rasterDownScaleImageRle(surface, image, &itransform, scale);
+ else return _rasterUpScaleImageRle(surface, image, &itransform);
}
//Fast track
//OPTIMIZE ME: Support non transformed image. Only shifted image can use these routines.
} else {
- if (translucent) return _rasterTranslucentImageRle(surface, image->rle, image, opacity);
- return _rasterImageRle(surface, image->rle, image);
+ if (translucent) return _rasterTranslucentImageRle(surface, image, opacity);
+ return _rasterImageRle(surface, image);
}
//Whole Image
} else {