Files
@ r19164:fb28ade150af
Branch filter:
Location: cpp/openttd-patchpack/source/src/blitter/32bpp_simple.cpp - annotation
r19164:fb28ade150af
4.4 KiB
text/x-c
(svn r24052) -Fix (r23883) [FS#5107]: Imported GRF sounds were inserted into the wrong slots.
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 | r8091:d63ba361d6b8 r8091:d63ba361d6b8 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r12768:980ae0491352 r9111:983de9c5a848 r9111:983de9c5a848 r6889:9eefa1ce35c6 r8123:dde0a9a84019 r8264:d493cb51fe8a r8264:d493cb51fe8a r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r17617:7646682fc2c9 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 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 r6889:9eefa1ce35c6 r6969:c3926a150708 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r11085:c87a330fb4c2 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r11085:c87a330fb4c2 r7552:47c4bace5157 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 r6889:9eefa1ce35c6 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 r11085:c87a330fb4c2 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r17035:6216511eba9e r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r18815:648c3189e61d r11085:c87a330fb4c2 r11085:c87a330fb4c2 r11085:c87a330fb4c2 r18811:79fa62ea3e00 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r18811:79fa62ea3e00 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 | /* $Id$ */
/*
* 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 "32bpp_simple.hpp"
#include "../table/sprites.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;
uint32 *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 = (uint32 *)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_TRANSPARENT:
/* TODO -- We make an assumption here that the remap in fact is transparency, not some colour.
* This is never a problem with the code we produce, but newgrfs can make it fail... or at least:
* we produce a result the newgrf maker didn't expect ;) */
/* 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;
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)
{
uint32 *udst = (uint32 *)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 ('%d')", pal);
}
Sprite *Blitter_32bppSimple::Encode(SpriteLoader::Sprite *sprite, AllocatorProc *allocator)
{
Blitter_32bppSimple::Pixel *dst;
Sprite *dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width * sizeof(*dst));
dest_sprite->height = sprite->height;
dest_sprite->width = sprite->width;
dest_sprite->x_offs = sprite->x_offs;
dest_sprite->y_offs = sprite->y_offs;
dst = (Blitter_32bppSimple::Pixel *)dest_sprite->data;
SpriteLoader::CommonPixel *src = (SpriteLoader::CommonPixel *)sprite->data;
for (int i = 0; i < sprite->height * sprite->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 rgb_max = max(src->r, max(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 */
uint colour = this->AdjustBrightness(this->LookupColourInPalette(src->m), dst[i].v);
dst[i].r = GB(colour, 16, 8);
dst[i].g = GB(colour, 8, 8);
dst[i].b = GB(colour, 0, 8);
dst[i].a = src->a;
dst[i].m = src->m;
}
src++;
}
return dest_sprite;
}
|