forked from Makuna/NeoPixelBus
Const and Warning Correctness
const method correctness fix some warnings Missing Render method added back Fix examples to use new NeoShaderBase
This commit is contained in:
@ -36,12 +36,12 @@ const RgbColor White(255);
|
|||||||
const RgbColor Black(0);
|
const RgbColor Black(0);
|
||||||
|
|
||||||
// define a custom shader object that provides brightness support
|
// define a custom shader object that provides brightness support
|
||||||
// based upon the NeoBitsBase
|
// based upon the NeoShaderBase
|
||||||
template<typename T_COLOR_FEATURE> class BrightnessShader : public NeoBitsBase
|
template<typename T_COLOR_FEATURE> class BrightnessShader : public NeoShaderBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BrightnessShader():
|
BrightnessShader():
|
||||||
NeoBitsBase(),
|
NeoShaderBase(),
|
||||||
_brightness(255) // default to full bright
|
_brightness(255) // default to full bright
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -34,12 +34,12 @@ const RgbColor White(255);
|
|||||||
const RgbColor Black(0);
|
const RgbColor Black(0);
|
||||||
|
|
||||||
// define a custom shader object that provides brightness support
|
// define a custom shader object that provides brightness support
|
||||||
// based upon the NeoBitsBase
|
// based upon the NeoShaderBase
|
||||||
class BrightnessShader : public NeoBitsBase
|
class BrightnessShader : public NeoShaderBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BrightnessShader():
|
BrightnessShader():
|
||||||
NeoBitsBase(),
|
NeoShaderBase(),
|
||||||
_brightness(255) // default to full bright
|
_brightness(255) // default to full bright
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -75,12 +75,11 @@ public:
|
|||||||
_width(0),
|
_width(0),
|
||||||
_height(0),
|
_height(0),
|
||||||
_sizeRow(0),
|
_sizeRow(0),
|
||||||
_bottomToTop(true),
|
_bytesPerPixel(0),
|
||||||
_bytesPerPixel(0)
|
_bottomToTop(true)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
~NeoBitmapFile()
|
~NeoBitmapFile()
|
||||||
{
|
{
|
||||||
_file.close();
|
_file.close();
|
||||||
@ -205,7 +204,7 @@ public:
|
|||||||
{
|
{
|
||||||
for (int16_t x = 0; x < wSrc && indexPixel < destPixelCount; x++, indexPixel++)
|
for (int16_t x = 0; x < wSrc && indexPixel < destPixelCount; x++, indexPixel++)
|
||||||
{
|
{
|
||||||
if (xSrc < _width)
|
if ((uint16_t)xSrc < _width)
|
||||||
{
|
{
|
||||||
if (readPixel(&color))
|
if (readPixel(&color))
|
||||||
{
|
{
|
||||||
@ -239,7 +238,7 @@ public:
|
|||||||
{
|
{
|
||||||
for (int16_t x = 0; x < wSrc; x++)
|
for (int16_t x = 0; x < wSrc; x++)
|
||||||
{
|
{
|
||||||
if (xFile < _width)
|
if ((uint16_t)xFile < _width)
|
||||||
{
|
{
|
||||||
if (readPixel(&color))
|
if (readPixel(&color))
|
||||||
{
|
{
|
||||||
@ -268,26 +267,26 @@ private:
|
|||||||
uint8_t _bytesPerPixel;
|
uint8_t _bytesPerPixel;
|
||||||
bool _bottomToTop;
|
bool _bottomToTop;
|
||||||
|
|
||||||
int16_t constrainX(int16_t x)
|
int16_t constrainX(int16_t x) const
|
||||||
{
|
{
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
{
|
{
|
||||||
x = 0;
|
x = 0;
|
||||||
}
|
}
|
||||||
else if (x >= _width)
|
else if ((uint16_t)x >= _width)
|
||||||
{
|
{
|
||||||
x = _width - 1;
|
x = _width - 1;
|
||||||
}
|
}
|
||||||
return x;
|
return x;
|
||||||
};
|
};
|
||||||
|
|
||||||
int16_t constrainY(int16_t y)
|
int16_t constrainY(int16_t y) const
|
||||||
{
|
{
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
{
|
{
|
||||||
y = 0;
|
y = 0;
|
||||||
}
|
}
|
||||||
else if (y >= _height)
|
else if ((uint16_t)y >= _height)
|
||||||
{
|
{
|
||||||
y = _height - 1;
|
y = _height - 1;
|
||||||
}
|
}
|
||||||
|
@ -133,19 +133,38 @@ public:
|
|||||||
Blt(destBuffer, xDest, yDest, 0, 0, Width(), Height(), layoutMap);
|
Blt(destBuffer, xDest, yDest, 0, 0, Width(), Height(), layoutMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T_SHADER> void Render(NeoBufferContext<typename T_BUFFER_METHOD::ColorFeature> destBuffer, T_SHADER& shader)
|
||||||
|
{
|
||||||
|
uint16_t countPixels = destBuffer.PixelCount();
|
||||||
|
|
||||||
|
if (countPixels > _method.PixelCount())
|
||||||
|
{
|
||||||
|
countPixels = _method.PixelCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint16_t indexPixel = 0; indexPixel < countPixels; indexPixel++)
|
||||||
|
{
|
||||||
|
typename T_BUFFER_METHOD::ColorObject color;
|
||||||
|
|
||||||
|
shader.Apply(indexPixel, (uint8_t*)(&color), _method.Pixels() + (indexPixel * _method.PixelSize()));
|
||||||
|
|
||||||
|
T_BUFFER_METHOD::ColorFeature::applyPixelColor(destBuffer.Pixels, indexPixel, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
T_BUFFER_METHOD _method;
|
T_BUFFER_METHOD _method;
|
||||||
|
|
||||||
uint16_t pixelIndex(
|
uint16_t pixelIndex(
|
||||||
int16_t x,
|
int16_t x,
|
||||||
int16_t y)
|
int16_t y) const
|
||||||
{
|
{
|
||||||
uint16_t result = PixelIndex_OutOfBounds;
|
uint16_t result = PixelIndex_OutOfBounds;
|
||||||
|
|
||||||
if (x >= 0 &&
|
if (x >= 0 &&
|
||||||
x < Width() &&
|
(uint16_t)x < Width() &&
|
||||||
y >= 0 &&
|
y >= 0 &&
|
||||||
y < Height())
|
(uint16_t)y < Height())
|
||||||
{
|
{
|
||||||
result = x + y * Width();
|
result = x + y * Width();
|
||||||
}
|
}
|
||||||
|
@ -123,6 +123,7 @@ public:
|
|||||||
if (IsDirty() || shader.IsDirty())
|
if (IsDirty() || shader.IsDirty())
|
||||||
{
|
{
|
||||||
uint16_t countPixels = destBuffer.PixelCount();
|
uint16_t countPixels = destBuffer.PixelCount();
|
||||||
|
|
||||||
if (countPixels > _countPixels)
|
if (countPixels > _countPixels)
|
||||||
{
|
{
|
||||||
countPixels = _countPixels;
|
countPixels = _countPixels;
|
||||||
|
@ -146,15 +146,15 @@ private:
|
|||||||
|
|
||||||
uint16_t pixelIndex(uint16_t indexSprite,
|
uint16_t pixelIndex(uint16_t indexSprite,
|
||||||
int16_t x,
|
int16_t x,
|
||||||
int16_t y)
|
int16_t y) const
|
||||||
{
|
{
|
||||||
uint16_t result = PixelIndex_OutOfBounds;
|
uint16_t result = PixelIndex_OutOfBounds;
|
||||||
|
|
||||||
if (indexSprite < _spriteCount &&
|
if (indexSprite < _spriteCount &&
|
||||||
x >= 0 &&
|
x >= 0 &&
|
||||||
x < SpriteWidth() &&
|
(uint16_t)x < SpriteWidth() &&
|
||||||
y >= 0 &&
|
y >= 0 &&
|
||||||
y < SpriteHeight())
|
(uint16_t)y < SpriteHeight())
|
||||||
{
|
{
|
||||||
result = x + y * SpriteWidth() + indexSprite * _spriteHeight * SpriteWidth();
|
result = x + y * SpriteWidth() + indexSprite * _spriteHeight * SpriteWidth();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user