Fix projection depth adjustment (I guess?)

This commit is contained in:
Luke Street 2025-04-07 21:14:37 -06:00
parent f0c6a1666b
commit d9de6603c7
2 changed files with 6 additions and 12 deletions

View File

@ -1,25 +1,18 @@
#include "gx.hpp"
#include <cfloat>
extern "C" {
constexpr aurora::Mat4x4<float> DepthCorrect{
{1.f, 0.f, 0.f, 0.f},
{0.f, 1.f, 0.f, 0.f},
{0.f, 0.f, 1.f + FLT_EPSILON, 0.f},
{0.f, 0.f, 1.f, 1.f},
};
void GXSetProjection(const void* mtx_, GXProjectionType type) {
const auto& mtx = *reinterpret_cast<const aurora::Mat4x4<float>*>(mtx_);
g_gxState.origProj = mtx;
g_gxState.projType = type;
update_gx_state(g_gxState.proj,
#ifdef AURORA_NATIVE_MATRIX
update_gx_state(g_gxState.proj, DepthCorrect * mtx);
mtx
#else
update_gx_state(g_gxState.proj, DepthCorrect * mtx.transpose());
mtx.transpose()
#endif
);
}
// TODO GXSetProjectionv

View File

@ -803,7 +803,8 @@ wgpu::ShaderModule build_shader(const ShaderConfig& config, const ShaderInfo& in
vtxXfrAttrsPre += fmt::format(
"\n var mv_pos = mul4x3(ubuf.pos_mtx, vec4<f32>({}, 1.0));"
"\n var mv_nrm = normalize(mul4x3(ubuf.nrm_mtx, vec4<f32>({}, 0.0)));"
"\n out.pos = mul4x4(ubuf.proj, vec4<f32>(mv_pos, 1.0));",
"\n out.pos = mul4x4(ubuf.proj, vec4<f32>(mv_pos, 1.0));"
"\n out.pos.z += out.pos.w;",
vtx_attr(config, GX_VA_POS), vtx_attr(config, GX_VA_NRM));
if constexpr (EnableNormalVisualization) {
vtxOutAttrs += fmt::format("\n @location({}) nrm: vec3<f32>,", vtxOutIdx++);