mirror of
https://github.com/open-goal/jak-project
synced 2026-07-04 13:30:41 -04:00
a918e2d9de
The way we got/stored background matrices is a bit weird and full of leftovers from the first attempts at porting renderers. This doesn't work well with the Jak 2 "other camera" system where some stuff is rendered with a different camera matrix. This cleans most of it up. The exception is that the collide mesh renderer and the additional sprite culling I added still need to peek at some cached camera matrices. This fixes the problem where etie uses the wrong matrices for "other camera" levels. Now the "hole covers" go in the holes in the background of the throne room. 
122 lines
5.0 KiB
C++
122 lines
5.0 KiB
C++
#pragma once
|
|
|
|
#include "common/math/Vector.h"
|
|
|
|
#include "game/graphics/opengl_renderer/BucketRenderer.h"
|
|
|
|
struct GoalBackgroundCameraData {
|
|
math::Vector4f planes[4];
|
|
math::Vector<s32, 4> itimes[4];
|
|
math::Vector4f camera[4];
|
|
math::Vector4f hvdf_off;
|
|
math::Vector4f fog;
|
|
math::Vector4f trans;
|
|
math::Vector4f rot[4];
|
|
math::Vector4f perspective[4];
|
|
};
|
|
|
|
// data passed from game to PC renderers
|
|
// the GOAL code assumes this memory layout.
|
|
struct TfragPcPortData {
|
|
GoalBackgroundCameraData camera;
|
|
char level_name[16];
|
|
};
|
|
static_assert(sizeof(TfragPcPortData) == 16 * 24);
|
|
|
|
// inputs to background renderers.
|
|
struct TfragRenderSettings {
|
|
GoalBackgroundCameraData camera;
|
|
int tree_idx;
|
|
bool debug_culling = false;
|
|
const u8* occlusion_culling = nullptr;
|
|
};
|
|
|
|
enum class DoubleDrawKind { NONE, AFAIL_NO_DEPTH_WRITE };
|
|
|
|
struct DoubleDraw {
|
|
DoubleDrawKind kind = DoubleDrawKind::NONE;
|
|
float aref_first = 0.;
|
|
float aref_second = 0.;
|
|
float color_mult = 1.;
|
|
};
|
|
|
|
DoubleDraw setup_tfrag_shader(SharedRenderState* render_state, DrawMode mode, ShaderId shader);
|
|
DoubleDraw setup_opengl_from_draw_mode(DrawMode mode, u32 tex_unit, bool mipmap);
|
|
|
|
void first_tfrag_draw_setup(const TfragRenderSettings& settings,
|
|
SharedRenderState* render_state,
|
|
ShaderId shader);
|
|
|
|
void interp_time_of_day_slow(const math::Vector<s32, 4> itimes[4],
|
|
const std::vector<tfrag3::TimeOfDayColor>& in,
|
|
math::Vector<u8, 4>* out);
|
|
|
|
struct SwizzledTimeOfDay {
|
|
std::vector<u8> data;
|
|
u32 color_count = 0;
|
|
};
|
|
|
|
SwizzledTimeOfDay swizzle_time_of_day(const std::vector<tfrag3::TimeOfDayColor>& in);
|
|
|
|
#ifndef __aarch64__
|
|
void interp_time_of_day_fast(const math::Vector<s32, 4> itimes[4],
|
|
const SwizzledTimeOfDay& swizzled_colors,
|
|
math::Vector<u8, 4>* out);
|
|
#endif
|
|
|
|
void cull_check_all_slow(const math::Vector4f* planes,
|
|
const std::vector<tfrag3::VisNode>& nodes,
|
|
const u8* level_occlusion_string,
|
|
u8* out);
|
|
bool sphere_in_view_ref(const math::Vector4f& sphere, const math::Vector4f* planes);
|
|
|
|
void update_render_state_from_pc_settings(SharedRenderState* state, const TfragPcPortData& data);
|
|
|
|
void make_all_visible_multidraws(std::pair<int, int>* draw_ptrs_out,
|
|
GLsizei* counts_out,
|
|
void** index_offsets_out,
|
|
const std::vector<tfrag3::ShrubDraw>& draws);
|
|
|
|
u32 make_all_visible_multidraws(std::pair<int, int>* draw_ptrs_out,
|
|
GLsizei* counts_out,
|
|
void** index_offsets_out,
|
|
const std::vector<tfrag3::StripDraw>& draws);
|
|
|
|
u32 make_multidraws_from_vis_string(std::pair<int, int>* draw_ptrs_out,
|
|
GLsizei* counts_out,
|
|
void** index_offsets_out,
|
|
const std::vector<tfrag3::StripDraw>& draws,
|
|
const std::vector<u8>& vis_data);
|
|
|
|
u32 make_all_visible_index_list(std::pair<int, int>* group_out,
|
|
u32* idx_out,
|
|
const std::vector<tfrag3::StripDraw>& draws,
|
|
const u32* idx_in,
|
|
u32* num_tris_out);
|
|
|
|
u32 make_index_list_from_vis_string(std::pair<int, int>* group_out,
|
|
u32* idx_out,
|
|
const std::vector<tfrag3::StripDraw>& draws,
|
|
const std::vector<u8>& vis_data,
|
|
const u32* idx_in,
|
|
u32* num_tris_out);
|
|
|
|
u32 make_all_visible_index_list(std::pair<int, int>* group_out,
|
|
u32* idx_out,
|
|
const std::vector<tfrag3::ShrubDraw>& draws,
|
|
const u32* idx_in);
|
|
|
|
u32 make_multidraws_from_vis_and_proto_string(std::pair<int, int>* draw_ptrs_out,
|
|
GLsizei* counts_out,
|
|
void** index_offsets_out,
|
|
const std::vector<tfrag3::StripDraw>& draws,
|
|
const std::vector<u8>& vis_data,
|
|
const std::vector<u8>& proto_vis_data);
|
|
|
|
u32 make_index_list_from_vis_and_proto_string(std::pair<int, int>* group_out,
|
|
u32* idx_out,
|
|
const std::vector<tfrag3::StripDraw>& draws,
|
|
const std::vector<u8>& vis_data,
|
|
const std::vector<u8>& proto_vis_data,
|
|
const u32* idx_in,
|
|
u32* num_tris_out); |