6 #ifndef SPRITECONVERTER_HH
7 #define SPRITECONVERTER_HH
18 template<
typename Pixel>
30 : spriteChecker(spriteChecker_)
39 transparency = enabled;
63 int before = minX -
x;
79 int mask = 0x80000000;
80 pattern &= (
mask >> (after - 1));
93 Pixel* __restrict pixelPtr) __restrict
98 spriteChecker.
getSprites(absLine, visibleSprites);
101 if (visibleIndex == 0)
return;
104 while (visibleIndex--) {
107 &visibleSprites[visibleIndex];
112 if (colIndex == 0 && transparency)
continue;
113 Pixel color = palette[colIndex];
122 if (pattern & 0x80000000) {
142 template<
unsigned MODE>
144 Pixel* __restrict pixelPtr) __restrict
149 spriteChecker.
getSprites(absLine, visibleSprites);
152 if (visibleIndex == 0)
return;
158 if (
likely((visibleSprites[first].colorAttrib & 0x40) == 0)) {
162 }
while (first < visibleIndex);
163 for (
int i = visibleIndex - 1; i >= first; --i) {
170 if (c == 0 && transparency)
continue;
172 if (pattern & 0x80000000) {
175 for (
int j = i + 1; ; ++j) {
179 unsigned shift2 =
x - info2.
x;
181 ((info2.
pattern << shift2) & 0x80000000)) {
186 Pixel pixL = palette[color >> 2];
187 Pixel pixR = palette[color & 3];
188 pixelPtr[
x * 2 + 0] = pixL;
189 pixelPtr[
x * 2 + 1] = pixR;
191 Pixel pix = palette[color];
193 pixelPtr[
x * 2 + 0] = pix;
194 pixelPtr[
x * 2 + 1] = pix;
211 const Pixel* palette;
Represents a VDP display mode.
uint32_t SpritePattern
Bitmap of length 32 describing a sprite pattern.
int getSprites(int line, const SpriteInfo *&visibleSprites) const
Get sprites for a display line.
Utility class for converting VRAM contents to host pixels.
SpriteConverter(SpriteChecker &spriteChecker_)
Constructor.
void drawMode2(int absLine, int minX, int maxX, Pixel *pixelPtr)
Draw sprites in sprite mode 2.
void drawMode1(int absLine, int minX, int maxX, Pixel *pixelPtr)
Draw sprites in sprite mode 1.
void setPalette(const Pixel *newPalette)
Set palette to use for converting sprites.
void setTransparency(bool enabled)
Update the transparency setting.
void setDisplayMode(DisplayMode newMode)
Notify SpriteConverter of a display mode change.
static bool clipPattern(int &x, SpriteChecker::SpritePattern &pattern, int minX, int maxX)
This file implemented 3 utility functions:
constexpr KeyMatrixPosition x
Keyboard bindings.
constexpr nibble mask[4][13]
Contains all the information to draw a line of a sprite.
SpritePattern pattern
Pattern of this sprite line, corrected for magnification.
byte colorAttrib
Bit 3..0 are index in palette.
int16_t x
X-coordinate of sprite, corrected for early clock.