mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-05-26 02:31:07 +00:00
Add built-in preset screen shader effects configurable through Lua (#1217)
* C++ lighting engine Runs better using my new system for storing and iterating through lights. I removed the lighting ctx profiler because after I've realized its very inaccurate and was probably programmed incorrectly from the start. Although I remember it working fine before and not constantly showing 20 ms or higher when I'm in an extremely simple level with extremely simple lights and the FPS is way too high for it to be taking 20 ms. * Whoops * Make some optimizations * Fix small bug with LE inside graphics vertex function I also brought back the lighting profiler because it's better than nothing. * Some optimizations * Cache active lights and 4 lights per vertex limit Less branching and less iterating with the limit * 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. * Add default values and better function names Also fixed sizes in reset function * Add scanlines effect * Add global enabled function * Fix some default values * Hopefully fix white sparkles * Whoops * Address review * Update function names * Fix shader crash * Address reviews
This commit is contained in:
parent
c7b2b2bb56
commit
19a429dbe5
34 changed files with 1772 additions and 1170 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,18 +22,20 @@ 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_FADEA, G_CC_FADEA),
|
||||
gsDPSetEnvColor(255, 255, 100, 255),
|
||||
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),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsDPSetEnvColor(255, 255, 255, 255),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
"src/engine/surface_load.h",
|
||||
"src/pc/lua/utils/smlua_audio_utils.h",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -3059,6 +3059,27 @@ 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_SCANLINES = 7 --- @type ShaderFlag
|
||||
SHADER_FLAG_MAX = 8 --- @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_SCANLINES`
|
||||
--- | `SHADER_FLAG_MAX`
|
||||
|
||||
--- @type integer
|
||||
GRAPH_RENDER_ACTIVE = (1 << 0)
|
||||
|
||||
|
|
|
|||
|
|
@ -10790,6 +10790,51 @@ function surface_is_painting_warp(surf)
|
|||
-- ...
|
||||
end
|
||||
|
||||
--- @param flag ShaderFlag
|
||||
--- @return boolean
|
||||
--- Gets if a custom shader flag (`SHADER_FLAG_*`) is enabled or not
|
||||
function get_shader_flag_enabled(flag)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param flag ShaderFlag
|
||||
--- @param enabled boolean
|
||||
--- Enables a custom shader flag (`SHADER_FLAG_*`) for the renderer
|
||||
function set_shader_flag_enabled(flag, enabled)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param flag ShaderFlag
|
||||
--- @return number
|
||||
--- Gets a value for one of the custom shader flags (`SHADER_FLAG_*`)
|
||||
function get_shader_flag_value(flag)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param flag ShaderFlag
|
||||
--- @param value number
|
||||
--- Sets a value for one of the custom shader flags (`SHADER_FLAG_*`) for the renderer
|
||||
function set_shader_flag_value(flag, value)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @return boolean
|
||||
--- Gets if custom shader flags are enabled globally
|
||||
function get_global_shader_flags_enabled()
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param enabled boolean
|
||||
--- Enables custom shader flags as a global toggle, useful for disabling without manually going through every effect
|
||||
function set_global_shader_flags_enabled(enabled)
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- Clears all custom shader flags (`SHADER_FLAG_*`) for the renderer
|
||||
function clear_all_shader_flags()
|
||||
-- ...
|
||||
end
|
||||
|
||||
--- @param fov number
|
||||
--- Sets the override FOV
|
||||
function set_override_fov(fov)
|
||||
|
|
@ -11032,7 +11077,7 @@ end
|
|||
--- @param name string
|
||||
--- @return Pointer_Vtx
|
||||
--- @return integer count
|
||||
--- Gets a vertex buffer of the current mod from its name. Returns a pointer to the vertex buffering and its vertex count
|
||||
--- Gets a vertex buffer of the current mod from its name. Returns a pointer to the vertex buffer and its vertex count
|
||||
function vtx_get_from_name(name)
|
||||
-- ...
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2351,7 +2351,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)
|
||||
|
|
@ -1343,6 +1345,25 @@
|
|||
|
||||
<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_SCANLINES | 7 |
|
||||
| SHADER_FLAG_MAX | 8 |
|
||||
|
||||
[:arrow_up_small:](#)
|
||||
|
||||
<br />
|
||||
|
||||
## [graph_node.h](#graph_node.h)
|
||||
- GRAPH_RENDER_ACTIVE
|
||||
- GRAPH_RENDER_CHILDREN_FIRST
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1937,51 +1937,58 @@
|
|||
<br />
|
||||
|
||||
- smlua_gfx_utils.h
|
||||
- [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)
|
||||
- [get_lighting_dir](functions-6.md#get_lighting_dir)
|
||||
- [set_lighting_dir](functions-6.md#set_lighting_dir)
|
||||
- [get_lighting_color](functions-6.md#get_lighting_color)
|
||||
- [get_lighting_color_ambient](functions-6.md#get_lighting_color_ambient)
|
||||
- [set_lighting_color](functions-6.md#set_lighting_color)
|
||||
- [set_lighting_color_ambient](functions-6.md#set_lighting_color_ambient)
|
||||
- [get_vertex_color](functions-6.md#get_vertex_color)
|
||||
- [set_vertex_color](functions-6.md#set_vertex_color)
|
||||
- [get_fog_color](functions-6.md#get_fog_color)
|
||||
- [set_fog_color](functions-6.md#set_fog_color)
|
||||
- [get_fog_intensity](functions-6.md#get_fog_intensity)
|
||||
- [set_fog_intensity](functions-6.md#set_fog_intensity)
|
||||
- [get_skybox](functions-6.md#get_skybox)
|
||||
- [set_override_skybox](functions-6.md#set_override_skybox)
|
||||
- [get_skybox_color](functions-6.md#get_skybox_color)
|
||||
- [set_skybox_color](functions-6.md#set_skybox_color)
|
||||
- [gfx_parse](functions-6.md#gfx_parse)
|
||||
- [gfx_get_op](functions-6.md#gfx_get_op)
|
||||
- [gfx_get_display_list](functions-6.md#gfx_get_display_list)
|
||||
- [gfx_get_vertex_buffer](functions-6.md#gfx_get_vertex_buffer)
|
||||
- [gfx_get_vertex_count](functions-6.md#gfx_get_vertex_count)
|
||||
- [gfx_get_texture](functions-6.md#gfx_get_texture)
|
||||
- [gfx_get_from_name](functions-6.md#gfx_get_from_name)
|
||||
- [gfx_get_name](functions-6.md#gfx_get_name)
|
||||
- [gfx_get_length](functions-6.md#gfx_get_length)
|
||||
- [gfx_get_command](functions-6.md#gfx_get_command)
|
||||
- [gfx_get_next_command](functions-6.md#gfx_get_next_command)
|
||||
- [gfx_copy](functions-6.md#gfx_copy)
|
||||
- [gfx_create](functions-6.md#gfx_create)
|
||||
- [gfx_resize](functions-6.md#gfx_resize)
|
||||
- [gfx_delete](functions-6.md#gfx_delete)
|
||||
- [gfx_delete_all](functions-6.md#gfx_delete_all)
|
||||
- [vtx_get_from_name](functions-6.md#vtx_get_from_name)
|
||||
- [vtx_get_name](functions-6.md#vtx_get_name)
|
||||
- [vtx_get_count](functions-6.md#vtx_get_count)
|
||||
- [vtx_get_vertex](functions-6.md#vtx_get_vertex)
|
||||
- [vtx_get_next_vertex](functions-6.md#vtx_get_next_vertex)
|
||||
- [vtx_copy](functions-6.md#vtx_copy)
|
||||
- [vtx_create](functions-6.md#vtx_create)
|
||||
- [vtx_resize](functions-6.md#vtx_resize)
|
||||
- [vtx_delete](functions-6.md#vtx_delete)
|
||||
- [vtx_delete_all](functions-6.md#vtx_delete_all)
|
||||
- [get_shader_flag_enabled](functions-7.md#get_shader_flag_enabled)
|
||||
- [set_shader_flag_enabled](functions-7.md#set_shader_flag_enabled)
|
||||
- [get_shader_flag_value](functions-7.md#get_shader_flag_value)
|
||||
- [set_shader_flag_value](functions-7.md#set_shader_flag_value)
|
||||
- [get_global_shader_flags_enabled](functions-7.md#get_global_shader_flags_enabled)
|
||||
- [set_global_shader_flags_enabled](functions-7.md#set_global_shader_flags_enabled)
|
||||
- [clear_all_shader_flags](functions-7.md#clear_all_shader_flags)
|
||||
- [set_override_fov](functions-7.md#set_override_fov)
|
||||
- [set_override_near](functions-7.md#set_override_near)
|
||||
- [set_override_far](functions-7.md#set_override_far)
|
||||
- [get_lighting_dir](functions-7.md#get_lighting_dir)
|
||||
- [set_lighting_dir](functions-7.md#set_lighting_dir)
|
||||
- [get_lighting_color](functions-7.md#get_lighting_color)
|
||||
- [get_lighting_color_ambient](functions-7.md#get_lighting_color_ambient)
|
||||
- [set_lighting_color](functions-7.md#set_lighting_color)
|
||||
- [set_lighting_color_ambient](functions-7.md#set_lighting_color_ambient)
|
||||
- [get_vertex_color](functions-7.md#get_vertex_color)
|
||||
- [set_vertex_color](functions-7.md#set_vertex_color)
|
||||
- [get_fog_color](functions-7.md#get_fog_color)
|
||||
- [set_fog_color](functions-7.md#set_fog_color)
|
||||
- [get_fog_intensity](functions-7.md#get_fog_intensity)
|
||||
- [set_fog_intensity](functions-7.md#set_fog_intensity)
|
||||
- [get_skybox](functions-7.md#get_skybox)
|
||||
- [set_override_skybox](functions-7.md#set_override_skybox)
|
||||
- [get_skybox_color](functions-7.md#get_skybox_color)
|
||||
- [set_skybox_color](functions-7.md#set_skybox_color)
|
||||
- [gfx_parse](functions-7.md#gfx_parse)
|
||||
- [gfx_get_op](functions-7.md#gfx_get_op)
|
||||
- [gfx_get_display_list](functions-7.md#gfx_get_display_list)
|
||||
- [gfx_get_vertex_buffer](functions-7.md#gfx_get_vertex_buffer)
|
||||
- [gfx_get_vertex_count](functions-7.md#gfx_get_vertex_count)
|
||||
- [gfx_get_texture](functions-7.md#gfx_get_texture)
|
||||
- [gfx_get_from_name](functions-7.md#gfx_get_from_name)
|
||||
- [gfx_get_name](functions-7.md#gfx_get_name)
|
||||
- [gfx_get_length](functions-7.md#gfx_get_length)
|
||||
- [gfx_get_command](functions-7.md#gfx_get_command)
|
||||
- [gfx_get_next_command](functions-7.md#gfx_get_next_command)
|
||||
- [gfx_copy](functions-7.md#gfx_copy)
|
||||
- [gfx_create](functions-7.md#gfx_create)
|
||||
- [gfx_resize](functions-7.md#gfx_resize)
|
||||
- [gfx_delete](functions-7.md#gfx_delete)
|
||||
- [gfx_delete_all](functions-7.md#gfx_delete_all)
|
||||
- [vtx_get_from_name](functions-7.md#vtx_get_from_name)
|
||||
- [vtx_get_name](functions-7.md#vtx_get_name)
|
||||
- [vtx_get_count](functions-7.md#vtx_get_count)
|
||||
- [vtx_get_vertex](functions-7.md#vtx_get_vertex)
|
||||
- [vtx_get_next_vertex](functions-7.md#vtx_get_next_vertex)
|
||||
- [vtx_copy](functions-7.md#vtx_copy)
|
||||
- [vtx_create](functions-7.md#vtx_create)
|
||||
- [vtx_resize](functions-7.md#vtx_resize)
|
||||
- [vtx_delete](functions-7.md#vtx_delete)
|
||||
- [vtx_delete_all](functions-7.md#vtx_delete_all)
|
||||
|
||||
<br />
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -46,6 +46,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;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -41,11 +41,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 {
|
||||
|
|
@ -88,7 +89,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) {
|
||||
|
|
@ -245,6 +251,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;
|
||||
|
|
@ -252,8 +259,8 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
bool opt_dither = cc->cm.use_dither;
|
||||
#endif
|
||||
|
||||
char vs_buf[1024];
|
||||
char fs_buf[2048];
|
||||
char vs_buf[8192];
|
||||
char fs_buf[8192];
|
||||
size_t vs_len = 0;
|
||||
size_t fs_len = 0;
|
||||
size_t num_floats = 4;
|
||||
|
|
@ -357,6 +364,56 @@ 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, "}");
|
||||
|
||||
append_line(fs_buf, &fs_len, "vec3 rgb2hsv(vec3 c) {");
|
||||
append_line(fs_buf, &fs_len, " vec4 K = vec4(0.0, -1.0/3.0, 2.0/3.0, -1.0);");
|
||||
append_line(fs_buf, &fs_len, " vec4 p = mix(vec4(c.bg, K.wz),");
|
||||
append_line(fs_buf, &fs_len, " vec4(c.gb, K.xy),");
|
||||
append_line(fs_buf, &fs_len, " step(c.b, c.g));");
|
||||
append_line(fs_buf, &fs_len, " vec4 q = mix(vec4(p.xyw, c.r),");
|
||||
append_line(fs_buf, &fs_len, " vec4(c.r, p.yzx),");
|
||||
append_line(fs_buf, &fs_len, " step(p.x, c.r));");
|
||||
append_line(fs_buf, &fs_len, " float d = q.x - min(q.w, q.y);");
|
||||
append_line(fs_buf, &fs_len, " float e = 1.0e-10;");
|
||||
append_line(fs_buf, &fs_len, " return vec3(");
|
||||
append_line(fs_buf, &fs_len, " abs(q.z + (q.w - q.y) / (6.0 * d + e)), // hue");
|
||||
append_line(fs_buf, &fs_len, " d / (q.x + e), // saturation");
|
||||
append_line(fs_buf, &fs_len, " q.x // value");
|
||||
append_line(fs_buf, &fs_len, " );");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
append_line(fs_buf, &fs_len, "");
|
||||
append_line(fs_buf, &fs_len, "vec3 hsv2rgb(vec3 c) {");
|
||||
append_line(fs_buf, &fs_len, " vec3 p = abs(fract(c.xxx + vec3(0.0, 2.0/3.0, 1.0/3.0)) * 6.0 - 3.0);");
|
||||
append_line(fs_buf, &fs_len, " return c.z * mix(vec3(1.0), clamp(p - 1.0, 0.0, 1.0), c.y);");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
}
|
||||
|
||||
if ((opt_alpha && opt_dither) || ccf.do_noise) {
|
||||
append_line(fs_buf, &fs_len, "uniform float uFrameCount;");
|
||||
|
||||
|
|
@ -370,6 +427,11 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC
|
|||
append_line(fs_buf, &fs_len, "uniform vec3 uLightmapColor;");
|
||||
}
|
||||
|
||||
if (world_geometry) {
|
||||
fs_len += sprintf(fs_buf + fs_len, "uniform int uShaderFlags[%d];\n", SHADER_FLAG_MAX);
|
||||
fs_len += sprintf(fs_buf + fs_len, "uniform float uShaderFlagValues[%d];\n", SHADER_FLAG_MAX);
|
||||
}
|
||||
|
||||
append_line(fs_buf, &fs_len, "uniform int uFilter;");
|
||||
|
||||
append_line(fs_buf, &fs_len, "void main() {");
|
||||
|
|
@ -416,6 +478,55 @@ 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, "vec3 hsv = rgb2hsv(texel.rgb);");
|
||||
append_line(fs_buf, &fs_len, "hsv.x = fract(hsv.x + uShaderFlagValues[0]);");
|
||||
append_line(fs_buf, &fs_len, "vec3 finalColor = hsv2rgb(hsv);");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb = finalColor;");
|
||||
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 + 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] - 2) * 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(max(1.0, uShaderFlagValues[6]));");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb = floor(texel.rgb * levels) / levels;");
|
||||
append_line(fs_buf, &fs_len, "}");
|
||||
|
||||
// scan lines
|
||||
append_line(fs_buf, &fs_len, "if (uShaderFlags[7] == 1) {");
|
||||
append_line(fs_buf, &fs_len, "float scan = sin(gl_FragCoord.y * 1.5) * 0.04;");
|
||||
append_line(fs_buf, &fs_len, "texel.rgb -= scan * uShaderFlagValues[7];");
|
||||
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);");
|
||||
|
|
@ -558,7 +669,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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,6 +129,20 @@ Color gVertexColor = { 0xFF, 0xFF, 0xFF };
|
|||
Color gFogColor = { 0xFF, 0xFF, 0xFF };
|
||||
f32 gFogIntensity = 1;
|
||||
|
||||
int gShaderFlags[SHADER_FLAG_MAX] = { 0 };
|
||||
f32 gDefaultShaderFlagValues[SHADER_FLAG_MAX] = {
|
||||
[SHADER_FLAG_HUE] = 0.0f,
|
||||
[SHADER_FLAG_SATURATION] = 1.0f,
|
||||
[SHADER_FLAG_BRIGHTNESS] = 1.0f,
|
||||
[SHADER_FLAG_CONTRAST] = 1.0f,
|
||||
[SHADER_FLAG_EXPOSURE] = 1.0f,
|
||||
[SHADER_FLAG_DITHERING] = 0.0f,
|
||||
[SHADER_FLAG_POSTERIZATION] = 8.0f,
|
||||
[SHADER_FLAG_SCANLINES] = 1.0f
|
||||
};
|
||||
f32 gShaderFlagValues[SHADER_FLAG_MAX] = { 0 };
|
||||
bool gShaderFlagsEnabled = true;
|
||||
|
||||
// need inverse camera matrix to compute world space for lighting engine
|
||||
static Mat4 sInverseCameraMatrix;
|
||||
static bool sHasInverseCameraMatrix = false;
|
||||
|
|
@ -1015,6 +1029,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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1103,12 +1119,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 = gShaderFlagsEnabled && (v1->world_geometry && v2->world_geometry && v3->world_geometry);
|
||||
|
||||
if (cm->texture_edge) {
|
||||
cm->use_alpha = true;
|
||||
|
|
|
|||
|
|
@ -4,6 +4,18 @@
|
|||
#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_SCANLINES,
|
||||
SHADER_FLAG_MAX
|
||||
};
|
||||
|
||||
struct GfxRenderingAPI;
|
||||
struct GfxWindowManagerAPI;
|
||||
|
||||
|
|
@ -13,6 +25,11 @@ extern Color gVertexColor;
|
|||
extern Color gFogColor;
|
||||
extern f32 gFogIntensity;
|
||||
|
||||
extern int gShaderFlags[SHADER_FLAG_MAX];
|
||||
extern f32 gDefaultShaderFlagValues[SHADER_FLAG_MAX];
|
||||
extern f32 gShaderFlagValues[SHADER_FLAG_MAX];
|
||||
extern bool gShaderFlagsEnabled;
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1596,6 +1596,15 @@ 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_SCANLINES=7\n"
|
||||
"SHADER_FLAG_MAX=8\n"
|
||||
"GRAPH_RENDER_ACTIVE=(1 << 0)\n"
|
||||
"GRAPH_RENDER_CHILDREN_FIRST=(1 << 1)\n"
|
||||
"GRAPH_RENDER_BILLBOARD=(1 << 2)\n"
|
||||
|
|
|
|||
|
|
@ -32124,6 +32124,125 @@ int smlua_func_network_player_palette_to_color(lua_State* L) {
|
|||
// smlua_gfx_utils.h //
|
||||
///////////////////////
|
||||
|
||||
int smlua_func_get_shader_flag_enabled(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", "get_shader_flag_enabled", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int flag = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "get_shader_flag_enabled"); return 0; }
|
||||
|
||||
lua_pushboolean(L, get_shader_flag_enabled(flag));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_set_shader_flag_enabled(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_shader_flag_enabled", 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_shader_flag_enabled"); return 0; }
|
||||
bool enabled = smlua_to_boolean(L, 2);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 2, "set_shader_flag_enabled"); return 0; }
|
||||
|
||||
set_shader_flag_enabled(flag, enabled);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_get_shader_flag_value(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", "get_shader_flag_value", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int flag = smlua_to_integer(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "get_shader_flag_value"); return 0; }
|
||||
|
||||
lua_pushnumber(L, get_shader_flag_value(flag));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_set_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_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_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_shader_flag_value"); return 0; }
|
||||
|
||||
set_shader_flag_value(flag, value);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_get_global_shader_flags_enabled(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", "get_global_shader_flags_enabled", 0, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
lua_pushboolean(L, get_global_shader_flags_enabled());
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_set_global_shader_flags_enabled(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", "set_global_shader_flags_enabled", 1, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool enabled = smlua_to_boolean(L, 1);
|
||||
if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_global_shader_flags_enabled"); return 0; }
|
||||
|
||||
set_global_shader_flags_enabled(enabled);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_clear_all_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_shader_flags", 0, top);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
clear_all_shader_flags();
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_func_set_override_fov(lua_State* L) {
|
||||
if (L == NULL) { return 0; }
|
||||
|
||||
|
|
@ -38802,6 +38921,13 @@ 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, "get_shader_flag_enabled", smlua_func_get_shader_flag_enabled);
|
||||
smlua_bind_function(L, "set_shader_flag_enabled", smlua_func_set_shader_flag_enabled);
|
||||
smlua_bind_function(L, "get_shader_flag_value", smlua_func_get_shader_flag_value);
|
||||
smlua_bind_function(L, "set_shader_flag_value", smlua_func_set_shader_flag_value);
|
||||
smlua_bind_function(L, "get_global_shader_flags_enabled", smlua_func_get_global_shader_flags_enabled);
|
||||
smlua_bind_function(L, "set_global_shader_flags_enabled", smlua_func_set_global_shader_flags_enabled);
|
||||
smlua_bind_function(L, "clear_all_shader_flags", smlua_func_clear_all_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);
|
||||
|
|
|
|||
|
|
@ -1,9 +1,45 @@
|
|||
#include "smlua_gfx_utils.h"
|
||||
#include "pc/gfx/gfx_pc.h"
|
||||
#include "pc/pc_main.h"
|
||||
#include "game/rendering_graph_node.h"
|
||||
#include "game/skybox.h"
|
||||
#include "geo_commands.h"
|
||||
|
||||
bool get_shader_flag_enabled(enum ShaderFlag flag) {
|
||||
if (flag < 0 || flag >= SHADER_FLAG_MAX) { return false; }
|
||||
return gShaderFlags[flag];
|
||||
}
|
||||
|
||||
void set_shader_flag_enabled(enum ShaderFlag flag, bool enabled) {
|
||||
if (flag < 0 || flag >= SHADER_FLAG_MAX) { return; }
|
||||
gShaderFlags[flag] = enabled ? 1 : 0;
|
||||
}
|
||||
|
||||
f32 get_shader_flag_value(enum ShaderFlag flag) {
|
||||
if (flag < 0 || flag >= SHADER_FLAG_MAX) { return 0.0f; }
|
||||
return gShaderFlagValues[flag];
|
||||
}
|
||||
|
||||
void set_shader_flag_value(enum ShaderFlag flag, f32 value) {
|
||||
if (flag < 0 || flag >= SHADER_FLAG_MAX) { return; }
|
||||
gShaderFlagValues[flag] = value;
|
||||
}
|
||||
|
||||
bool get_global_shader_flags_enabled(void) {
|
||||
return gShaderFlagsEnabled;
|
||||
}
|
||||
|
||||
void set_global_shader_flags_enabled(bool enabled) {
|
||||
gShaderFlagsEnabled = enabled;
|
||||
}
|
||||
|
||||
AT_STARTUP void clear_all_shader_flags(void) {
|
||||
gShaderFlagsEnabled = true;
|
||||
memset(gShaderFlags, 0, sizeof(s32) * SHADER_FLAG_MAX);
|
||||
memcpy(gShaderFlagValues, gDefaultShaderFlagValues, sizeof(f32) * SHADER_FLAG_MAX);
|
||||
}
|
||||
|
||||
///
|
||||
|
||||
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,21 @@ 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|Gets if a custom shader flag (`SHADER_FLAG_*`) is enabled or not|descriptionEnd| */
|
||||
bool get_shader_flag_enabled(enum ShaderFlag flag);
|
||||
/* |description|Enables a custom shader flag (`SHADER_FLAG_*`) for the renderer|descriptionEnd| */
|
||||
void set_shader_flag_enabled(enum ShaderFlag flag, bool enabled);
|
||||
/* |description|Gets a value for one of the custom shader flags (`SHADER_FLAG_*`)|descriptionEnd| */
|
||||
f32 get_shader_flag_value(enum ShaderFlag flag);
|
||||
/* |description|Sets a value for one of the custom shader flags (`SHADER_FLAG_*`) for the renderer|descriptionEnd| */
|
||||
void set_shader_flag_value(enum ShaderFlag flag, f32 value);
|
||||
/* |description|Gets if custom shader flags are enabled globally|descriptionEnd| */
|
||||
bool get_global_shader_flags_enabled(void);
|
||||
/* |description|Enables custom shader flags as a global toggle, useful for disabling without manually going through every effect|descriptionEnd| */
|
||||
void set_global_shader_flags_enabled(bool enabled);
|
||||
/* |description|Clears all custom shader flags (`SHADER_FLAG_*`) for the renderer|descriptionEnd| */
|
||||
void clear_all_shader_flags(void);
|
||||
|
||||
/* |description|Sets the override FOV|descriptionEnd| */
|
||||
void set_override_fov(f32 fov);
|
||||
/* |description|Sets the override near plane|descriptionEnd| */
|
||||
|
|
@ -96,7 +112,7 @@ void gfx_delete_all();
|
|||
|
||||
/* |description|
|
||||
Gets a vertex buffer of the current mod from its name.
|
||||
Returns a pointer to the vertex buffering and its vertex count
|
||||
Returns a pointer to the vertex buffer and its vertex count
|
||||
|descriptionEnd| */
|
||||
Vtx *vtx_get_from_name(const char *name, RET u32 *count);
|
||||
/* |description|Gets the name of a vertex buffer|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"
|
||||
|
|
@ -36,7 +37,7 @@
|
|||
#include "game/mario.h"
|
||||
#include "engine/math_util.h"
|
||||
#include "engine/lighting_engine.h"
|
||||
#include "src/audio/load.h"
|
||||
#include "audio/load.h"
|
||||
|
||||
#ifdef DISCORD_SDK
|
||||
#include "pc/discord/discord.h"
|
||||
|
|
@ -723,6 +724,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_shader_flags();
|
||||
gOverrideBackground = -1;
|
||||
gOverrideEnvFx = ENVFX_MODE_NO_OVERRIDE;
|
||||
gRomhackCameraSettings.centering = FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue