mirror of
https://github.com/open-goal/jak-project
synced 2026-08-06 18:03:30 -04:00
5b04be2fa0
This adds hfrag, but with a few remaining issues: - The textures aren't animated. Instead, it just uses one texture. - The texture filtering isn't as good as at it could be. I also cleaned up a few issues with the background renderers: - Cleaned up some stuff that is common to hfrag, tie, tfrag, shrub - Moved time-of-day color packing stuff to FR3 creation, rather than at level load. This appears to reduce the frame time spikes when a level is first drawn by about 5 or 6 ms in big levels. - Cleaned up the x86 specific stuff used in time of day. Now there's only one place where we have an `ifdef`, rather than spreading it all over the rendering code.
110 lines
4.6 KiB
C++
110 lines
4.6 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[32];
|
|
};
|
|
static_assert(sizeof(TfragPcPortData) == 16 * 25);
|
|
|
|
// 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 GoalBackgroundCameraData& settings,
|
|
SharedRenderState* render_state,
|
|
ShaderId shader);
|
|
|
|
void interp_time_of_day(const math::Vector<s32, 4> itimes[4],
|
|
const tfrag3::PackedTimeOfDay& packed_colors,
|
|
math::Vector<u8, 4>* out);
|
|
|
|
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);
|