OpenTTD Source 20260206-master-g4d4e37dbf1
OpenGLSprite Class Reference

Class that encapsulates a RGBA texture together with a paletted remap texture. More...

#include <opengl.h>

Public Member Functions

 OpenGLSprite (SpriteType sprite_type, const SpriteLoader::SpriteCollection &sprite)
 Create an OpenGL sprite with a palette remap part.
 OpenGLSprite (const OpenGLSprite &)=delete
 OpenGLSprite (OpenGLSprite &&)=delete
OpenGLSpriteoperator= (const OpenGLSprite &)=delete
OpenGLSpriteoperator= (OpenGLSprite &&)=delete
void Update (uint width, uint height, uint level, const SpriteLoader::CommonPixel *data)
 Update a single mip-map level with new pixel data.
Dimension GetSize (ZoomLevel level) const
 Query the sprite size at a certain zoom level.

Private Types

enum  Texture : uint8_t { TEX_RGBA , TEX_REMAP , NUM_TEX }
 Enum of all used OpenGL texture objects. More...

Private Member Functions

bool BindTextures () const
 Bind textures for rendering this sprite.

Static Private Member Functions

static bool Create ()
 Create all common resources for sprite rendering.
static void Destroy ()
 Free all common resources for sprite rendering.

Private Attributes

Dimension dim {}
std::array< GLuint, NUM_TEX > tex {}
 The texture objects.
int16_t x_offs = 0
 Number of pixels to shift the sprite to the right.
int16_t y_offs = 0
 Number of pixels to shift the sprite downwards.

Static Private Attributes

static std::array< GLuint, NUM_TEX > dummy_tex {}
 1x1 dummy textures to substitute for unused sprite components.
static GLuint pal_identity = 0
 Identity texture mapping.
static GLuint pal_tex = 0
 Texture for palette remap.
static GLuint pal_pbo = 0
 Pixel buffer object for remap upload.

Friends

class OpenGLBackend

Detailed Description

Class that encapsulates a RGBA texture together with a paletted remap texture.

Definition at line 116 of file opengl.h.

Member Enumeration Documentation

◆ Texture

enum OpenGLSprite::Texture : uint8_t
private

Enum of all used OpenGL texture objects.

Enumerator
TEX_RGBA 

RGBA texture part.

TEX_REMAP 

Remap texture part.

Definition at line 119 of file opengl.h.

Constructor & Destructor Documentation

◆ OpenGLSprite()

OpenGLSprite::OpenGLSprite ( SpriteType sprite_type,
const SpriteLoader::SpriteCollection & sprite )

Create an OpenGL sprite with a palette remap part.

Parameters
sprite_typeThe type of sprite to load.
spriteThe sprite to create the OpenGL sprite for

Definition at line 1402 of file opengl.cpp.

References End, Font, Max, Min, Palette, tex, TEX_REMAP, TEX_RGBA, to_underlying(), Update(), Sprite::width, x_offs, and y_offs.

◆ ~OpenGLSprite()

OpenGLSprite::~OpenGLSprite ( )

Definition at line 1453 of file opengl.cpp.

Member Function Documentation

◆ BindTextures()

bool OpenGLSprite::BindTextures ( ) const
private

Bind textures for rendering this sprite.

Returns
True if the sprite has RGBA data.

Definition at line 1523 of file opengl.cpp.

References dummy_tex, tex, TEX_REMAP, and TEX_RGBA.

Referenced by OpenGLBackend::RenderOglSprite().

◆ Create()

bool OpenGLSprite::Create ( )
staticprivate

Create all common resources for sprite rendering.

Returns
True if no error occurred.

Definition at line 1328 of file opengl.cpp.

References dummy_tex, pal_identity, pal_pbo, pal_tex, TEX_REMAP, and TEX_RGBA.

Referenced by OpenGLBackend::Init().

◆ Destroy()

void OpenGLSprite::Destroy ( )
staticprivate

Free all common resources for sprite rendering.

Definition at line 1389 of file opengl.cpp.

References dummy_tex, pal_identity, pal_pbo, and pal_tex.

Referenced by OpenGLBackend::~OpenGLBackend().

◆ GetSize()

Dimension OpenGLSprite::GetSize ( ZoomLevel level) const
inline

Query the sprite size at a certain zoom level.

Parameters
levelThe zoom level to query.
Returns
Sprite size at the given zoom level.

Definition at line 1513 of file opengl.cpp.

References UnScaleByZoomLower().

Referenced by OpenGLBackend::RenderOglSprite().

◆ Update()

void OpenGLSprite::Update ( uint width,
uint height,
uint level,
const SpriteLoader::CommonPixel * data )

Update a single mip-map level with new pixel data.

Parameters
widthWidth of the level.
heightHeight of the level.
levelMip-map level.
dataNew pixel data.

Definition at line 1465 of file opengl.cpp.

References SpriteLoader::CommonPixel::a, Align(), ReusableBuffer< T >::Allocate(), SpriteLoader::CommonPixel::b, SpriteLoader::CommonPixel::g, ReusableBuffer< T >::GetBuffer(), SpriteLoader::CommonPixel::m, SpriteLoader::CommonPixel::r, tex, TEX_REMAP, and TEX_RGBA.

Referenced by OpenGLSprite().

◆ OpenGLBackend

friend class OpenGLBackend
friend

Definition at line 154 of file opengl.h.

Field Documentation

◆ dim

Dimension OpenGLSprite::dim {}
private

Definition at line 125 of file opengl.h.

◆ dummy_tex

std::array< GLuint, OpenGLSprite::NUM_TEX > OpenGLSprite::dummy_tex {}
staticprivate

1x1 dummy textures to substitute for unused sprite components.

Definition at line 1319 of file opengl.h.

Referenced by BindTextures(), Create(), and Destroy().

◆ pal_identity

GLuint OpenGLSprite::pal_identity = 0
staticprivate

Identity texture mapping.

Definition at line 132 of file opengl.h.

Referenced by Create(), Destroy(), and OpenGLBackend::RenderOglSprite().

◆ pal_pbo

GLuint OpenGLSprite::pal_pbo = 0
staticprivate

Pixel buffer object for remap upload.

Definition at line 134 of file opengl.h.

Referenced by Create(), Destroy(), and OpenGLBackend::RenderOglSprite().

◆ pal_tex

GLuint OpenGLSprite::pal_tex = 0
staticprivate

Texture for palette remap.

Definition at line 133 of file opengl.h.

Referenced by Create(), Destroy(), and OpenGLBackend::RenderOglSprite().

◆ tex

std::array<GLuint, NUM_TEX> OpenGLSprite::tex {}
private

The texture objects.

Definition at line 126 of file opengl.h.

Referenced by BindTextures(), OpenGLSprite(), and Update().

◆ x_offs

int16_t OpenGLSprite::x_offs = 0
private

Number of pixels to shift the sprite to the right.

Definition at line 127 of file opengl.h.

Referenced by OpenGLBackend::DrawMouseCursor(), and OpenGLSprite().

◆ y_offs

int16_t OpenGLSprite::y_offs = 0
private

Number of pixels to shift the sprite downwards.

Definition at line 128 of file opengl.h.

Referenced by OpenGLBackend::DrawMouseCursor(), and OpenGLSprite().


The documentation for this class was generated from the following files: