Add overclocked bins

This commit is contained in:
Miloslav Číž 2019-07-13 00:22:38 +02:00
parent 9ba96a12d4
commit 17af4ec989
9 changed files with 24 additions and 16 deletions

Binary file not shown.

BIN
bin/demo1_overclock.bin Executable file

Binary file not shown.

Binary file not shown.

BIN
bin/demo2_overclock.bin Executable file

Binary file not shown.

Binary file not shown.

BIN
bin/demo3_overclock.bin Executable file

Binary file not shown.

View file

@ -1332,6 +1332,9 @@ int main()
cFloor = 10;
cCeiling = 10;
for (uint8_t i = 0; i < SUBSAMPLED_WIDTH; ++i)
zBuffer[i] = RCL_INFINITY;
player.setPositionSquare(0,5);
player.mCamera.direction = 3 * RCL_UNITS_PER_SQUARE / 4;
player.mCamera.height = RCL_CAMERA_COLL_HEIGHT_BELOW;

View file

@ -473,7 +473,7 @@ uint16_t backgroundColumn = 0; ///< Precomputed background column.
inline void pixelFunc(RCL_PixelInfo *pixel)
{
uint8_t color = 0;
int16_t intensity = 0;
uint8_t intensity = 0;
if (pixel->isWall)
{
@ -482,7 +482,7 @@ inline void pixelFunc(RCL_PixelInfo *pixel)
intensity = pixel->depth / (RCL_UNITS_PER_SQUARE * 2) +
((pixel->hit.direction == 0 || pixel->hit.direction == 2) ? 4 : 0);
color = addIntensity(squareColors[pixel->hit.type],intensity);
color = plusIntensity(squareColors[pixel->hit.type],intensity);
}
else
color = 30;
@ -492,7 +492,7 @@ inline void pixelFunc(RCL_PixelInfo *pixel)
if (!pixel->isHorizon)
{
intensity = pixel->depth / RCL_UNITS_PER_SQUARE;
color = addIntensity(floorColors[(pixel->height / RCL_UNITS_PER_SQUARE) % FLOOR_COLORS],intensity);
color = plusIntensity(floorColors[(pixel->height / RCL_UNITS_PER_SQUARE) % FLOOR_COLORS],intensity);
}
else
color = floorColors[0];

View file

@ -200,22 +200,27 @@ void initPalette()
/**
Adds given intensity to a color.
@param color input color
@param intensity intensity to add, can be negative, will be clamped
@return new color
*/
inline uint8_t addIntensity(uint8_t color, int16_t intensity)
inline uint8_t addIntensity(uint8_t color, int8_t add)
{
int16_t newValue = (color & 0b00001111) + intensity; // value as in HSV
uint8_t newValue = color + add;
if (newValue <= 0)
return 0; // black
if ((newValue >> 4) == (color >> 4))
return newValue;
else
return add > 0 ? (color | 0x0f) : 0;
}
if (newValue >= 16)
newValue = 15;
static inline uint8_t plusIntensity(uint8_t color, uint8_t plus)
{
uint8_t newValue = color + plus;
return ((newValue >> 4) == (color >> 4)) ? newValue : (color | 0x0f);
}
return (color & 0b11110000) | newValue;
static inline uint8_t minusIntensity(uint8_t color, uint8_t minus)
{
uint8_t newValue = color - minus;
return ((newValue >> 4) == (color >> 4)) ? newValue : 0;
}
/**
@ -238,7 +243,7 @@ inline uint8_t sampleImage(const unsigned char *image, RCL_Unit x, RCL_Unit y)
Draws a scaled sprite on screen in an optimized way. The sprite has to be
square in resolution for that.
*/
void inline drawSpriteSquare(const unsigned char *sprite, int16_t x, int16_t y, RCL_Unit depth, int16_t size, int16_t intensity)
static void inline drawSpriteSquare(const unsigned char *sprite, int16_t x, int16_t y, RCL_Unit depth, int16_t size, int16_t intensity)
{
if (size < 0 || size > 200 || // let's not mess up with the incoming array
sprite[0] != sprite[1]) // only draw square sprites