mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-10 07:49:57 -04:00
Saturn: Textured rendering sort of works
This commit is contained in:
parent
c34ceeab92
commit
4b8266ab83
@ -28,6 +28,7 @@ static int cmdts_count;
|
|||||||
static vdp1_vram_partitions_t _vdp1_vram_partitions;
|
static vdp1_vram_partitions_t _vdp1_vram_partitions;
|
||||||
static void* tex_vram_addr;
|
static void* tex_vram_addr;
|
||||||
static void* tex_vram_cur;
|
static void* tex_vram_cur;
|
||||||
|
static cc_uint32* gourad_base;
|
||||||
|
|
||||||
static vdp1_cmdt_t* NextPrimitive(void) {
|
static vdp1_cmdt_t* NextPrimitive(void) {
|
||||||
if (cmdts_count >= CMDS_COUNT) Logger_Abort("Too many VDP1 commands");
|
if (cmdts_count >= CMDS_COUNT) Logger_Abort("Too many VDP1 commands");
|
||||||
@ -35,10 +36,12 @@ static vdp1_cmdt_t* NextPrimitive(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const vdp1_cmdt_draw_mode_t color_draw_mode = {
|
static const vdp1_cmdt_draw_mode_t color_draw_mode = {
|
||||||
.raw = 0x0000
|
.cc_mode = VDP1_CMDT_CC_REPLACE,
|
||||||
|
.color_mode = VDP1_CMDT_CM_RGB_32768
|
||||||
};
|
};
|
||||||
static const vdp1_cmdt_draw_mode_t texture_draw_mode = {
|
static const vdp1_cmdt_draw_mode_t texture_draw_mode = {
|
||||||
.cc_mode = PRIMITIVE_DRAW_MODE_GOURAUD_SHADING
|
.cc_mode = VDP1_CMDT_CC_GOURAUD,
|
||||||
|
.color_mode = VDP1_CMDT_CM_RGB_32768
|
||||||
};
|
};
|
||||||
|
|
||||||
static void UpdateVDP1Env(void) {
|
static void UpdateVDP1Env(void) {
|
||||||
@ -98,6 +101,7 @@ void Gfx_Create(void) {
|
|||||||
|
|
||||||
tex_vram_addr = _vdp1_vram_partitions.texture_base;
|
tex_vram_addr = _vdp1_vram_partitions.texture_base;
|
||||||
tex_vram_cur = _vdp1_vram_partitions.texture_base;
|
tex_vram_cur = _vdp1_vram_partitions.texture_base;
|
||||||
|
gourad_base = _vdp1_vram_partitions.gouraud_base;
|
||||||
|
|
||||||
UpdateVDP1Env();
|
UpdateVDP1Env();
|
||||||
CalcGouraudColours();
|
CalcGouraudColours();
|
||||||
@ -119,7 +123,9 @@ void Gfx_Free(void) {
|
|||||||
*---------------------------------------------------------Textures--------------------------------------------------------*
|
*---------------------------------------------------------Textures--------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
#define BGRA8_to_SATURN(src) \
|
#define BGRA8_to_SATURN(src) \
|
||||||
((src[2] & 0xF8) >> 3) | ((src[1] & 0xF8) << 2) | ((src[0] & 0xF8) << 7) | ((src[3] & 0x80) << 8)
|
((src[1] & 0xF8) >> 3) | ((src[2] & 0xF8) << 2) | ((src[3] & 0xF8) << 7) | 0x8000
|
||||||
|
// ((src[2] & 0xF8) >> 3) | ((src[1] & 0xF8) << 2) | ((src[0] & 0xF8) << 7) | ((src[3] & 0x80) << 8)
|
||||||
|
|
||||||
|
|
||||||
typedef struct CCTexture {
|
typedef struct CCTexture {
|
||||||
int width, height;
|
int width, height;
|
||||||
@ -133,7 +139,6 @@ static GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, int rowWidth, cc_uint8
|
|||||||
cc_uint16* tmp = Mem_TryAlloc(bmp->width * bmp->height, 2);
|
cc_uint16* tmp = Mem_TryAlloc(bmp->width * bmp->height, 2);
|
||||||
if (!tmp) return NULL;
|
if (!tmp) return NULL;
|
||||||
|
|
||||||
cc_uintptr addr = tex_vram_addr;
|
|
||||||
tex->addr = tex_vram_addr;
|
tex->addr = tex_vram_addr;
|
||||||
tex->width = bmp->width;
|
tex->width = bmp->width;
|
||||||
tex->height = bmp->height;
|
tex->height = bmp->height;
|
||||||
@ -149,7 +154,6 @@ static GfxResourceID Gfx_AllocTexture(struct Bitmap* bmp, int rowWidth, cc_uint8
|
|||||||
{
|
{
|
||||||
cc_uint8* color = (cc_uint8*)&src[x];
|
cc_uint8* color = (cc_uint8*)&src[x];
|
||||||
dst[x] = BGRA8_to_SATURN(color);
|
dst[x] = BGRA8_to_SATURN(color);
|
||||||
dst[x] = 0xFEDD;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,12 +498,15 @@ static void DrawTexturedQuads3D(int verticesCount, int startVertex) {
|
|||||||
vdp1_cmdt_color_set(cmd, RGB1555(1, R >> 3, G >> 3, B >> 3));
|
vdp1_cmdt_color_set(cmd, RGB1555(1, R >> 3, G >> 3, B >> 3));
|
||||||
vdp1_cmdt_draw_mode_set(cmd, color_draw_mode);
|
vdp1_cmdt_draw_mode_set(cmd, color_draw_mode);
|
||||||
vdp1_cmdt_vtx_set(cmd, points);*/
|
vdp1_cmdt_vtx_set(cmd, points);*/
|
||||||
|
int gIndex = ((R >> 5) << 7) | ((G >> 4) << 3) | (B >> 3);
|
||||||
|
|
||||||
|
|
||||||
cmd = NextPrimitive();
|
cmd = NextPrimitive();
|
||||||
vdp1_cmdt_distorted_sprite_set(cmd);
|
vdp1_cmdt_distorted_sprite_set(cmd);
|
||||||
vdp1_cmdt_char_size_set(cmd, 8, 8);
|
vdp1_cmdt_char_size_set(cmd, 8, 8);
|
||||||
vdp1_cmdt_char_base_set(cmd, (vdp1_vram_t)tex_vram_cur);
|
vdp1_cmdt_char_base_set(cmd, (vdp1_vram_t)tex_vram_cur);
|
||||||
vdp1_cmdt_draw_mode_set(cmd, texture_draw_mode);
|
vdp1_cmdt_draw_mode_set(cmd, texture_draw_mode);
|
||||||
|
vdp1_cmdt_gouraud_base_set(cmd, (vdp1_vram_t)&gourad_base[gIndex]);
|
||||||
vdp1_cmdt_vtx_set(cmd, points);
|
vdp1_cmdt_vtx_set(cmd, points);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user