Files
@ r28356:5479dee3539c
Branch filter:
Location: cpp/openttd-patchpack/source/src/blitter/32bpp_simple.cpp - annotation
r28356:5479dee3539c
5.0 KiB
text/x-c
Fix: [CI] patch in SHF_COMPRESSED symbol for our Linux Generic binaries (#11651)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9111:983de9c5a848 r9111:983de9c5a848 r6889:9eefa1ce35c6 r8123:dde0a9a84019 r28330:f8a96633c381 r8264:d493cb51fe8a r8264:d493cb51fe8a r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r21383:942c32fb8b0e r21383:942c32fb8b0e r17617:7646682fc2c9 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r19212:c8e0af51e6c1 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r19212:c8e0af51e6c1 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6969:c3926a150708 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r27737:728d55b97775 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r21364:fc9d03d2e2b8 r21823:934ee4e81d60 r21823:934ee4e81d60 r21823:934ee4e81d60 r21823:934ee4e81d60 r21823:934ee4e81d60 r21823:934ee4e81d60 r6889:9eefa1ce35c6 r28330:f8a96633c381 r28330:f8a96633c381 r28330:f8a96633c381 r28330:f8a96633c381 r28330:f8a96633c381 r6889:9eefa1ce35c6 r28330:f8a96633c381 r28330:f8a96633c381 r28330:f8a96633c381 r28330:f8a96633c381 r28330:f8a96633c381 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6969:c3926a150708 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r14310:91a5cd71c4e6 r6889:9eefa1ce35c6 r19212:c8e0af51e6c1 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r7552:47c4bace5157 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6959:d325e8e89ec3 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r17609:46318fd6504a r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6959:d325e8e89ec3 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r25655:1030dcb7eb52 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r28313:4d0ad08733f5 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r28313:4d0ad08733f5 r6889:9eefa1ce35c6 r28313:4d0ad08733f5 r28313:4d0ad08733f5 r28313:4d0ad08733f5 r28313:4d0ad08733f5 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r28313:4d0ad08733f5 r6889:9eefa1ce35c6 r28313:4d0ad08733f5 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r27737:728d55b97775 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r19212:c8e0af51e6c1 r19212:c8e0af51e6c1 r19212:c8e0af51e6c1 r19212:c8e0af51e6c1 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 | /*
* This file is part of OpenTTD.
* OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
*/
/** @file 32bpp_simple.cpp Implementation of the simple 32 bpp blitter. */
#include "../stdafx.h"
#include "../zoom_func.h"
#include "../palette_func.h"
#include "32bpp_simple.hpp"
#include "../table/sprites.h"
#include "../safeguards.h"
/** Instantiation of the simple 32bpp blitter factory. */
static FBlitter_32bppSimple iFBlitter_32bppSimple;
void Blitter_32bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
{
const Blitter_32bppSimple::Pixel *src, *src_line;
Colour *dst, *dst_line;
/* Find where to start reading in the source sprite */
src_line = (const Blitter_32bppSimple::Pixel *)bp->sprite + (bp->skip_top * bp->sprite_width + bp->skip_left) * ScaleByZoom(1, zoom);
dst_line = (Colour *)bp->dst + bp->top * bp->pitch + bp->left;
for (int y = 0; y < bp->height; y++) {
dst = dst_line;
dst_line += bp->pitch;
src = src_line;
src_line += bp->sprite_width * ScaleByZoom(1, zoom);
for (int x = 0; x < bp->width; x++) {
switch (mode) {
case BM_COLOUR_REMAP:
/* In case the m-channel is zero, do not remap this pixel in any way */
if (src->m == 0) {
if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
} else {
if (bp->remap[src->m] != 0) *dst = ComposeColourPA(this->AdjustBrightness(this->LookupColourInPalette(bp->remap[src->m]), src->v), src->a, *dst);
}
break;
case BM_CRASH_REMAP:
if (src->m == 0) {
if (src->a != 0) {
uint8_t g = MakeDark(src->r, src->g, src->b);
*dst = ComposeColourRGBA(g, g, g, src->a, *dst);
}
} else {
if (bp->remap[src->m] != 0) *dst = ComposeColourPA(this->AdjustBrightness(this->LookupColourInPalette(bp->remap[src->m]), src->v), src->a, *dst);
}
break;
case BM_BLACK_REMAP:
if (src->a != 0) {
*dst = Colour(0, 0, 0);
}
break;
case BM_TRANSPARENT:
/* Make the current colour a bit more black, so it looks like this image is transparent */
if (src->a != 0) {
*dst = MakeTransparent(*dst, 192);
}
break;
case BM_TRANSPARENT_REMAP:
/* Apply custom transparency remap. */
if (src->a != 0) {
*dst = this->LookupColourInPalette(bp->remap[GetNearestColourIndex(*dst)]);
}
break;
default:
if (src->a != 0) *dst = ComposeColourRGBA(src->r, src->g, src->b, src->a, *dst);
break;
}
dst++;
src += ScaleByZoom(1, zoom);
}
}
}
void Blitter_32bppSimple::DrawColourMappingRect(void *dst, int width, int height, PaletteID pal)
{
Colour *udst = (Colour *)dst;
if (pal == PALETTE_TO_TRANSPARENT) {
do {
for (int i = 0; i != width; i++) {
*udst = MakeTransparent(*udst, 154);
udst++;
}
udst = udst - width + _screen.pitch;
} while (--height);
return;
}
if (pal == PALETTE_NEWSPAPER) {
do {
for (int i = 0; i != width; i++) {
*udst = MakeGrey(*udst);
udst++;
}
udst = udst - width + _screen.pitch;
} while (--height);
return;
}
Debug(misc, 0, "32bpp blitter doesn't know how to draw this colour table ('{}')", pal);
}
Sprite *Blitter_32bppSimple::Encode(const SpriteLoader::SpriteCollection &sprite, AllocatorProc *allocator)
{
Blitter_32bppSimple::Pixel *dst;
Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + (size_t)sprite[ZOOM_LVL_NORMAL].height * (size_t)sprite[ZOOM_LVL_NORMAL].width * sizeof(*dst));
dest_sprite->height = sprite[ZOOM_LVL_NORMAL].height;
dest_sprite->width = sprite[ZOOM_LVL_NORMAL].width;
dest_sprite->x_offs = sprite[ZOOM_LVL_NORMAL].x_offs;
dest_sprite->y_offs = sprite[ZOOM_LVL_NORMAL].y_offs;
dst = (Blitter_32bppSimple::Pixel *)dest_sprite->data;
SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite[ZOOM_LVL_NORMAL].data;
for (int i = 0; i < sprite[ZOOM_LVL_NORMAL].height * sprite[ZOOM_LVL_NORMAL].width; i++) {
if (src->m == 0) {
dst[i].r = src->r;
dst[i].g = src->g;
dst[i].b = src->b;
dst[i].a = src->a;
dst[i].m = 0;
dst[i].v = 0;
} else {
/* Get brightest value */
uint8_t rgb_max = std::max({src->r, src->g, src->b});
/* Black pixel (8bpp or old 32bpp image), so use default value */
if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS;
dst[i].v = rgb_max;
/* Pre-convert the mapping channel to a RGB value */
Colour colour = this->AdjustBrightness(this->LookupColourInPalette(src->m), dst[i].v);
dst[i].r = colour.r;
dst[i].g = colour.g;
dst[i].b = colour.b;
dst[i].a = src->a;
dst[i].m = src->m;
}
src++;
}
return dest_sprite;
}
|