1
0
Fork 0
mirror of https://git.coom.tech/drummyfish/small3dlib.git synced 2024-11-23 20:59:58 +01:00

Optimize examples

This commit is contained in:
Miloslav Ciz 2022-04-16 22:58:49 +02:00
parent 7670658db6
commit c1225cfbbc
3 changed files with 41 additions and 50 deletions

View file

@ -81,16 +81,13 @@ void clearScreen()
static inline void setPixel(int x, int y, uint8_t red, uint8_t green, uint8_t blue) static inline void setPixel(int x, int y, uint8_t red, uint8_t green, uint8_t blue)
{ {
uint32_t r = red & 0x000000FF; uint8_t *p = ((uint8_t *) pixels) + (y * S3L_RESOLUTION_X + x) * 4 + 1;
r = r << 24;
uint32_t g = green & 0x000000FF; *p = blue;
g = g << 16; ++p;
*p = green;
uint32_t b = blue & 0x000000FF; ++p;
b = b << 8; *p = red;
pixels[y * S3L_RESOLUTION_X + x] = r | g | b;
} }
void sampleTexture(int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b) void sampleTexture(int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b)
@ -98,13 +95,13 @@ void sampleTexture(int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b)
u = S3L_clamp(u,0,CITY_TEXTURE_WIDTH - 1); u = S3L_clamp(u,0,CITY_TEXTURE_WIDTH - 1);
v = S3L_clamp(v,0,CITY_TEXTURE_HEIGHT - 1); v = S3L_clamp(v,0,CITY_TEXTURE_HEIGHT - 1);
int32_t index = (v * CITY_TEXTURE_WIDTH + u) * 3; const uint8_t *t = cityTexture + (v * CITY_TEXTURE_WIDTH + u) * 3;
*r = cityTexture[index]; *r = *t;
index++; t++;
*g = cityTexture[index]; *g = *t;
index++; t++;
*b = cityTexture[index]; *b = *t;
} }
uint32_t previousTriangle = -1; uint32_t previousTriangle = -1;

View file

@ -6,6 +6,7 @@
*/ */
#define TEXTURES 1 // whether to use textures for the level #define TEXTURES 1 // whether to use textures for the level
#define FOG 1
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include <stdio.h> #include <stdio.h>
@ -53,16 +54,13 @@ void clearScreen()
static inline void setPixel(int x, int y, uint8_t red, uint8_t green, uint8_t blue) static inline void setPixel(int x, int y, uint8_t red, uint8_t green, uint8_t blue)
{ {
uint32_t r = red & 0x000000FF; uint8_t *p = ((uint8_t *) pixels) + (y * S3L_resolutionX + x) * 4 + 1;
r = r << 24;
uint32_t g = green & 0x000000FF; *p = blue;
g = g << 16; ++p;
*p = green;
uint32_t b = blue & 0x000000FF; ++p;
b = b << 8; *p = red;
pixels[y * S3L_resolutionX + x] = r | g | b;
} }
void sampleTexture(S3L_Unit u, S3L_Unit v, uint8_t *r, uint8_t *g, uint8_t *b) void sampleTexture(S3L_Unit u, S3L_Unit v, uint8_t *r, uint8_t *g, uint8_t *b)
@ -73,13 +71,13 @@ void sampleTexture(S3L_Unit u, S3L_Unit v, uint8_t *r, uint8_t *g, uint8_t *b)
u = S3L_wrap(u,LEVEL_TEXTURE_WIDTH); u = S3L_wrap(u,LEVEL_TEXTURE_WIDTH);
v = S3L_wrap(v,LEVEL_TEXTURE_HEIGHT); v = S3L_wrap(v,LEVEL_TEXTURE_HEIGHT);
uint32_t index = (v * LEVEL_TEXTURE_WIDTH + u) * 3; const uint8_t *t = texture + (v * LEVEL_TEXTURE_WIDTH + u) * 3;
*r = texture[index]; *r = *t;
index++; t++;
*g = texture[index]; *g = *t;
index++; t++;
*b = texture[index]; *b = *t;
} }
void drawTeleport(int16_t x, int16_t y, S3L_ScreenCoord size) void drawTeleport(int16_t x, int16_t y, S3L_ScreenCoord size)
@ -161,6 +159,7 @@ void drawPixel(S3L_PixelInfo *p)
} }
#endif #endif
#if FOG
S3L_Unit fog = (p->depth * S3L_Unit fog = (p->depth *
#if TEXTURES #if TEXTURES
8 8
@ -172,6 +171,7 @@ void drawPixel(S3L_PixelInfo *p)
r = S3L_clamp(((S3L_Unit) r) - fog,0,255); r = S3L_clamp(((S3L_Unit) r) - fog,0,255);
g = S3L_clamp(((S3L_Unit) g) - fog,0,255); g = S3L_clamp(((S3L_Unit) g) - fog,0,255);
b = S3L_clamp(((S3L_Unit) b) - fog,0,255); b = S3L_clamp(((S3L_Unit) b) - fog,0,255);
#endif
setPixel(p->x,p->y,r,g,b); setPixel(p->x,p->y,r,g,b);
} }

View file

@ -98,19 +98,13 @@ void clearScreen()
static inline void setPixel(int x, int y, uint8_t red, uint8_t green, uint8_t blue) static inline void setPixel(int x, int y, uint8_t red, uint8_t green, uint8_t blue)
{ {
if (x < 0 || x >= S3L_RESOLUTION_X || y < 0 || y >= S3L_RESOLUTION_Y) uint8_t *p = ((uint8_t *) pixels) + (y * S3L_RESOLUTION_X + x) * 4 + 1;
return;
uint32_t r = red & 0x000000FF; *p = blue;
r = r << 24; ++p;
*p = green;
uint32_t g = green & 0x000000FF; ++p;
g = g << 16; *p = red;
uint32_t b = blue & 0x000000FF;
b = b << 8;
pixels[y * S3L_RESOLUTION_X + x] = r | g | b;
} }
void sampleTexture(int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b) void sampleTexture(int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b)
@ -118,13 +112,13 @@ void sampleTexture(int32_t u, int32_t v, uint8_t *r, uint8_t *g, uint8_t *b)
u = S3L_clamp(u,0,TEXTURE_W - 1); u = S3L_clamp(u,0,TEXTURE_W - 1);
v = S3L_clamp(v,0,TEXTURE_H - 1); v = S3L_clamp(v,0,TEXTURE_H - 1);
int32_t index = (v * TEXTURE_W + u) * 3; const uint8_t *t = texture + (v * TEXTURE_W + u) * 3;
*r = texture[index]; *r = *t;
index++; t++;
*g = texture[index]; *g = *t;
index++; t++;
*b = texture[index]; *b = *t;
} }
void animate(double time) void animate(double time)
@ -310,7 +304,7 @@ void drawPixel(S3L_PixelInfo *p)
setPixel(p->x,p->y,r,g,b); setPixel(p->x,p->y,r,g,b);
} }
void draw() void draw(void)
{ {
S3L_newFrame(); S3L_newFrame();
clearScreen(); clearScreen();
@ -366,7 +360,7 @@ void setModel(uint8_t index)
int16_t fps = 0; int16_t fps = 0;
int main() int main(void)
{ {
printHelp(); printHelp();