OpenTTD Source 20241224-master-gee860a5c8e
|
The optimised 32 bpp blitter with palette animation. More...
#include <32bpp_anim.hpp>
Public Member Functions | |
void | Draw (Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override |
Draw an image to the screen, given an amount of params defined above. | |
void | DrawColourMappingRect (void *dst, int width, int height, PaletteID pal) override |
Draw a colourtable to the screen. | |
void | SetPixel (void *video, int x, int y, uint8_t colour) override |
Draw a pixel with a given colour on the video-buffer. | |
void | DrawLine (void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash) override |
Draw a line with a given colour. | |
void | DrawRect (void *video, int width, int height, uint8_t colour) override |
Make a single horizontal line in a single colour on the video-buffer. | |
void | CopyFromBuffer (void *video, const void *src, int width, int height) override |
Copy from a buffer to the screen. | |
void | CopyToBuffer (const void *video, void *dst, int width, int height) override |
Copy from the screen to a buffer. | |
void | ScrollBuffer (void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override |
Scroll the videobuffer some 'x' and 'y' value. | |
size_t | BufferSize (uint width, uint height) override |
Calculate how much memory there is needed for an image of this size in the video-buffer. | |
void | PaletteAnimate (const Palette &palette) override |
Called when the 8bpp palette is changed; you should redraw all pixels on the screen that are equal to the 8bpp palette indexes 'first_dirty' to 'first_dirty + count_dirty'. | |
Blitter::PaletteAnimation | UsePaletteAnimation () override |
Check if the blitter uses palette animation at all. | |
std::string_view | GetName () override |
Get the name of the blitter, the same as the Factory-instance returns. | |
void | PostResize () override |
Post resize event. | |
Colour | LookupColourInPalette (uint index) |
Look up the colour in the current palette. | |
int | ScreenToAnimOffset (const uint32_t *video) |
template<BlitterMode mode> | |
void | Draw (const Blitter::BlitterParams *bp, ZoomLevel zoom) |
Public Member Functions inherited from Blitter_32bppOptimized | |
void | Draw (Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override |
Draws a sprite to a (screen) buffer. | |
Sprite * | Encode (const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override |
Convert a sprite from the loader to our own format. | |
std::string_view | GetName () override |
Get the name of the blitter, the same as the Factory-instance returns. | |
template<BlitterMode mode, bool Tpal_to_rgb = false> | |
void | Draw (const Blitter::BlitterParams *bp, ZoomLevel zoom) |
Draws a sprite to a (screen) buffer. | |
Public Member Functions inherited from Blitter_32bppSimple | |
void | Draw (Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) override |
Draw an image to the screen, given an amount of params defined above. | |
void | DrawColourMappingRect (void *dst, int width, int height, PaletteID pal) override |
Draw a colourtable to the screen. | |
Sprite * | Encode (const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) override |
Convert a sprite from the loader to our own format. | |
std::string_view | GetName () override |
Get the name of the blitter, the same as the Factory-instance returns. | |
Public Member Functions inherited from Blitter_32bppBase | |
uint8_t | GetScreenDepth () override |
Get the screen depth this blitter works for. | |
void * | MoveTo (void *video, int x, int y) override |
Move the destination pointer the requested amount x and y, keeping in mind any pitch and bpp of the renderer. | |
void | SetPixel (void *video, int x, int y, uint8_t colour) override |
Draw a pixel with a given colour on the video-buffer. | |
void | DrawLine (void *video, int x, int y, int x2, int y2, int screen_width, int screen_height, uint8_t colour, int width, int dash) override |
Draw a line with a given colour. | |
void | DrawRect (void *video, int width, int height, uint8_t colour) override |
Make a single horizontal line in a single colour on the video-buffer. | |
void | CopyFromBuffer (void *video, const void *src, int width, int height) override |
Copy from a buffer to the screen. | |
void | CopyToBuffer (const void *video, void *dst, int width, int height) override |
Copy from the screen to a buffer. | |
void | CopyImageToBuffer (const void *video, void *dst, int width, int height, int dst_pitch) override |
Copy from the screen to a buffer in a palette format for 8bpp and RGBA format for 32bpp. | |
void | ScrollBuffer (void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y) override |
Scroll the videobuffer some 'x' and 'y' value. | |
size_t | BufferSize (uint width, uint height) override |
Calculate how much memory there is needed for an image of this size in the video-buffer. | |
void | PaletteAnimate (const Palette &palette) override |
Called when the 8bpp palette is changed; you should redraw all pixels on the screen that are equal to the 8bpp palette indexes 'first_dirty' to 'first_dirty + count_dirty'. | |
Blitter::PaletteAnimation | UsePaletteAnimation () override |
Check if the blitter uses palette animation at all. | |
Public Member Functions inherited from Blitter | |
bool | Is32BppSupported () override |
Can the sprite encoder make use of RGBA sprites? | |
virtual bool | NeedsAnimationBuffer () |
Does this blitter require a separate animation buffer from the video backend? | |
template<typename SetPixelT > | |
void | DrawLineGeneric (int x, int y, int x2, int y2, int screen_width, int screen_height, int width, int dash, SetPixelT set_pixel) |
Public Member Functions inherited from SpriteEncoder | |
virtual uint | GetSpriteAlignment () |
Get the value which the height and width on a sprite have to be aligned by. | |
Protected Attributes | |
uint16_t * | anim_buf |
In this buffer we keep track of the 8bpp indexes so we can do palette animation. | |
void * | anim_alloc |
The raw allocated buffer, not necessarily aligned correctly. | |
int | anim_buf_width |
The width of the animation buffer. | |
int | anim_buf_height |
The height of the animation buffer. | |
int | anim_buf_pitch |
The pitch of the animation buffer (width rounded up to 16 byte boundary). | |
Palette | palette |
The current palette. | |
Additional Inherited Members | |
Public Types inherited from Blitter | |
enum | PaletteAnimation { PALETTE_ANIMATION_NONE , PALETTE_ANIMATION_VIDEO_BACKEND , PALETTE_ANIMATION_BLITTER } |
Types of palette animation. More... | |
Static Public Member Functions inherited from Blitter_32bppBase | |
static Colour | LookupColourInPalette (uint index) |
Look up the colour in the current palette. | |
static Colour | ComposeColourRGBANoCheck (uint r, uint g, uint b, uint a, Colour current) |
Compose a colour based on RGBA values and the current pixel value. | |
static Colour | ComposeColourRGBA (uint r, uint g, uint b, uint a, Colour current) |
Compose a colour based on RGBA values and the current pixel value. | |
static Colour | ComposeColourPANoCheck (Colour colour, uint a, Colour current) |
Compose a colour based on Pixel value, alpha value, and the current pixel value. | |
static Colour | ComposeColourPA (Colour colour, uint a, Colour current) |
Compose a colour based on Pixel value, alpha value, and the current pixel value. | |
static Colour | MakeTransparent (Colour colour, uint nom, uint denom=256) |
Make a pixel looks like it is transparent. | |
static uint8_t | MakeDark (uint8_t r, uint8_t g, uint8_t b) |
Make a colour dark grey, for specialized 32bpp remapping. | |
static Colour | MakeDark (Colour colour) |
Make a colour dark grey, for specialized 32bpp remapping. | |
static Colour | MakeGrey (Colour colour) |
Make a colour grey - based. | |
static Colour | ReallyAdjustBrightness (Colour colour, uint8_t brightness) |
static Colour | AdjustBrightness (Colour colour, uint8_t brightness) |
static uint8_t | GetColourBrightness (Colour colour) |
Static Public Attributes inherited from Blitter_32bppBase | |
static const int | DEFAULT_BRIGHTNESS = 128 |
Protected Member Functions inherited from Blitter_32bppOptimized | |
template<bool Tpal_to_rgb> | |
void | Draw (Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom) |
Draw an image to the screen, given an amount of params defined above. | |
template<bool Tpal_to_rgb> | |
Sprite * | EncodeInternal (const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator) |
The optimised 32 bpp blitter with palette animation.
Definition at line 16 of file 32bpp_anim.hpp.
|
inline |
Definition at line 26 of file 32bpp_anim.hpp.
Blitter_32bppAnim::~Blitter_32bppAnim | ( | ) |
Definition at line 23 of file 32bpp_anim.cpp.
|
overridevirtual |
Calculate how much memory there is needed for an image of this size in the video-buffer.
width | The width of the buffer-to-be. |
height | The height of the buffer-to-be. |
Implements Blitter.
Definition at line 497 of file 32bpp_anim.cpp.
|
overridevirtual |
Copy from a buffer to the screen.
video | The destination pointer (video-buffer). |
src | The buffer from which the data will be read. |
width | The width of the buffer. |
height | The height of the buffer. |
Implements Blitter.
Definition at line 384 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, anim_buf_pitch, GB(), LookupColourInPalette(), and PALETTE_ANIM_START.
|
overridevirtual |
Copy from the screen to a buffer.
video | The destination pointer (video-buffer). |
dst | The buffer in which the data will be stored. |
width | The width of the buffer. |
height | The height of the buffer. |
Implements Blitter.
Definition at line 424 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, and anim_buf_pitch.
|
overridevirtual |
Draw an image to the screen, given an amount of params defined above.
Implements Blitter.
Definition at line 269 of file 32bpp_anim.cpp.
References _screen_disable_anim, BM_BLACK_REMAP, BM_COLOUR_REMAP, BM_CRASH_REMAP, BM_NORMAL, BM_TRANSPARENT, BM_TRANSPARENT_REMAP, and Blitter_32bppOptimized::Draw().
|
inline |
Definition at line 29 of file 32bpp_anim.cpp.
|
overridevirtual |
Draw a colourtable to the screen.
This is: the colour of the screen is read and is looked-up in the palette to match a new colour, which then is put on the screen again.
dst | the destination pointer (video-buffer). |
width | the width of the buffer. |
height | the height of the buffer. |
pal | the palette to use. |
Implements Blitter.
Definition at line 288 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, anim_buf_pitch, Debug, Blitter_32bppSimple::DrawColourMappingRect(), Blitter_32bppBase::MakeGrey(), Blitter_32bppBase::MakeTransparent(), PALETTE_NEWSPAPER, and PALETTE_TO_TRANSPARENT.
|
overridevirtual |
Draw a line with a given colour.
video | The destination pointer (video-buffer). |
x | The x coordinate from where the line starts. |
y | The y coordinate from where the line starts. |
x2 | The x coordinate to where the line goes. |
y2 | The y coordinate to where the lines goes. |
screen_width | The width of the screen you are drawing in (to avoid buffer-overflows). |
screen_height | The height of the screen you are drawing in (to avoid buffer-overflows). |
colour | A 8bpp mapping colour. |
width | Line width. |
dash | Length of dashes for dashed lines. 0 means solid line. |
Implements Blitter.
Definition at line 339 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, anim_buf_pitch, and LookupColourInPalette().
|
overridevirtual |
Make a single horizontal line in a single colour on the video-buffer.
video | The destination pointer (video-buffer). |
width | The length of the line. |
height | The height of the line. |
colour | A 8bpp mapping colour. |
Implements Blitter.
Definition at line 357 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, anim_buf_pitch, Blitter_32bppBase::DrawRect(), and LookupColourInPalette().
|
inlineoverridevirtual |
Get the name of the blitter, the same as the Factory-instance returns.
Implements Blitter.
Definition at line 50 of file 32bpp_anim.hpp.
|
inline |
Look up the colour in the current palette.
Definition at line 56 of file 32bpp_anim.hpp.
References Palette::palette.
Referenced by CopyFromBuffer(), DrawLine(), DrawRect(), PaletteAnimate(), and SetPixel().
|
overridevirtual |
Called when the 8bpp palette is changed; you should redraw all pixels on the screen that are equal to the 8bpp palette indexes 'first_dirty' to 'first_dirty + count_dirty'.
palette | The new palette. |
Implements Blitter.
Definition at line 502 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, anim_buf_height, anim_buf_width, Palette::first_dirty, GB(), VideoDriver::GetInstance(), LookupColourInPalette(), VideoDriver::MakeDirty(), palette, and PALETTE_ANIM_START.
|
overridevirtual |
Post resize event.
Reimplemented from Blitter.
Definition at line 543 of file 32bpp_anim.cpp.
References anim_alloc, anim_buf, anim_buf_height, anim_buf_width, and free().
|
inline |
Definition at line 61 of file 32bpp_anim.hpp.
|
overridevirtual |
Scroll the videobuffer some 'x' and 'y' value.
video | The buffer to scroll into. |
left | The left value of the screen to scroll. |
top | The top value of the screen to scroll. |
width | The width of the screen to scroll. |
height | The height of the screen to scroll. |
scroll_x | How much to scroll in X. |
scroll_y | How much to scroll in Y. |
Implements Blitter.
Definition at line 446 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, anim_buf_pitch, and Blitter_32bppBase::ScrollBuffer().
|
overridevirtual |
Draw a pixel with a given colour on the video-buffer.
video | The destination pointer (video-buffer). |
x | The x position within video-buffer. |
y | The y position within video-buffer. |
colour | A 8bpp mapping colour. |
Implements Blitter.
Definition at line 329 of file 32bpp_anim.cpp.
References _screen_disable_anim, anim_buf, anim_buf_pitch, and LookupColourInPalette().
|
overridevirtual |
Check if the blitter uses palette animation at all.
Implements Blitter.
Definition at line 538 of file 32bpp_anim.cpp.
References Blitter::PALETTE_ANIMATION_BLITTER.
|
protected |
The raw allocated buffer, not necessarily aligned correctly.
Definition at line 19 of file 32bpp_anim.hpp.
Referenced by PostResize().
|
protected |
In this buffer we keep track of the 8bpp indexes so we can do palette animation.
Definition at line 18 of file 32bpp_anim.hpp.
Referenced by CopyFromBuffer(), CopyToBuffer(), DrawColourMappingRect(), DrawLine(), DrawRect(), PaletteAnimate(), PostResize(), ScrollBuffer(), and SetPixel().
|
protected |
The height of the animation buffer.
Definition at line 21 of file 32bpp_anim.hpp.
Referenced by PaletteAnimate(), and PostResize().
|
protected |
The pitch of the animation buffer (width rounded up to 16 byte boundary).
Definition at line 22 of file 32bpp_anim.hpp.
Referenced by CopyFromBuffer(), CopyToBuffer(), DrawColourMappingRect(), DrawLine(), DrawRect(), ScrollBuffer(), and SetPixel().
|
protected |
The width of the animation buffer.
Definition at line 20 of file 32bpp_anim.hpp.
Referenced by PaletteAnimate(), and PostResize().
|
protected |