Draw sky strip
This commit is contained in:
parent
d7194d9183
commit
6e068eff2b
2 changed files with 97 additions and 58 deletions
78
renderer.h
Normal file
78
renderer.h
Normal file
|
@ -0,0 +1,78 @@
|
|||
#ifndef _LCR_RENDERER_H
|
||||
#define _LCR_RENDERER_H
|
||||
|
||||
struct LCR_Renderer
|
||||
{
|
||||
// TODO
|
||||
};
|
||||
|
||||
void LCR_drawBackground(int verticalOffset)
|
||||
{
|
||||
uint16_t color = LCR_skyImages[LCR_skyImages[256] & 0x00ff] ; // TODO
|
||||
int limit = verticalOffset - LCR_SETTING_SKY_SIZE * LCR_SKY_IMAGE_SIZE / 2;
|
||||
|
||||
if (limit >= LCR_EFFECTIVE_RESOLUTION_Y)
|
||||
limit = LCR_EFFECTIVE_RESOLUTION_Y - 1;
|
||||
|
||||
for (int y = 0; y <= limit; ++y)
|
||||
for (int x = 0; x < LCR_EFFECTIVE_RESOLUTION_X; ++x)
|
||||
LCR_drawPixelUnsafe(x,y,color);
|
||||
|
||||
color = LCR_skyImages[LCR_skyImages[255 + (128 * 128) / 2] >> 8]; // TODO
|
||||
limit = verticalOffset + LCR_SETTING_SKY_SIZE * LCR_SKY_IMAGE_SIZE / 2 -
|
||||
LCR_SETTING_SKY_SIZE;
|
||||
|
||||
if (limit < 0)
|
||||
limit = 0;
|
||||
|
||||
for (int y = LCR_EFFECTIVE_RESOLUTION_Y - 1; y >= limit; --y)
|
||||
for (int x = 0; x < LCR_EFFECTIVE_RESOLUTION_X; ++x)
|
||||
LCR_drawPixelUnsafe(x,y,color);
|
||||
}
|
||||
|
||||
void LCR_drawSkyStrip(int verticalOffset, uint8_t horizontalOffset)
|
||||
{
|
||||
#if LCR_SETTING_SKY_SIZE != 0
|
||||
verticalOffset -= (LCR_SETTING_SKY_SIZE * LCR_SKY_IMAGE_SIZE) / 2;
|
||||
|
||||
int finalY = verticalOffset + LCR_SETTING_SKY_SIZE * LCR_SKY_IMAGE_SIZE;
|
||||
|
||||
finalY = (finalY / LCR_SETTING_SKY_SIZE) * LCR_SETTING_SKY_SIZE;
|
||||
|
||||
if (finalY >= LCR_EFFECTIVE_RESOLUTION_Y)
|
||||
finalY = LCR_EFFECTIVE_RESOLUTION_Y - 1;
|
||||
|
||||
const uint16_t *skyLine = LCR_skyImages + 256;
|
||||
|
||||
if (verticalOffset < 0)
|
||||
{
|
||||
skyLine += (-1 * verticalOffset / LCR_SETTING_SKY_SIZE) * (LCR_SKY_IMAGE_SIZE / 2);
|
||||
verticalOffset = 0;
|
||||
}
|
||||
|
||||
while (verticalOffset < finalY)
|
||||
{
|
||||
for (int i = 0; i < LCR_EFFECTIVE_RESOLUTION_X; ++i)
|
||||
{
|
||||
// TODO: check z-buffer
|
||||
|
||||
int offsetX = (i / LCR_SETTING_SKY_SIZE + horizontalOffset)
|
||||
% LCR_SKY_IMAGE_SIZE;
|
||||
|
||||
uint16_t pixel = *(skyLine + offsetX / 2);
|
||||
|
||||
pixel = offsetX % 2 ? (pixel >> 8) : (pixel & 0x00ff);
|
||||
|
||||
LCR_drawPixelUnsafe(i,verticalOffset,LCR_skyImages[pixel]);
|
||||
}
|
||||
|
||||
verticalOffset++;
|
||||
|
||||
if (verticalOffset % LCR_SETTING_SKY_SIZE == 0)
|
||||
skyLine += LCR_SKY_IMAGE_SIZE / 2;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // guard
|
Loading…
Add table
Add a link
Reference in a new issue