mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-06 22:28:56 +00:00
(svn r13564) -Codechange: do not use SetPixel in PaletteAnimate, access destination directly instead. Makes palette animation ~40% faster.
This commit is contained in:
parent
be4e7b86f3
commit
cc2f9187cc
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#include "../stdafx.h"
|
#include "../stdafx.h"
|
||||||
#include "../core/alloc_func.hpp"
|
#include "../core/alloc_func.hpp"
|
||||||
|
#include "../core/math_func.hpp"
|
||||||
#include "../gfx_func.h"
|
#include "../gfx_func.h"
|
||||||
#include "../zoom_func.h"
|
#include "../zoom_func.h"
|
||||||
#include "../debug.h"
|
#include "../debug.h"
|
||||||
@ -291,20 +292,29 @@ int Blitter_32bppAnim::BufferSize(int width, int height)
|
|||||||
void Blitter_32bppAnim::PaletteAnimate(uint start, uint count)
|
void Blitter_32bppAnim::PaletteAnimate(uint start, uint count)
|
||||||
{
|
{
|
||||||
assert(!_screen_disable_anim);
|
assert(!_screen_disable_anim);
|
||||||
uint8 *anim = this->anim_buf;
|
assert(_screen.width == this->anim_buf_width && _screen.height == this->anim_buf_height);
|
||||||
|
|
||||||
/* Never repaint the transparency pixel */
|
/* Never repaint the transparency pixel */
|
||||||
if (start == 0) start++;
|
if (start == 0) {
|
||||||
|
start++;
|
||||||
|
count--;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8 *anim = this->anim_buf;
|
||||||
|
uint32 *dst = (uint32 *)_screen.dst_ptr;
|
||||||
|
|
||||||
/* Let's walk the anim buffer and try to find the pixels */
|
/* Let's walk the anim buffer and try to find the pixels */
|
||||||
for (int y = 0; y < this->anim_buf_height; y++) {
|
for (int y = this->anim_buf_height; y != 0 ; y--) {
|
||||||
for (int x = 0; x < this->anim_buf_width; x++) {
|
for (int x = this->anim_buf_width; x != 0 ; x--) {
|
||||||
if (*anim >= start && *anim <= start + count) {
|
uint colour = *anim;
|
||||||
|
if (IsInsideBS(colour, start, count)) {
|
||||||
/* Update this pixel */
|
/* Update this pixel */
|
||||||
this->SetPixel(_screen.dst_ptr, x, y, *anim);
|
*dst = LookupColourInPalette(colour);
|
||||||
}
|
}
|
||||||
|
dst++;
|
||||||
anim++;
|
anim++;
|
||||||
}
|
}
|
||||||
|
dst += _screen.pitch - _screen.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure the backend redraws the whole screen */
|
/* Make sure the backend redraws the whole screen */
|
||||||
|
Loading…
Reference in New Issue
Block a user