mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-12-03 14:42:39 +00:00
Add gsDPSetEnvRGB() (#997)
This command sets the RGB values of a material's environment color without setting the alpha. This is important, as functions like `geo_update_layer_transparency()` use the environment color alpha to control a model's overall opacity. However, if one of the model's materials sets its own environment color alpha, then that will take priority. This command allows these models to still use environment colors in their materials.
This commit is contained in:
parent
26f9799621
commit
458d683e41
7 changed files with 24 additions and 1 deletions
|
|
@ -112,7 +112,8 @@ include_constants = {
|
|||
],
|
||||
"include/PR/gbi_extension.h": [
|
||||
"^G_VTX_EXT$",
|
||||
"^G_PPARTTOCOLOR$"
|
||||
"^G_PPARTTOCOLOR$",
|
||||
"^G_SETENVRGB$"
|
||||
],
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2944,6 +2944,9 @@ G_TEXRECT = 0xe4
|
|||
--- @type integer
|
||||
G_VTX_EXT = 0x11
|
||||
|
||||
--- @type integer
|
||||
G_SETENVRGB = 0xd1
|
||||
|
||||
--- @type integer
|
||||
G_PPARTTOCOLOR = 0xd3
|
||||
|
||||
|
|
|
|||
|
|
@ -1298,6 +1298,7 @@
|
|||
|
||||
## [gbi_extension.h](#gbi_extension.h)
|
||||
- G_VTX_EXT
|
||||
- G_SETENVRGB
|
||||
- G_PPARTTOCOLOR
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
|
|
|||
|
|
@ -97,6 +97,13 @@
|
|||
#define gDPSetTextureClippingDjui(pkt, x1, y1, x2, y2) gSetClippingDjui(pkt, G_TEXCLIP_DJUI, x1, y1, x2, y2)
|
||||
#define gDPSetTextureOverrideDjui(pkt, texture, w, h, bitSize) gSetOverrideDjui(pkt, G_TEXOVERRIDE_DJUI, texture, w, h, bitSize)
|
||||
|
||||
////////////////////
|
||||
// RDP commands //
|
||||
////////////////////
|
||||
#define G_SETENVRGB 0xd1
|
||||
#define gsDPSetEnvRGB(r, g, b) \
|
||||
sDPRGBColor(G_SETENVRGB, r,g,b,255)
|
||||
|
||||
////////////////////
|
||||
// G_PPARTTOCOLOR //
|
||||
////////////////////
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ define_gfx_symbol(gsSPGeometryMode, 2, false, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE
|
|||
define_gfx_symbol(gsSPGeometryModeSetFirst, 2, false, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT);
|
||||
define_gfx_symbol(gsDPSetPrimColor, 6, false, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT);
|
||||
define_gfx_symbol(gsDPSetEnvColor, 4, false, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT);
|
||||
define_gfx_symbol(gsDPSetEnvRGB, 3, false, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT);
|
||||
define_gfx_symbol(gsDPSetFogColor, 4, false, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT);
|
||||
define_gfx_symbol(gsSPFogPosition, 2, false, GFX_PARAM_TYPE_INT, GFX_PARAM_TYPE_INT);
|
||||
define_gfx_symbol(gsDPSetAlphaCompare, 1, false, GFX_PARAM_TYPE_INT);
|
||||
|
|
|
|||
|
|
@ -1509,6 +1509,12 @@ static void gfx_dp_set_env_color(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
|
|||
rdp.env_color.a = a;
|
||||
}
|
||||
|
||||
static void gfx_dp_set_env_rgb(uint8_t r, uint8_t g, uint8_t b) {
|
||||
rdp.env_color.r = r;
|
||||
rdp.env_color.g = g;
|
||||
rdp.env_color.b = b;
|
||||
}
|
||||
|
||||
static void gfx_dp_set_prim_color(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
|
||||
rdp.prim_color.r = r;
|
||||
rdp.prim_color.g = g;
|
||||
|
|
@ -1848,6 +1854,9 @@ static void OPTIMIZE_O3 gfx_run_dl(Gfx* cmd) {
|
|||
case G_SETENVCOLOR:
|
||||
gfx_dp_set_env_color(C1(24, 8), C1(16, 8), C1(8, 8), C1(0, 8));
|
||||
break;
|
||||
case G_SETENVRGB:
|
||||
gfx_dp_set_env_rgb(C1(24, 8), C1(16, 8), C1(8, 8));
|
||||
break;
|
||||
case G_SETPRIMCOLOR:
|
||||
gfx_dp_set_prim_color(C1(24, 8), C1(16, 8), C1(8, 8), C1(0, 8));
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1523,6 +1523,7 @@ char gSmluaConstants[] = ""
|
|||
"G_TEXRECTFLIP=0xe5\n"
|
||||
"G_TEXRECT=0xe4\n"
|
||||
"G_VTX_EXT=0x11\n"
|
||||
"G_SETENVRGB=0xd1\n"
|
||||
"G_PPARTTOCOLOR=0xd3\n"
|
||||
"BACKGROUND_OCEAN_SKY=0\n"
|
||||
"BACKGROUND_FLAMING_SKY=1\n"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue