mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
b5d21be9c5
* temp * temp * before cleaning up * cleanup merge * fix warnings * merge fix * clang format
75 lines
2.3 KiB
C++
75 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <optional>
|
|
|
|
#include "common/util/FilteredValue.h"
|
|
|
|
#include "game/graphics/gfx.h"
|
|
#include "game/graphics/opengl_renderer/BucketRenderer.h"
|
|
#include "game/graphics/opengl_renderer/background/background_common.h"
|
|
#include "game/graphics/pipelines/opengl.h"
|
|
|
|
class Shrub : public BucketRenderer {
|
|
public:
|
|
Shrub(const std::string& name, int my_id);
|
|
~Shrub();
|
|
bool setup_for_level(const std::string& level, SharedRenderState* render_state);
|
|
void render_all_trees(const TfragRenderSettings& settings,
|
|
SharedRenderState* render_state,
|
|
ScopedProfilerNode& prof);
|
|
void render_tree(int idx,
|
|
const TfragRenderSettings& settings,
|
|
SharedRenderState* render_state,
|
|
ScopedProfilerNode& prof);
|
|
void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override;
|
|
void draw_debug_window() override;
|
|
|
|
private:
|
|
void update_load(const LevelData* loader_data);
|
|
void discard_tree_cache();
|
|
|
|
struct Tree {
|
|
GLuint vertex_buffer;
|
|
GLuint index_buffer;
|
|
GLuint single_draw_index_buffer;
|
|
GLuint time_of_day_texture;
|
|
GLuint vao;
|
|
u32 vert_count;
|
|
const std::vector<tfrag3::ShrubDraw>* draws = nullptr;
|
|
const std::vector<tfrag3::TieWindInstance>* instance_info = nullptr;
|
|
const std::vector<tfrag3::TimeOfDayColor>* colors = nullptr;
|
|
const u32* index_data = nullptr;
|
|
SwizzledTimeOfDay tod_cache;
|
|
|
|
struct {
|
|
u32 draws = 0;
|
|
u32 wind_draws = 0;
|
|
Filtered<float> cull_time;
|
|
Filtered<float> index_time;
|
|
Filtered<float> tod_time;
|
|
Filtered<float> setup_time;
|
|
Filtered<float> draw_time;
|
|
Filtered<float> tree_time;
|
|
} perf;
|
|
};
|
|
|
|
std::vector<Tree> m_trees;
|
|
std::string m_level_name;
|
|
const std::vector<GLuint>* m_textures;
|
|
u64 m_load_id = -1;
|
|
|
|
std::vector<math::Vector<u8, 4>> m_color_result;
|
|
|
|
static constexpr int TIME_OF_DAY_COLOR_COUNT = 8192;
|
|
bool m_has_level = false;
|
|
|
|
struct Cache {
|
|
std::vector<std::pair<int, int>> draw_idx_temp;
|
|
std::vector<u32> index_temp;
|
|
std::vector<std::pair<int, int>> multidraw_offset_per_stripdraw;
|
|
std::vector<GLsizei> multidraw_count_buffer;
|
|
std::vector<void*> multidraw_index_offset_buffer;
|
|
} m_cache;
|
|
TfragPcPortData m_pc_port_data;
|
|
};
|