Browse Source

Added support for setting the clear color to a generic sky color.

This is very basic and it does exacerbate the gaps between polygons on some maps, but at least we get to have something of a sky.
unrollquadloop
Nico de Poel 3 years ago
parent
commit
2cb5bcb856
  1. 13
      display.c
  2. 1
      display.h
  3. 1
      main.c
  4. 6
      ps1bsp.h
  5. BIN
      test.ps1bsp
  6. 1
      world.c
  7. 2
      world.h

13
display.c

@ -45,6 +45,8 @@ u_long *curOT;
// video mode and widescreen options to maintain a consistent aspect ratio.
VECTOR aspect_scale = { SCREENWIDTH * ONE / 320, ONE, ONE };
P_COLOR clearColor = { 0 };
u_short polyCount;
u_char enableTexturing = 1;
u_char enableVsync = 0;
@ -141,8 +143,8 @@ void display_reset(int mode, u_char interlaced, u_char widescreen, int *outScree
disp[0].screen.h = disp[1].screen.h = screenHeight;
// Set and enable clear color
setRGB0(&draw[0], 0, 0, 0);
setRGB0(&draw[1], 0, 0, 0);
setColor0(&draw[0], clearColor.color);
setColor0(&draw[1], clearColor.color);
draw[0].isbg = 1;
draw[0].dtd = 1;
draw[1].isbg = 1;
@ -154,6 +156,13 @@ void display_reset(int mode, u_char interlaced, u_char widescreen, int *outScree
*outScreenHeight = screenHeight;
}
void display_setClearColor(u_char color[4])
{
clearColor = *((P_COLOR*)color);
setColor0(&draw[0], clearColor.color);
setColor0(&draw[1], clearColor.color);
}
void display_start()
{
curOT = ot[db];

1
display.h

@ -16,6 +16,7 @@ extern u_char enableTexturing;
void display_init();
void display_reset(int mode, u_char interlaced, u_char widescreen, int *outScreenHeight);
void display_setClearColor(u_char color[4]);
void display_start();
void display_finish();

1
main.c

@ -53,6 +53,7 @@ int main(int argc, const char *argv[])
input_process();
display_start();
display_setClearColor(world.worldSpawn->skyColor);
u_short fps = time_getFrameRate();
FntPrint(-1, "Time: %d, frame: %d, delta time: %3d, fps: %d.%02d\n", (time_getRealTime() * 1000) >> 12, time_getFrameNumber(), time_getDeltaTime(), fps >> 8, ((fps & 0xFF) * 100) >> 8);

6
ps1bsp.h

@ -28,6 +28,7 @@ typedef struct
{
u_short version;
ps1bsp_dentry_t worldSpawn;
ps1bsp_dentry_t textures;
ps1bsp_dentry_t vertices;
ps1bsp_dentry_t polygons;
@ -42,6 +43,11 @@ typedef struct
ps1bsp_dentry_t models;
} ps1bsp_header_t;
typedef struct
{
unsigned char skyColor[4];
} ps1bsp_worldspawn_t;
typedef struct
{
unsigned short tpage; // Texture page in PS1 VRAM (precalculated when generating the texture atlas)

BIN
test.ps1bsp

1
world.c

@ -39,6 +39,7 @@ void world_load(const u_long *data, world_t *world)
ps1bsp_header_t* header = (ps1bsp_header_t*)bytes;
LOAD_CHUNK(ps1bsp_worldspawn_t, world->worldSpawn, world->numTextures, bytes, header->worldSpawn);
LOAD_CHUNK(ps1bsp_texture_t, world->textures, world->numTextures, bytes, header->textures);
LOAD_CHUNK(ps1bsp_vertex_t, world->vertices, world->numVertices, bytes, header->vertices);
LOAD_CHUNK(ps1bsp_polygon_t, world->polygons, world->numPolygons, bytes, header->polygons);

2
world.h

@ -5,6 +5,8 @@
typedef struct
{
ps1bsp_worldspawn_t *worldSpawn;
u_short numTextures;
ps1bsp_texture_t *textures;

Loading…
Cancel
Save