mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-04-25 19:42:20 +00:00
Screen shader effects for Lua [OpenGL]
Hue, saturation, brightness, contrast, exposure, dithering, posterization Global = usually an object in the world Non global = usually a screen element Also: * Changed skyboxes to use environment color instead of vertex color, visually identical * Changed hud head texture to be non global * changed power meter to be non global * changed sparkles to be global * changed some BBH vertex types to global OpenGL renderer supported only for now.
This commit is contained in:
parent
d8b6aa7d38
commit
6506af08cb
33 changed files with 465 additions and 68 deletions
|
|
@ -56,7 +56,7 @@ const Gfx dl_power_meter_base[] = {
|
|||
gsDPSetRenderMode(G_RM_TEX_EDGE, G_RM_TEX_EDGE2),
|
||||
gsDPSetTextureFilter(G_TF_POINT),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
gsSPVertex(vertex_power_meter_base, 8, 0),
|
||||
gsSPVertexNonGlobal(vertex_power_meter_base, 8, 0),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
|
||||
gsDPTileSync(),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 6, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
|
||||
|
|
@ -78,7 +78,7 @@ ROM_ASSET_LOAD_VTX(vertex_power_meter_health_segments, 0x00201410, 96653, 0x0002
|
|||
// 0x03029570 - 0x030295A0
|
||||
const Gfx dl_power_meter_health_segments_begin[] = {
|
||||
gsDPPipeSync(),
|
||||
gsSPVertex(vertex_power_meter_health_segments, 4, 0),
|
||||
gsSPVertexNonGlobal(vertex_power_meter_health_segments, 4, 0),
|
||||
gsDPTileSync(),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
|
||||
gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC),
|
||||
|
|
|
|||
|
|
@ -22,14 +22,14 @@ ROM_ASSET_LOAD_TEXTURE(sparkles_animation_seg4_texture_04034A88, "actors/sparkle
|
|||
// 0x04035288 - 0x04035300
|
||||
const Gfx sparkles_animation_seg4_dl_04035288[] = {
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetCombineMode(G_CC_MODULATEIA, G_CC_MODULATEIA),
|
||||
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
gsDPSetTile(G_IM_FMT_IA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsDPSetTile(G_IM_FMT_IA, G_IM_SIZ_16b, 8, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 5, G_TX_NOLOD),
|
||||
gsDPSetTileSize(0, 0, 0, (32 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC),
|
||||
gsSPVertexNonGlobal(sparkles_animation_seg4_vertex_04032A48, 4, 0),
|
||||
gsSPVertex(sparkles_animation_seg4_vertex_04032A48, 4, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
|
||||
gsSPSetGeometryMode(G_LIGHTING),
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ in_files = [
|
|||
"src/engine/lighting_engine.h",
|
||||
"include/PR/gbi.h",
|
||||
"include/PR/gbi_extension.h",
|
||||
"src/pc/gfx/gfx_pc.h",
|
||||
]
|
||||
|
||||
exclude_constants = {
|
||||
|
|
|
|||
|
|
@ -2975,6 +2975,25 @@ BACKGROUND_CUSTOM = 10 --- @type SkyBackgroundParams
|
|||
--- | `BACKGROUND_PURPLE_SKY`
|
||||
--- | `BACKGROUND_CUSTOM`
|
||||
|
||||
SHADER_FLAG_HUE = 0 --- @type ShaderFlag
|
||||
SHADER_FLAG_SATURATION = 1 --- @type ShaderFlag
|
||||
SHADER_FLAG_BRIGHTNESS = 2 --- @type ShaderFlag
|
||||
SHADER_FLAG_CONTRAST = 3 --- @type ShaderFlag
|
||||
SHADER_FLAG_EXPOSURE = 4 --- @type ShaderFlag
|
||||
SHADER_FLAG_DITHERING = 5 --- @type ShaderFlag
|
||||
SHADER_FLAG_POSTERIZATION = 6 --- @type ShaderFlag
|
||||
SHADER_FLAG_MAX = 7 --- @type ShaderFlag
|
||||
|
||||
--- @alias ShaderFlag
|
||||
--- | `SHADER_FLAG_HUE`
|
||||
--- | `SHADER_FLAG_SATURATION`
|
||||
--- | `SHADER_FLAG_BRIGHTNESS`
|
||||
--- | `SHADER_FLAG_CONTRAST`
|
||||
--- | `SHADER_FLAG_EXPOSURE`
|
||||
--- | `SHADER_FLAG_DITHERING`
|
||||
--- | `SHADER_FLAG_POSTERIZATION`
|
||||
--- | `SHADER_FLAG_MAX`
|
||||
|
||||
--- @type integer
|
||||
GRAPH_RENDER_ACTIVE = (1 << 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -10684,6 +10684,31 @@ function surface_is_painting_warp(surf)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param flag ShaderFlag
|
||||
--- @param enabled boolean
|
||||
--- Enables a custom shader flag (`SHADER_FLAG_*`) for the renderer
|
||||
function enable_gfx_shader_flag(flag, enabled)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param flag ShaderFlag
|
||||
--- @param value number
|
||||
--- Sets a value for one of the custom shader flags (`SHADER_FLAG_*`) for the renderer
|
||||
function set_gfx_shader_flag_value(flag, value)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param enabled boolean
|
||||
--- Enables custom shader flags applying to everything, including HUD elements and menus
|
||||
function enable_gfx_shader_flags_screen(enabled)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- Clears all custom shader flags (`SHADER_FLAG_*`) for the renderer
|
||||
function clear_all_gfx_shader_flags()
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param fov number
|
||||
--- Sets the override FOV
|
||||
function set_override_fov(fov)
|
||||
|
|
|
|||
|
|
@ -2357,7 +2357,7 @@ const Gfx dl_transition_draw_filled_region[] = {
|
|||
const Gfx dl_skybox_begin[] = {
|
||||
gsDPPipeSync(),
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB),
|
||||
gsDPSetCombineMode(G_CC_FADEA, G_CC_FADEA),
|
||||
gsSPPerspNormalize(0xFFFF),
|
||||
gsSPMatrix(&matrix_identity, G_MTX_PROJECTION | G_MTX_LOAD | G_MTX_NOPUSH),
|
||||
gsSPEndDisplayList(),
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@
|
|||
- [gbi_extension.h](#gbi_extensionh)
|
||||
- [geo_commands.h](#geo_commandsh)
|
||||
- [enum SkyBackgroundParams](#enum-SkyBackgroundParams)
|
||||
- [gfx_pc.h](#gfx_pch)
|
||||
- [enum ShaderFlag](#enum-ShaderFlag)
|
||||
- [graph_node.h](#graph_nodeh)
|
||||
- [interaction.c](#interactionc)
|
||||
- [interaction.h](#interactionh)
|
||||
|
|
@ -1326,6 +1328,24 @@
|
|||
|
||||
<br />
|
||||
|
||||
## [gfx_pc.h](#gfx_pc.h)
|
||||
|
||||
### [enum ShaderFlag](#ShaderFlag)
|
||||
| Identifier | Value |
|
||||
| :--------- | :---- |
|
||||
| SHADER_FLAG_HUE | 0 |
|
||||
| SHADER_FLAG_SATURATION | 1 |
|
||||
| SHADER_FLAG_BRIGHTNESS | 2 |
|
||||
| SHADER_FLAG_CONTRAST | 3 |
|
||||
| SHADER_FLAG_EXPOSURE | 4 |
|
||||
| SHADER_FLAG_DITHERING | 5 |
|
||||
| SHADER_FLAG_POSTERIZATION | 6 |
|
||||
| SHADER_FLAG_MAX | 7 |
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [graph_node.h](#graph_node.h)
|
||||
- GRAPH_RENDER_ACTIVE
|
||||
- GRAPH_RENDER_CHILDREN_FIRST
|
||||
|
|
|
|||
|
|
@ -7459,6 +7459,98 @@ Checks if the surface is a painting warp
|
|||
<br />
|
||||
|
||||
|
||||
## [enable_gfx_shader_flag](#enable_gfx_shader_flag)
|
||||
|
||||
### Description
|
||||
Enables a custom shader flag (`SHADER_FLAG_*`) for the renderer
|
||||
|
||||
### Lua Example
|
||||
`enable_gfx_shader_flag(flag, enabled)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| flag | [enum ShaderFlag](constants.md#enum-ShaderFlag) |
|
||||
| enabled | `boolean` |
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void enable_gfx_shader_flag(enum ShaderFlag flag, bool enabled);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [set_gfx_shader_flag_value](#set_gfx_shader_flag_value)
|
||||
|
||||
### Description
|
||||
Sets a value for one of the custom shader flags (`SHADER_FLAG_*`) for the renderer
|
||||
|
||||
### Lua Example
|
||||
`set_gfx_shader_flag_value(flag, value)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| flag | [enum ShaderFlag](constants.md#enum-ShaderFlag) |
|
||||
| value | `number` |
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void set_gfx_shader_flag_value(enum ShaderFlag flag, f32 value);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [enable_gfx_shader_flags_screen](#enable_gfx_shader_flags_screen)
|
||||
|
||||
### Description
|
||||
Enables custom shader flags applying to everything, including HUD elements and menus
|
||||
|
||||
### Lua Example
|
||||
`enable_gfx_shader_flags_screen(enabled)`
|
||||
|
||||
### Parameters
|
||||
| Field | Type |
|
||||
| ----- | ---- |
|
||||
| enabled | `boolean` |
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void enable_gfx_shader_flags_screen(bool enabled);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [clear_all_gfx_shader_flags](#clear_all_gfx_shader_flags)
|
||||
|
||||
### Description
|
||||
Clears all custom shader flags (`SHADER_FLAG_*`) for the renderer
|
||||
|
||||
### Lua Example
|
||||
`clear_all_gfx_shader_flags()`
|
||||
|
||||
### Parameters
|
||||
- None
|
||||
|
||||
### Returns
|
||||
- None
|
||||
|
||||
### C Prototype
|
||||
`void clear_all_gfx_shader_flags(void);`
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [set_override_fov](#set_override_fov)
|
||||
|
||||
### Description
|
||||
|
|
|
|||
|
|
@ -1916,6 +1916,10 @@
|
|||
<br />
|
||||
|
||||
- smlua_gfx_utils.h
|
||||
- [enable_gfx_shader_flag](functions-6.md#enable_gfx_shader_flag)
|
||||
- [set_gfx_shader_flag_value](functions-6.md#set_gfx_shader_flag_value)
|
||||
- [enable_gfx_shader_flags_screen](functions-6.md#enable_gfx_shader_flags_screen)
|
||||
- [clear_all_gfx_shader_flags](functions-6.md#clear_all_gfx_shader_flags)
|
||||
- [set_override_fov](functions-6.md#set_override_fov)
|
||||
- [set_override_near](functions-6.md#set_override_near)
|
||||
- [set_override_far](functions-6.md#set_override_far)
|
||||
|
|
|
|||
|
|
@ -19,26 +19,26 @@ static const Gfx bbh_seg7_dl_0700B8A8[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, spooky_09006800),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700B488, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700B488, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0),
|
||||
gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 5, 10, 11, 0x0, 5, 1, 10, 0x0),
|
||||
gsSP1Triangle(12, 13, 14, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700B578, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700B578, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 7, 4, 8, 0x0, 10, 11, 12, 0x0),
|
||||
gsSP2Triangles(10, 13, 11, 0x0, 14, 13, 15, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700B678, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700B678, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 6, 7, 8, 0x0, 9, 10, 11, 0x0),
|
||||
gsSP1Triangle(12, 13, 14, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700B768, 14, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700B768, 14, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0),
|
||||
gsSP2Triangles( 4, 1, 5, 0x0, 4, 5, 6, 0x0),
|
||||
gsSP2Triangles( 7, 8, 9, 0x0, 7, 10, 8, 0x0),
|
||||
gsSP2Triangles(11, 10, 12, 0x0, 11, 13, 10, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700B848, 6, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700B848, 6, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
|
@ -46,7 +46,7 @@ static const Gfx bbh_seg7_dl_0700B8A8[] = {
|
|||
// 0x0700B9E0 - 0x0700BA50
|
||||
const Gfx bbh_seg7_dl_0700B9E0[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB),
|
||||
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ static const Gfx bbh_seg7_dl_0700BB50[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B000),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700BA50, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700BA50, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 5, 6, 0x0, 7, 4, 3, 0x0),
|
||||
gsSP2Triangles( 7, 8, 4, 0x0, 6, 5, 9, 0x0),
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@ static const Gfx bbh_seg7_dl_0700D6F0[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B000),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700D500, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700D500, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 6, 4, 0x0, 7, 6, 3, 0x0),
|
||||
gsSP2Triangles( 7, 8, 6, 0x0, 5, 4, 9, 0x0),
|
||||
gsSP2Triangles( 5, 9, 10, 0x0, 10, 9, 8, 0x0),
|
||||
gsSP2Triangles(10, 8, 7, 0x0, 11, 1, 0, 0x0),
|
||||
gsSP2Triangles( 0, 2, 12, 0x0, 13, 14, 15, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700D600, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700D600, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 5, 6, 0x0, 6, 5, 1, 0x0),
|
||||
gsSP2Triangles( 6, 1, 0, 0x0, 7, 8, 9, 0x0),
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ static const Gfx bbh_seg7_dl_07012680[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B000),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07012580, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07012580, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0),
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@ static const Gfx bbh_seg7_dl_07015930[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, spooky_09006800),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07015750, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07015750, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0),
|
||||
gsSP2Triangles( 3, 4, 2, 0x0, 4, 0, 2, 0x0),
|
||||
gsSP2Triangles( 5, 6, 7, 0x0, 8, 5, 7, 0x0),
|
||||
gsSP2Triangles( 6, 9, 7, 0x0, 9, 8, 7, 0x0),
|
||||
gsSP2Triangles(10, 11, 12, 0x0, 11, 13, 12, 0x0),
|
||||
gsSP2Triangles(13, 14, 12, 0x0, 14, 10, 12, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07015840, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07015840, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 1, 3, 2, 0x0),
|
||||
gsSP2Triangles( 3, 4, 2, 0x0, 4, 0, 2, 0x0),
|
||||
gsSP2Triangles( 5, 6, 7, 0x0, 8, 5, 7, 0x0),
|
||||
|
|
@ -30,7 +30,7 @@ static const Gfx bbh_seg7_dl_07015930[] = {
|
|||
// 0x07015A20 - 0x07015A90
|
||||
const Gfx bbh_seg7_dl_07015A20[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB),
|
||||
gsDPSetCombineMode(G_CC_DECALRGBA, G_CC_DECALRGBA),
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ static const Gfx bbh_seg7_dl_070176E0[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B000),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_070175E0, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_070175E0, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 5, 6, 0x0, 7, 4, 3, 0x0),
|
||||
gsSP2Triangles( 7, 8, 4, 0x0, 6, 5, 9, 0x0),
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ static const Gfx bbh_seg7_dl_0701EE90[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B800),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0701EE08, 4, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0701EE08, 4, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ static const Gfx bbh_seg7_dl_0701F018[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, spooky_09006800),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0701EF58, 12, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0701EF58, 12, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0),
|
||||
gsSP2Triangles( 4, 3, 5, 0x0, 4, 6, 3, 0x0),
|
||||
gsSP2Triangles( 7, 8, 9, 0x0, 10, 5, 11, 0x0),
|
||||
|
|
@ -17,7 +17,7 @@ static const Gfx bbh_seg7_dl_0701F018[] = {
|
|||
// 0x0701F070 - 0x0701F0E0
|
||||
const Gfx bbh_seg7_dl_0701F070[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB),
|
||||
gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB),
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
|
|
|
|||
|
|
@ -13,17 +13,17 @@ static const Gfx bbh_seg7_dl_07007EE8[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B800),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07007C08, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07007C08, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 7, 10, 8, 0x0, 11, 12, 13, 0x0),
|
||||
gsSP1Triangle(11, 13, 14, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07007CF8, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07007CF8, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 6, 7, 8, 0x0, 6, 9, 7, 0x0),
|
||||
gsSP2Triangles(10, 11, 12, 0x0, 10, 13, 11, 0x0),
|
||||
gsSP1Triangle( 0, 2, 14, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07007DE8, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07007DE8, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 6, 4, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0),
|
||||
|
|
|
|||
|
|
@ -31,45 +31,45 @@ static const Gfx bbh_seg7_dl_070088E0[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, spooky_09006800),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008040, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008040, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles( 4, 5, 6, 0x0, 7, 0, 8, 0x0),
|
||||
gsSP2Triangles( 9, 1, 10, 0x0, 9, 11, 1, 0x0),
|
||||
gsSP2Triangles(12, 13, 14, 0x0, 12, 15, 13, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008140, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008140, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 1, 6, 7, 0x0, 1, 7, 8, 0x0),
|
||||
gsSP2Triangles( 9, 10, 11, 0x0, 9, 11, 12, 0x0),
|
||||
gsSP2Triangles(13, 14, 10, 0x0, 13, 10, 15, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008240, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008240, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 6, 7, 8, 0x0, 6, 8, 9, 0x0),
|
||||
gsSP2Triangles(10, 11, 12, 0x0, 13, 6, 14, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008330, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008330, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 3, 1, 0x0),
|
||||
gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 5, 10, 11, 0x0, 5, 11, 12, 0x0),
|
||||
gsSP2Triangles(13, 14, 10, 0x0, 13, 10, 15, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008430, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008430, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 5, 2, 10, 0x0, 5, 10, 11, 0x0),
|
||||
gsSP2Triangles(12, 13, 14, 0x0, 12, 14, 15, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008530, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008530, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles( 4, 5, 6, 0x0, 7, 0, 8, 0x0),
|
||||
gsSP2Triangles( 9, 10, 11, 0x0, 12, 13, 14, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008620, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008620, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles( 4, 2, 5, 0x0, 4, 5, 6, 0x0),
|
||||
gsSP2Triangles( 7, 8, 9, 0x0, 7, 9, 10, 0x0),
|
||||
gsSP2Triangles(11, 12, 13, 0x0, 14, 10, 15, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008720, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008720, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles( 4, 5, 6, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles(10, 11, 5, 0x0, 10, 12, 11, 0x0),
|
||||
gsSP2Triangles(13, 14, 15, 0x0, 13, 11, 14, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008820, 12, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008820, 12, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 0, 2, 3, 0x0),
|
||||
gsSP2Triangles( 4, 5, 6, 0x0, 7, 3, 8, 0x0),
|
||||
gsSP2Triangles( 9, 2, 10, 0x0, 9, 10, 11, 0x0),
|
||||
|
|
@ -79,7 +79,7 @@ static const Gfx bbh_seg7_dl_070088E0[] = {
|
|||
// 0x07008B58 - 0x07008BC8
|
||||
const Gfx bbh_seg7_dl_07008B58[] = {
|
||||
gsDPPipeSync(),
|
||||
gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB),
|
||||
gsDPSetCombineMode(G_CC_DECALRGB, G_CC_DECALRGB),
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
|
||||
gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
|
||||
|
|
|
|||
|
|
@ -10,14 +10,14 @@ static const Gfx bbh_seg7_dl_07008DB8[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B000),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 32 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008BC8, 16, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008BC8, 16, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 6, 4, 0x0, 7, 6, 3, 0x0),
|
||||
gsSP2Triangles( 7, 8, 6, 0x0, 5, 4, 9, 0x0),
|
||||
gsSP2Triangles( 5, 9, 10, 0x0, 10, 9, 8, 0x0),
|
||||
gsSP2Triangles(10, 8, 7, 0x0, 11, 1, 0, 0x0),
|
||||
gsSP2Triangles( 0, 2, 12, 0x0, 13, 14, 15, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_07008CC8, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_07008CC8, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 5, 6, 0x0, 6, 5, 1, 0x0),
|
||||
gsSP2Triangles( 6, 1, 0, 0x0, 7, 8, 9, 0x0),
|
||||
|
|
|
|||
|
|
@ -10,12 +10,12 @@ static const Gfx bbh_seg7_dl_0700B398[] = {
|
|||
gsDPSetTextureImage(G_IM_FMT_IA, G_IM_SIZ_16b, 1, spooky_0900B800),
|
||||
gsDPLoadSync(),
|
||||
gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 32 * 64 - 1, CALC_DXT(32, G_IM_SIZ_16b_BYTES)),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700B238, 15, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700B238, 15, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP2Triangles( 3, 5, 6, 0x0, 7, 8, 9, 0x0),
|
||||
gsSP2Triangles( 7, 9, 10, 0x0, 11, 12, 13, 0x0),
|
||||
gsSP1Triangle(11, 14, 12, 0x0),
|
||||
gsSPVertexNonGlobal(bbh_seg7_vertex_0700B328, 7, 0),
|
||||
gsSPVertex(bbh_seg7_vertex_0700B328, 7, 0),
|
||||
gsSP2Triangles( 0, 1, 2, 0x0, 3, 4, 5, 0x0),
|
||||
gsSP1Triangle( 0, 6, 1, 0x0),
|
||||
gsSPEndDisplayList(),
|
||||
|
|
|
|||
|
|
@ -325,7 +325,7 @@ void render_hud_icon(Vtx *vtx, const Texture *texture, u32 fmt, u32 siz, s32 tex
|
|||
case G_IM_SIZ_16b: gDPLoadTextureBlock(gDisplayListHead++, texture, fmt, G_IM_SIZ_16b, texW, texH, 0, G_TX_CLAMP, G_TX_CLAMP, 0, 0, 0, 0); break;
|
||||
case G_IM_SIZ_32b: gDPLoadTextureBlock(gDisplayListHead++, texture, fmt, G_IM_SIZ_32b, texW, texH, 0, G_TX_CLAMP, G_TX_CLAMP, 0, 0, 0, 0); break;
|
||||
}
|
||||
gSPVertex(gDisplayListHead++, vtx, 4, 0);
|
||||
gSPVertexNonGlobal(gDisplayListHead++, vtx, 4, 0);
|
||||
gSP2Triangles(gDisplayListHead++, 0, 1, 2, 0x0, 0, 2, 3, 0x0);
|
||||
gSPTexture(gDisplayListHead++, 0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF);
|
||||
gDPSetCombineMode(gDisplayListHead++, G_CC_SHADE, G_CC_SHADE);
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ f32 calculate_skybox_scaled_y(s8 player, UNUSED f32 fov) {
|
|||
* into an x and y by modulus and division by SKYBOX_COLS. x and y are then scaled by
|
||||
* SKYBOX_TILE_WIDTH to get a point in world space.
|
||||
*/
|
||||
Vtx *make_skybox_rect(s32 tileRow, s32 tileCol, s8 colorIndex, s32 row, s32 col) {
|
||||
Vtx *make_skybox_rect(s32 tileRow, s32 tileCol, s32 row, s32 col) {
|
||||
u16 index = row * sSkyboxTileNumX + col;
|
||||
Vtx *verts;
|
||||
if (gRenderingInterpolated) {
|
||||
|
|
@ -205,14 +205,10 @@ Vtx *make_skybox_rect(s32 tileRow, s32 tileCol, s8 colorIndex, s32 row, s32 col)
|
|||
f32 y = SKYBOX_HEIGHT - tileRow / SKYBOX_COLS * SKYBOX_TILE_HEIGHT;
|
||||
|
||||
if (verts != NULL) {
|
||||
f32 r = gSkyboxColor[0] / 255.0f;
|
||||
f32 g = gSkyboxColor[1] / 255.0f;
|
||||
f32 b = gSkyboxColor[2] / 255.0f;
|
||||
u8 *colors = sSkyboxColors[colorIndex];
|
||||
make_vertex(verts, 0, x, y, -1, 0, 0, colors[0] * r, colors[1] * g, colors[2] * b, 255);
|
||||
make_vertex(verts, 1, x, y - SKYBOX_TILE_HEIGHT, -1, 0, 31 << 5, colors[0] * r, colors[1] * g, colors[2] * b, 255);
|
||||
make_vertex(verts, 2, x + SKYBOX_TILE_WIDTH, y - SKYBOX_TILE_HEIGHT, -1, 31 << 5, 31 << 5, colors[0] * r, colors[1] * g, colors[2] * b, 255);
|
||||
make_vertex(verts, 3, x + SKYBOX_TILE_WIDTH, y, -1, 31 << 5, 0, colors[0] * r, colors[1] * g, colors[2] * b, 255);
|
||||
make_vertex(verts, 0, x, y, -1, 0, 0, 255, 255, 255, 255);
|
||||
make_vertex(verts, 1, x, y - SKYBOX_TILE_HEIGHT, -1, 0, 31 << 5, 255, 255, 255, 255);
|
||||
make_vertex(verts, 2, x + SKYBOX_TILE_WIDTH, y - SKYBOX_TILE_HEIGHT, -1, 31 << 5, 31 << 5, 255, 255, 255, 255);
|
||||
make_vertex(verts, 3, x + SKYBOX_TILE_WIDTH, y, -1, 31 << 5, 0, 255, 255, 255, 255);
|
||||
}
|
||||
return verts;
|
||||
}
|
||||
|
|
@ -246,10 +242,16 @@ void draw_skybox_tile_grid(Gfx **dlist, s8 background, s8 player, s8 colorIndex)
|
|||
texture = (*(SkyboxTexture *) segmented_to_virtual(sSkyboxTextures[background]))[tileIndex];
|
||||
}
|
||||
|
||||
Vtx *vertices = make_skybox_rect(tileRow, tileColTmp, colorIndex, row, col);
|
||||
f32 r = gSkyboxColor[0] / 255.0f;
|
||||
f32 g = gSkyboxColor[1] / 255.0f;
|
||||
f32 b = gSkyboxColor[2] / 255.0f;
|
||||
u8 *color = sSkyboxColors[colorIndex];
|
||||
gDPSetEnvColor((*dlist)++, color[0] * r, color[1] * g, color[2] * b, 255);
|
||||
|
||||
Vtx *vertices = make_skybox_rect(tileRow, tileColTmp, row, col);
|
||||
|
||||
gLoadBlockTexture((*dlist)++, 32, 32, G_IM_FMT_RGBA, texture);
|
||||
gSPVertexNonGlobal((*dlist)++, VIRTUAL_TO_PHYSICAL(vertices), 4, 0);
|
||||
gSPVertex((*dlist)++, VIRTUAL_TO_PHYSICAL(vertices), 4, 0);
|
||||
gSPDisplayList((*dlist)++, dl_draw_quad_verts_0123);
|
||||
}
|
||||
}
|
||||
|
|
@ -284,7 +286,7 @@ void *create_skybox_ortho_matrix(s8 player) {
|
|||
Gfx *init_skybox_display_list(s8 player, s8 background, s8 colorIndex) {
|
||||
extern Gfx* gBackgroundSkyboxGfx;
|
||||
|
||||
s32 dlCommandCount = 5 + (sSkyboxTileNumY * sSkyboxTileNumX) * 7; // 5 for the start and end, plus the amount of skybox tiles
|
||||
s32 dlCommandCount = 5 + (sSkyboxTileNumY * sSkyboxTileNumX) * 8; // 5 for the start and end, plus the amount of skybox tiles
|
||||
|
||||
void *skybox;
|
||||
if (gRenderingInterpolated) {
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ struct GfxVertex {
|
|||
struct RGBA color;
|
||||
uint8_t fog_z;
|
||||
uint8_t clip_rej;
|
||||
uint8_t world_geometry;
|
||||
};
|
||||
|
||||
struct GfxDimensions {
|
||||
|
|
|
|||
|
|
@ -72,12 +72,13 @@ struct CombineMode {
|
|||
};
|
||||
union {
|
||||
struct {
|
||||
uint8_t use_alpha : 1;
|
||||
uint8_t use_fog : 1;
|
||||
uint8_t texture_edge : 1;
|
||||
uint8_t use_dither : 1;
|
||||
uint8_t use_2cycle : 1;
|
||||
uint8_t light_map : 1;
|
||||
uint8_t use_alpha : 1;
|
||||
uint8_t use_fog : 1;
|
||||
uint8_t texture_edge : 1;
|
||||
uint8_t use_dither : 1;
|
||||
uint8_t use_2cycle : 1;
|
||||
uint8_t light_map : 1;
|
||||
uint8_t world_geometry : 1;
|
||||
};
|
||||
uint32_t flags;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -50,11 +50,12 @@ struct ShaderProgram {
|
|||
bool used_textures[2];
|
||||
uint8_t num_floats;
|
||||
GLint attrib_locations[7];
|
||||
GLint uniform_locations[7];
|
||||
GLint uniform_locations[9];
|
||||
uint8_t attrib_sizes[7];
|
||||
uint8_t num_attribs;
|
||||
bool used_noise;
|
||||
bool used_lightmap;
|
||||
bool world_geometry;
|
||||
};
|
||||
|
||||
struct GLTexture {
|
||||
|
|
@ -97,7 +98,12 @@ static void gfx_opengl_vertex_array_set_attribs(struct ShaderProgram *prg) {
|
|||
static inline void gfx_opengl_set_shader_uniforms(struct ShaderProgram *prg) {
|
||||
if (prg->used_noise) { glUniform1f(prg->uniform_locations[4], (float)frame_count); }
|
||||
if (prg->used_lightmap) { glUniform3f(prg->uniform_locations[5], gVertexColor[0] / 255.0f, gVertexColor[1] / 255.0f, gVertexColor[2] / 255.0f); }
|
||||
glUniform1i(prg->uniform_locations[6], configFiltering);
|
||||
if (prg->world_geometry) {
|
||||
glUniform1iv(prg->uniform_locations[6], SHADER_FLAG_MAX, gShaderFlags);
|
||||
glUniform1fv(prg->uniform_locations[7], SHADER_FLAG_MAX, gShaderFlagValues);
|
||||
}
|
||||
|
||||
glUniform1i(prg->uniform_locations[8], configFiltering);
|
||||
}
|
||||
|
||||
static inline void gfx_opengl_set_texture_uniforms(struct ShaderProgram *prg, const int tile) {
|
||||
|
|
@ -254,6 +260,7 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
bool opt_texture_edge = cc->cm.texture_edge;
|
||||
bool opt_2cycle = cc->cm.use_2cycle;
|
||||
bool opt_light_map = cc->cm.light_map;
|
||||
bool world_geometry = cc->cm.world_geometry;
|
||||
|
||||
#ifdef USE_GLES
|
||||
bool opt_dither = false;
|
||||
|
|
@ -262,7 +269,7 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
#endif
|
||||
|
||||
char vs_buf[1024];
|
||||
char fs_buf[2048];
|
||||
char fs_buf[4096];
|
||||
size_t vs_len = 0;
|
||||
size_t fs_len = 0;
|
||||
size_t num_floats = 4;
|
||||
|
|
@ -362,6 +369,34 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
append_line(fs_buf, &fs_len, "}");
|
||||
}
|
||||
|
||||
if (world_geometry) {
|
||||
append_line(fs_buf, &fs_len, "float dither4x4(vec2 position, float brightness) {");
|
||||
append_line(fs_buf, &fs_len, " int x = int(mod(position.x, 4.0));");
|
||||
append_line(fs_buf, &fs_len, " int y = int(mod(position.y, 4.0));");
|
||||
append_line(fs_buf, &fs_len, " int index = x + y * 4;");
|
||||
append_line(fs_buf, &fs_len, " float limit = 0.0;");
|
||||
append_line(fs_buf, &fs_len, " if (x < 8) {");
|
||||
append_line(fs_buf, &fs_len, " if (index == 0) limit = 0.0625;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 1) limit = 0.5625;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 2) limit = 0.1875;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 3) limit = 0.6875;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 4) limit = 0.8125;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 5) limit = 0.3125;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 6) limit = 0.9375;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 7) limit = 0.4375;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 8) limit = 0.25;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 9) limit = 0.75;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 10) limit = 0.125;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 11) limit = 0.625;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 12) limit = 1.0;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 13) limit = 0.5;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 14) limit = 0.875;");
|
||||
append_line(fs_buf, &fs_len, " if (index == 15) limit = 0.375;");
|
||||
append_line(fs_buf, &fs_len, " }");
|
||||
append_line(fs_buf, &fs_len, " return brightness < limit ? 0.0 : 1.0;");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
}
|
||||
|
||||
if ((opt_alpha && opt_dither) || ccf.do_noise) {
|
||||
append_line(fs_buf, &fs_len, "uniform float uFrameCount;");
|
||||
|
||||
|
|
@ -375,6 +410,15 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
append_line(fs_buf, &fs_len, "uniform vec3 uLightmapColor;");
|
||||
}
|
||||
|
||||
if (world_geometry) {
|
||||
char line[64];
|
||||
snprintf(line, 64, "uniform int uShaderFlags[%d];", SHADER_FLAG_MAX);
|
||||
append_line(fs_buf, &fs_len, line);
|
||||
|
||||
snprintf(line, 64, "uniform float uShaderFlagValues[%d];", SHADER_FLAG_MAX);
|
||||
append_line(fs_buf, &fs_len, line);
|
||||
}
|
||||
|
||||
append_line(fs_buf, &fs_len, "uniform int uFilter;");
|
||||
|
||||
append_line(fs_buf, &fs_len, "void main() {");
|
||||
|
|
@ -421,6 +465,49 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
|
||||
// TODO discard if alpha is 0?
|
||||
|
||||
if (world_geometry) {
|
||||
// hue
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[0] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "const vec3 k = vec3(0.57735, 0.57735, 0.57735);");
|
||||
append_line(fs_buf, &fs_len, "float sinAngle = sin(uShaderFlagValues[0]);");
|
||||
append_line(fs_buf, &fs_len, "float cosAngle = cos(uShaderFlagValues[0]);");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb = texel.rgb * cosAngle * cross(k, texel.rgb) * sinAngle + k * dot(k, texel.rgb) * (1.0 - cosAngle);");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
|
||||
// saturation
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[1] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "const vec3 w = vec3(0.2125, 0.7154, 0.0721);");
|
||||
append_line(fs_buf, &fs_len, "vec3 intensity = vec3(dot(texel.rgb, w));");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb = mix(intensity, texel.rgb, uShaderFlagValues[1]);");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
|
||||
// brightness
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[2] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb *= uShaderFlagValues[2];");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
|
||||
// contrast
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[3] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb = 0.5 + (1.0 + uShaderFlagValues[3]) * (texel.rgb - 0.5);");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
|
||||
// exposure
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[4] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb = texel.rgb + uShaderFlagValues[4] * texel.rgb + texel.rgb;");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
|
||||
// dithering
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[5] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb *= dither4x4(gl_FragCoord.xy, dot(texel.rgb, vec3(0.299, 0.587, 0.114)));");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
|
||||
// posterization
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[6] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "int levels = int(uShaderFlagValues[6]);");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb = floor(texel.rgb * levels) / levels;");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
}
|
||||
|
||||
if (opt_fog) {
|
||||
if (opt_alpha) {
|
||||
append_line(fs_buf, &fs_len, "texel = vec4(mix(texel.rgb, vFog.rgb, vFog.a), texel.a);");
|
||||
|
|
@ -559,7 +646,15 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
prg->used_lightmap = false;
|
||||
}
|
||||
|
||||
prg->uniform_locations[6] = glGetUniformLocation(shader_program, "uFilter");
|
||||
if (world_geometry) {
|
||||
prg->uniform_locations[6] = glGetUniformLocation(shader_program, "uShaderFlags");
|
||||
prg->uniform_locations[7] = glGetUniformLocation(shader_program, "uShaderFlagValues");
|
||||
prg->world_geometry = true;
|
||||
} else {
|
||||
prg->world_geometry = false;
|
||||
}
|
||||
|
||||
prg->uniform_locations[8] = glGetUniformLocation(shader_program, "uFilter");
|
||||
|
||||
return prg;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -125,6 +125,10 @@ Color gVertexColor = { 0xFF, 0xFF, 0xFF };
|
|||
Color gFogColor = { 0xFF, 0xFF, 0xFF };
|
||||
f32 gFogIntensity = 1;
|
||||
|
||||
int gShaderFlags[SHADER_FLAG_MAX] = { 0 };
|
||||
f32 gShaderFlagValues[SHADER_FLAG_MAX] = { 0 };
|
||||
bool gShaderFlagsScreen = false;
|
||||
|
||||
// need inverse camera matrix to compute world space for lighting engine
|
||||
static Mat4 sInverseCameraMatrix;
|
||||
static bool sHasInverseCameraMatrix = false;
|
||||
|
|
@ -1003,6 +1007,8 @@ static void OPTIMIZE_O3 gfx_sp_vertex(size_t n_vertices, size_t dest_index, cons
|
|||
if (!(rsp.geometry_mode & G_FRESNEL_ALPHA_EXT)) {
|
||||
d->color.a = v->cn[3];
|
||||
}
|
||||
|
||||
d->world_geometry = luaVertexColor;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1091,12 +1097,13 @@ static void OPTIMIZE_O3 gfx_sp_tri1(uint8_t vtx1_idx, uint8_t vtx2_idx, uint8_t
|
|||
|
||||
struct CombineMode* cm = &rdp.combine_mode;
|
||||
|
||||
cm->use_alpha = (rdp.other_mode_l & (G_BL_A_MEM << 18)) == 0;
|
||||
cm->texture_edge = (rdp.other_mode_l & CVG_X_ALPHA) == CVG_X_ALPHA;
|
||||
cm->use_dither = (rdp.other_mode_l & G_AC_DITHER) == G_AC_DITHER;
|
||||
cm->use_2cycle = (rdp.other_mode_h & (3U << G_MDSFT_CYCLETYPE)) == G_CYC_2CYCLE;
|
||||
cm->use_fog = (rdp.other_mode_l >> 30) == G_BL_CLR_FOG;
|
||||
cm->light_map = (rsp.geometry_mode & G_LIGHT_MAP_EXT) == G_LIGHT_MAP_EXT;
|
||||
cm->use_alpha = (rdp.other_mode_l & (G_BL_A_MEM << 18)) == 0;
|
||||
cm->texture_edge = (rdp.other_mode_l & CVG_X_ALPHA) == CVG_X_ALPHA;
|
||||
cm->use_dither = (rdp.other_mode_l & G_AC_DITHER) == G_AC_DITHER;
|
||||
cm->use_2cycle = (rdp.other_mode_h & (3U << G_MDSFT_CYCLETYPE)) == G_CYC_2CYCLE;
|
||||
cm->use_fog = (rdp.other_mode_l >> 30) == G_BL_CLR_FOG;
|
||||
cm->light_map = (rsp.geometry_mode & G_LIGHT_MAP_EXT) == G_LIGHT_MAP_EXT;
|
||||
cm->world_geometry = (v1->world_geometry && v2->world_geometry && v3->world_geometry) || gShaderFlagsScreen;
|
||||
|
||||
if (cm->texture_edge) {
|
||||
cm->use_alpha = true;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,17 @@
|
|||
#include "types.h"
|
||||
#include "pc/gfx/gfx.h"
|
||||
|
||||
enum ShaderFlag {
|
||||
SHADER_FLAG_HUE,
|
||||
SHADER_FLAG_SATURATION,
|
||||
SHADER_FLAG_BRIGHTNESS,
|
||||
SHADER_FLAG_CONTRAST,
|
||||
SHADER_FLAG_EXPOSURE,
|
||||
SHADER_FLAG_DITHERING,
|
||||
SHADER_FLAG_POSTERIZATION,
|
||||
SHADER_FLAG_MAX
|
||||
};
|
||||
|
||||
struct GfxRenderingAPI;
|
||||
struct GfxWindowManagerAPI;
|
||||
|
||||
|
|
@ -13,6 +24,10 @@ extern Color gVertexColor;
|
|||
extern Color gFogColor;
|
||||
extern f32 gFogIntensity;
|
||||
|
||||
extern int gShaderFlags[SHADER_FLAG_MAX];
|
||||
extern f32 gShaderFlagValues[SHADER_FLAG_MAX];
|
||||
extern bool gShaderFlagsScreen;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1540,6 +1540,14 @@ char gSmluaConstants[] = ""
|
|||
"BACKGROUND_ABOVE_CLOUDS=8\n"
|
||||
"BACKGROUND_PURPLE_SKY=9\n"
|
||||
"BACKGROUND_CUSTOM=10\n"
|
||||
"SHADER_FLAG_HUE=0\n"
|
||||
"SHADER_FLAG_SATURATION=1\n"
|
||||
"SHADER_FLAG_BRIGHTNESS=2\n"
|
||||
"SHADER_FLAG_CONTRAST=3\n"
|
||||
"SHADER_FLAG_EXPOSURE=4\n"
|
||||
"SHADER_FLAG_DITHERING=5\n"
|
||||
"SHADER_FLAG_POSTERIZATION=6\n"
|
||||
"SHADER_FLAG_MAX=7\n"
|
||||
"GRAPH_RENDER_ACTIVE=(1 << 0)\n"
|
||||
"GRAPH_RENDER_CHILDREN_FIRST=(1 << 1)\n"
|
||||
"GRAPH_RENDER_BILLBOARD=(1 << 2)\n"
|
||||
|
|
|
|||
|
|
@ -32258,6 +32258,76 @@ int smlua_func_network_player_palette_to_color(lua_State* L) {
|
|||
// smlua_gfx_utils.h //
|
||||
///////////////////////
|
||||
|
||||
int smlua_func_enable_gfx_shader_flag(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "enable_gfx_shader_flag", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int flag = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "enable_gfx_shader_flag"); return 0; }
|
||||
bool enabled = smlua_to_boolean(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "enable_gfx_shader_flag"); return 0; }
|
||||
|
||||
enable_gfx_shader_flag(flag, enabled);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_set_gfx_shader_flag_value(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 2) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "set_gfx_shader_flag_value", 2, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int flag = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_gfx_shader_flag_value"); return 0; }
|
||||
f32 value = smlua_to_number(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "set_gfx_shader_flag_value"); return 0; }
|
||||
|
||||
set_gfx_shader_flag_value(flag, value);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_enable_gfx_shader_flags_screen(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 1) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "enable_gfx_shader_flags_screen", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool enabled = smlua_to_boolean(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "enable_gfx_shader_flags_screen"); return 0; }
|
||||
|
||||
enable_gfx_shader_flags_screen(enabled);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_clear_all_gfx_shader_flags(UNUSED lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
int top = lua_gettop(L);
|
||||
if (top != 0) {
|
||||
LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "clear_all_gfx_shader_flags", 0, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
clear_all_gfx_shader_flags();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_set_override_fov(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -38830,6 +38900,10 @@ void smlua_bind_functions_autogen(void) {
|
|||
smlua_bind_function(L, "network_player_palette_to_color", smlua_func_network_player_palette_to_color);
|
||||
|
||||
// smlua_gfx_utils.h
|
||||
smlua_bind_function(L, "enable_gfx_shader_flag", smlua_func_enable_gfx_shader_flag);
|
||||
smlua_bind_function(L, "set_gfx_shader_flag_value", smlua_func_set_gfx_shader_flag_value);
|
||||
smlua_bind_function(L, "enable_gfx_shader_flags_screen", smlua_func_enable_gfx_shader_flags_screen);
|
||||
smlua_bind_function(L, "clear_all_gfx_shader_flags", smlua_func_clear_all_gfx_shader_flags);
|
||||
smlua_bind_function(L, "set_override_fov", smlua_func_set_override_fov);
|
||||
smlua_bind_function(L, "set_override_near", smlua_func_set_override_near);
|
||||
smlua_bind_function(L, "set_override_far", smlua_func_set_override_far);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,27 @@
|
|||
#include "game/skybox.h"
|
||||
#include "geo_commands.h"
|
||||
|
||||
void enable_gfx_shader_flag(enum ShaderFlag flag, bool enabled) {
|
||||
if (flag < 0 || flag >= SHADER_FLAG_MAX) { return; }
|
||||
gShaderFlags[flag] = enabled ? 1 : 0;
|
||||
}
|
||||
|
||||
void set_gfx_shader_flag_value(enum ShaderFlag flag, f32 value) {
|
||||
if (flag < 0 || flag >= SHADER_FLAG_MAX) { return; }
|
||||
gShaderFlagValues[flag] = value;
|
||||
}
|
||||
|
||||
void enable_gfx_shader_flags_screen(bool enabled) {
|
||||
gShaderFlagsScreen = enabled;
|
||||
}
|
||||
|
||||
void clear_all_gfx_shader_flags(void) {
|
||||
memset(gShaderFlags, 0, sizeof(gShaderFlags));
|
||||
memset(gShaderFlagValues, 0, sizeof(gShaderFlagValues));
|
||||
}
|
||||
|
||||
///
|
||||
|
||||
void set_override_fov(f32 fov) {
|
||||
gOverrideFOV = fov;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef SMLUA_GFX_UTILS_H
|
||||
#define SMLUA_GFX_UTILS_H
|
||||
|
||||
#include "pc/gfx/gfx_pc.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
#include "types.h"
|
||||
#include "geo_commands.h"
|
||||
|
|
@ -12,6 +13,15 @@ Gfx *gfx_allocate_internal(Gfx *gfx, u32 length);
|
|||
Vtx *vtx_allocate_internal(Vtx *vtx, u32 count);
|
||||
u32 gfx_get_length_no_sentinel(const Gfx *gfx);
|
||||
|
||||
/* |description|Enables a custom shader flag (`SHADER_FLAG_*`) for the renderer|descriptionEnd| */
|
||||
void enable_gfx_shader_flag(enum ShaderFlag flag, bool enabled);
|
||||
/* |description|Sets a value for one of the custom shader flags (`SHADER_FLAG_*`) for the renderer|descriptionEnd| */
|
||||
void set_gfx_shader_flag_value(enum ShaderFlag flag, f32 value);
|
||||
/* |description|Enables custom shader flags applying to everything, including HUD elements and menus|descriptionEnd| */
|
||||
void enable_gfx_shader_flags_screen(bool enabled);
|
||||
/* |description|Clears all custom shader flags (`SHADER_FLAG_*`) for the renderer|descriptionEnd| */
|
||||
void clear_all_gfx_shader_flags(void);
|
||||
|
||||
/* |description|Sets the override FOV|descriptionEnd| */
|
||||
void set_override_fov(f32 fov);
|
||||
/* |description|Sets the override near plane|descriptionEnd| */
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include "pc/lua/utils/smlua_model_utils.h"
|
||||
#include "pc/lua/utils/smlua_misc_utils.h"
|
||||
#include "pc/lua/utils/smlua_camera_utils.h"
|
||||
#include "pc/lua/utils/smlua_gfx_utils.h"
|
||||
#include "pc/mods/mods.h"
|
||||
#include "pc/crash_handler.h"
|
||||
#include "pc/debuglog.h"
|
||||
|
|
@ -721,6 +722,7 @@ void network_shutdown(bool sendLeaving, bool exiting, bool popup, bool reconnect
|
|||
color_set(gSkyboxColor, 0xFF, 0xFF, 0xFF);
|
||||
color_set(gFogColor, 0xFF, 0xFF, 0xFF);
|
||||
gFogIntensity = 1.0f;
|
||||
clear_all_gfx_shader_flags();
|
||||
gOverrideBackground = -1;
|
||||
gOverrideEnvFx = ENVFX_MODE_NO_OVERRIDE;
|
||||
gRomhackCameraSettings.centering = FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue