jak-project/game/graphics/opengl_renderer/background/TFragment.h
water111 3d4dfb2077
[decomp] Decompile some time-of-day stuff, support new style Jak 2 time of day (#1943)
- Add "tfrag-water" tfrag tree support (may just be the same as Jak 1's
'dirt' for the settings)
- Add "tfrag-trans" tfrag tree support, reusing "trans-tfrag" from jak
1.
- Add a hack to `LinkedObjectFileCreation` to handle `oracle`, which is
accidentally multiply defined as a type leftover from jak 1 (an entity
in village1), and level info for jak 2.
- Add `VI1.DGO`
- add `time-of-day.gc`, and a few other stub functions so it works
- Set up some time of day stuff in GOAL for jak 2/PC renderers
- Clean up time of day in c++ renderers, support the more complicated
weight system used by jak 2 (backward compatible with jak 1, thankfully)

The mood functions now run, so this could cause problems if they rely on
stuff we don't have yet. But it seems fine for ctysluma and prison for
now.


![image](https://user-images.githubusercontent.com/48171810/194719441-d185f59c-19dc-4cd3-a5c4-00b0cfe1d6c3.png)


![image](https://user-images.githubusercontent.com/48171810/194719449-6e051bf3-0750-42e5-a654-901313dbe479.png)


![image](https://user-images.githubusercontent.com/48171810/194719455-3ca6793e-873a-449a-8e85-9c20ffeb4da3.png)


![image](https://user-images.githubusercontent.com/48171810/194719461-8f27af17-4434-4492-96cd-8c5eec6eafdf.png)


![image](https://user-images.githubusercontent.com/48171810/194719468-720715b9-985a-4acf-928c-eab948cfcb03.png)


![image](https://user-images.githubusercontent.com/48171810/194719486-bfb91e83-f6ca-4585-80ad-3b2c0cbbd5af.png)


![image](https://user-images.githubusercontent.com/48171810/194719492-df065d2f-cb5a-47e3-a248-f5317c42082f.png)


![image](https://user-images.githubusercontent.com/48171810/194719507-91e1f477-ecfe-4d6c-b744-5f24646255ca.png)
2022-10-08 13:33:03 -04:00

82 lines
2 KiB
C++

#pragma once
#include "common/dma/gs.h"
#include "common/math/Vector.h"
#include "game/graphics/opengl_renderer/BucketRenderer.h"
#include "game/graphics/opengl_renderer/DirectRenderer.h"
#include "game/graphics/opengl_renderer/background/Tfrag3.h"
#include "game/graphics/opengl_renderer/background/Tie3.h"
using math::Matrix4f;
using math::Vector4f;
struct TFragData {
Vector4f fog; // 0 656 (vf01)
Vector4f val; // 1 657 (vf02)
GifTag str_gif; // 2 658 (vf06)
GifTag fan_gif; // 3 659
GifTag ad_gif; // 4 660
Vector4f hvdf_offset; // 5 661 (vf10)
Vector4f hmge_scale; // 6 662 (vf11)
Vector4f invh_scale; // 7 663
Vector4f ambient; // 8 664
Vector4f guard; // 9 665
Vector4f k0s[2]; // 10/11 666, 667
Vector4f k1s[2]; // 12/13 668, 669
std::string print() const;
};
static_assert(sizeof(TFragData) == 0xe0, "TFragData size");
struct TFragBufferedData {
u8 pad[328 * 16];
};
static_assert(sizeof(TFragBufferedData) == 328 * 16);
class TFragment : public BucketRenderer {
public:
TFragment(const std::string& name,
int my_id,
const std::vector<tfrag3::TFragmentTreeKind>& trees,
bool child_mode,
int level_id);
void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override;
void draw_debug_window() override;
private:
void handle_initialization(DmaFollower& dma);
bool m_child_mode = false;
// GS setup data
u8 m_test_setup[32];
// VU data
TFragData m_tfrag_data;
TfragPcPortData m_pc_port_data;
// buffers
TFragBufferedData m_buffered_data[2];
enum TFragDataMem {
Buffer0_Start = 0,
TFragMatrix0 = 5,
Buffer1_Start = 328,
TFragMatrix1 = TFragMatrix0 + Buffer1_Start,
TFragFrameData = 656,
TFragKickZoneData = 670,
};
enum TFragProgMem {
TFragSetup = 0,
};
Tfrag3 m_tfrag3;
std::vector<tfrag3::TFragmentTreeKind> m_tree_kinds;
int m_level_id;
};