OpenTTD Source 20241224-master-gf74b0cf984
|
How all blitters should look like. More...
#include <base.hpp>
Data Structures | |
struct | BlitterParams |
Parameters related to blitting. More... | |
Public Types | |
enum | PaletteAnimation { PALETTE_ANIMATION_NONE , PALETTE_ANIMATION_VIDEO_BACKEND , PALETTE_ANIMATION_BLITTER } |
Types of palette animation. More... | |
Public Member Functions | |
virtual uint8_t | GetScreenDepth ()=0 |
Get the screen depth this blitter works for. | |
bool | Is32BppSupported () override |
Can the sprite encoder make use of RGBA sprites? | |
virtual void | Draw (Blitter::BlitterParams *bp, BlitterMode mode, ZoomLevel zoom)=0 |
Draw an image to the screen, given an amount of params defined above. | |
virtual void | DrawColourMappingRect (void *dst, int width, int height, PaletteID pal)=0 |
Draw a colourtable to the screen. | |
virtual void * | MoveTo (void *video, int x, int y)=0 |
Move the destination pointer the requested amount x and y, keeping in mind any pitch and bpp of the renderer. | |
virtual void | SetPixel (void *video, int x, int y, uint8_t colour)=0 |
Draw a pixel with a given colour on the video-buffer. | |
virtual void | DrawRect (void *video, int width, int height, uint8_t colour)=0 |
Make a single horizontal line in a single colour on the video-buffer. | |
virtual 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=0)=0 |
Draw a line with a given colour. | |
virtual void | CopyFromBuffer (void *video, const void *src, int width, int height)=0 |
Copy from a buffer to the screen. | |
virtual void | CopyToBuffer (const void *video, void *dst, int width, int height)=0 |
Copy from the screen to a buffer. | |
virtual void | CopyImageToBuffer (const void *video, void *dst, int width, int height, int dst_pitch)=0 |
Copy from the screen to a buffer in a palette format for 8bpp and RGBA format for 32bpp. | |
virtual void | ScrollBuffer (void *video, int &left, int &top, int &width, int &height, int scroll_x, int scroll_y)=0 |
Scroll the videobuffer some 'x' and 'y' value. | |
virtual size_t | BufferSize (uint width, uint height)=0 |
Calculate how much memory there is needed for an image of this size in the video-buffer. | |
virtual void | PaletteAnimate (const Palette &palette)=0 |
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'. | |
virtual Blitter::PaletteAnimation | UsePaletteAnimation ()=0 |
Check if the blitter uses palette animation at all. | |
virtual bool | NeedsAnimationBuffer () |
Does this blitter require a separate animation buffer from the video backend? | |
virtual std::string_view | GetName ()=0 |
Get the name of the blitter, the same as the Factory-instance returns. | |
virtual void | PostResize () |
Post resize event. | |
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 Sprite * | Encode (const SpriteLoader::SpriteCollection &sprite, SpriteAllocator &allocator)=0 |
Convert a sprite from the loader to our own format. | |
virtual uint | GetSpriteAlignment () |
Get the value which the height and width on a sprite have to be aligned by. | |
How all blitters should look like.
Extend this class to make your own.
|
pure virtual |
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. |
Implemented in Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, Blitter_8bppBase, and Blitter_Null.
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, and Blitter_8bppBase.
Referenced by NetworkUndrawChatMessage().
|
pure virtual |
Copy from the screen to a buffer in a palette format for 8bpp and RGBA format for 32bpp.
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. |
dst_pitch | The pitch (byte per line) of the destination buffer. |
Implemented in Blitter_Null, Blitter_32bppBase, Blitter_40bppAnim, and Blitter_8bppBase.
Referenced by CurrentScreenCallback().
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, and Blitter_8bppBase.
Referenced by NetworkDrawChatMessage().
|
pure virtual |
Draw an image to the screen, given an amount of params defined above.
Implemented in Blitter_Null, Blitter_32bppOptimized, Blitter_32bppAnim, Blitter_32bppOptimized, Blitter_32bppSimple, Blitter_40bppAnim, Blitter_8bppOptimized, and Blitter_8bppSimple.
Referenced by GfxBlitter().
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppSimple, Blitter_40bppAnim, and Blitter_8bppBase.
Referenced by GfxFillPolygon(), and GfxFillRect().
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, and Blitter_8bppBase.
Referenced by GfxDoDrawLine().
void Blitter::DrawLineGeneric | ( | int | x, |
int | y, | ||
int | x2, | ||
int | y2, | ||
int | screen_width, | ||
int | screen_height, | ||
int | width, | ||
int | dash, | ||
SetPixelT | set_pixel | ||
) |
Definition at line 19 of file common.hpp.
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, and Blitter_8bppBase.
Referenced by GfxFillPolygon(), and GfxFillRect().
|
pure virtual |
Get the name of the blitter, the same as the Factory-instance returns.
Implemented in Blitter_32bppAnim, Blitter_32bppOptimized, Blitter_32bppSimple, Blitter_40bppAnim, Blitter_8bppOptimized, Blitter_8bppSimple, and Blitter_Null.
Referenced by BlitterFactory::SelectBlitter(), SurveyConfiguration(), and SwitchNewGRFBlitter().
|
pure virtual |
Get the screen depth this blitter works for.
This is either: 8, 16, 24 or 32.
Implemented in Blitter_32bppBase, Blitter_8bppBase, and Blitter_Null.
Referenced by VideoDriver_SDL_Default::AllocateBackingStore(), VideoDriver_Win32GDI::AllocateBackingStore(), DrawSpriteToRgbaBuffer(), VideoDriver_Win32Base::GetFullscreenBpp(), OpenGLBackend::GetVideoBuffer(), GfxBlitter(), Is32BppSupported(), MakeLargeWorldScreenshot(), MakeSmallScreenshot(), OpenGLBackend::Resize(), and VideoDriver_Dedicated::Start().
|
inlineoverridevirtual |
Can the sprite encoder make use of RGBA sprites?
Implements SpriteEncoder.
Definition at line 62 of file base.hpp.
References GetScreenDepth().
|
pure virtual |
Move the destination pointer the requested amount x and y, keeping in mind any pitch and bpp of the renderer.
video | The destination pointer (video-buffer) to scroll. |
x | How much you want to scroll to the right. |
y | How much you want to scroll to the bottom. |
Implemented in Blitter_Null, Blitter_32bppBase, and Blitter_8bppBase.
Referenced by CurrentScreenCallback(), DrawOverlappedWindow(), SmallMapWindow::DrawSmallMap(), SmallMapWindow::DrawSmallMapColumn(), FillDrawPixelInfo(), GfxBlitter(), GfxFillPolygon(), GfxFillRect(), HandleMouseEvents(), NetworkDrawChatMessage(), NetworkUndrawChatMessage(), and ViewportDrawDirtyBlocks().
|
inlinevirtual |
Does this blitter require a separate animation buffer from the video backend?
Reimplemented in Blitter_40bppAnim.
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppBase, and Blitter_8bppBase.
Referenced by VideoDriver_SDL::CheckPaletteAnim(), VideoDriver_SDL_Default::Paint(), VideoDriver_SDL_OpenGL::Paint(), and VideoDriver_Win32GDI::Paint().
|
inlinevirtual |
Post resize event.
Reimplemented in Blitter_32bppAnim.
Definition at line 205 of file base.hpp.
Referenced by VideoDriver_SDL_Base::ClientSizeChanged(), VideoDriver_Win32Base::MakeWindow(), and VideoDriver_Dedicated::Start().
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, and Blitter_8bppBase.
|
pure virtual |
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. |
Implemented in Blitter_Null, Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, and Blitter_8bppBase.
Referenced by SmallMapWindow::DrawSmallMapColumn(), SmallMapWindow::DrawVehicles(), GfxFillPolygon(), GfxFillRect(), and ViewportDrawDirtyBlocks().
|
pure virtual |
Check if the blitter uses palette animation at all.
Implemented in Blitter_32bppAnim, Blitter_32bppBase, Blitter_40bppAnim, Blitter_8bppBase, and Blitter_Null.
Referenced by VideoDriver_SDL::CheckPaletteAnim(), VideoDriver_SDL_Default::Paint(), VideoDriver_SDL_OpenGL::Paint(), and VideoDriver_Win32GDI::Paint().