Merge branch 'master' into jgrpp
# Conflicts: # src/blitter/32bpp_anim.hpp # src/blitter/32bpp_base.hpp # src/blitter/8bpp_base.hpp # src/blitter/null.hpp # src/cheat_gui.cpp # src/gfx.cpp # src/linkgraph/linkgraph.cpp # src/spriteloader/grf.cpp # src/station_cmd.cpp
This commit is contained in:
13
src/gfx.cpp
13
src/gfx.cpp
@@ -1281,9 +1281,10 @@ std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zo
|
||||
const SpriteID real_sprite = GB(spriteId, 0, SPRITE_WIDTH);
|
||||
const Sprite *sprite = GetSprite(real_sprite, ST_NORMAL);
|
||||
Dimension dim = GetSpriteSize(real_sprite, nullptr, zoom);
|
||||
std::unique_ptr<uint32[]> result(new uint32[dim.width * dim.height]);
|
||||
size_t dim_size = static_cast<size_t>(dim.width) * dim.height;
|
||||
std::unique_ptr<uint32[]> result(new uint32[dim_size]);
|
||||
/* Set buffer to fully transparent. */
|
||||
MemSetT(result.get(), 0, dim.width * dim.height);
|
||||
MemSetT(result.get(), 0, dim_size);
|
||||
|
||||
/* Prepare new DrawPixelInfo - Normally this would be the screen but we want to draw to another buffer here.
|
||||
* Normally, pitch would be scaled screen width, but in our case our "screen" is only the sprite width wide. */
|
||||
@@ -1296,11 +1297,13 @@ std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zo
|
||||
dpi.height = dim.height;
|
||||
dpi.zoom = zoom;
|
||||
|
||||
dim_size = static_cast<size_t>(dim.width) * dim.height;
|
||||
|
||||
/* If the current blitter is a paletted blitter, we have to render to an extra buffer and resolve the palette later. */
|
||||
std::unique_ptr<byte[]> pal_buffer{};
|
||||
if (blitter->GetScreenDepth() == 8) {
|
||||
pal_buffer.reset(new byte[dim.width * dim.height]);
|
||||
MemSetT(pal_buffer.get(), 0, dim.width * dim.height);
|
||||
pal_buffer.reset(new byte[dim_size]);
|
||||
MemSetT(pal_buffer.get(), 0, dim_size);
|
||||
|
||||
dpi.dst_ptr = pal_buffer.get();
|
||||
}
|
||||
@@ -1315,7 +1318,7 @@ std::unique_ptr<uint32[]> DrawSpriteToRgbaBuffer(SpriteID spriteId, ZoomLevel zo
|
||||
/* Resolve palette. */
|
||||
uint32 *dst = result.get();
|
||||
const byte *src = pal_buffer.get();
|
||||
for (size_t i = 0; i < dim.height * dim.width; ++i) {
|
||||
for (size_t i = 0; i < dim_size; ++i) {
|
||||
*dst++ = _cur_palette.palette[*src++].data;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user