Files
@ r9583:b6e25a00b908
Branch filter:
Location: cpp/openttd-patchpack/source/src/blitter/32bpp_simple.cpp - annotation
r9583:b6e25a00b908
3.4 KiB
text/x-c
(svn r13621) -Fix: building roadbits in the wrong direction on bridges or building roadbits from underneath the bridge to the bridgehead is impossible, so don't silently ignore that error when building over houses and industries is not ignored.
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 | r8091:d63ba361d6b8 r8091:d63ba361d6b8 r9111:983de9c5a848 r9111:983de9c5a848 r6889:9eefa1ce35c6 r8123:dde0a9a84019 r8123:dde0a9a84019 r6889:9eefa1ce35c6 r8264:d493cb51fe8a r8264:d493cb51fe8a 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 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 r6969:c3926a150708 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 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 r6889:9eefa1ce35c6 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 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6959:d325e8e89ec3 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 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6937:bea726150bf3 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 r6889:9eefa1ce35c6 | /* $Id$ */
/** @file 32bpp_simple.cpp Implementation of the simple 32 bpp blitter. */
#include "../stdafx.h"
#include "../gfx_func.h"
#include "../zoom_func.h"
#include "../debug.h"
#include "32bpp_simple.hpp"
#include "../table/sprites.h"
static FBlitter_32bppSimple iFBlitter_32bppSimple;
void Blitter_32bppSimple::Draw(Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)
{
const SpriteLoader::CommonPixel *src, *src_line;
uint32 *dst, *dst_line;
/* Find where to start reading in the source sprite */
src_line = (const SpriteLoader::CommonPixel *)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->LookupColourInPalette(bp->remap[src->m]), src->a, *dst);
}
break;
case BM_TRANSPARENT:
/* TODO -- We make an assumption here that the remap in fact is transparency, not some color.
* 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 color 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::DrawColorMappingRect(void *dst, int width, int height, int 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_TO_STRUCT_GREY) {
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 color table ('%d')", pal);
}
Sprite *Blitter_32bppSimple::Encode(SpriteLoader::Sprite *sprite, Blitter::AllocatorProc *allocator)
{
Sprite *dest_sprite;
SpriteLoader::CommonPixel *dst;
dest_sprite = (Sprite *)allocator(sizeof(*dest_sprite) + sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
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 = (SpriteLoader::CommonPixel *)dest_sprite->data;
memcpy(dst, sprite->data, sprite->height * sprite->width * sizeof(SpriteLoader::CommonPixel));
for (int i = 0; i < sprite->height * sprite->width; i++) {
if (dst[i].m != 0) {
/* Pre-convert the mapping channel to a RGB value */
uint color = this->LookupColourInPalette(dst[i].m);
dst[i].r = GB(color, 16, 8);
dst[i].g = GB(color, 8, 8);
dst[i].b = GB(color, 0, 8);
}
}
return dest_sprite;
}
|