jak-project/game/graphics/opengl_renderer/AdgifHandler.h
water111 a6fa04a83d
[graphics] port generic VU1 to OpenGL (#1221)
* temp

* name the obvious ones

* un-pipelined the fast case in generic vu1

* generic2 dma

* pass2

* first pass at opengl

* many fixes

* fix hud, strip

* windows fix

* final tweaks

* memcard folder

* add missing include
2022-03-06 19:56:43 -05:00

50 lines
1.6 KiB
C++

#pragma once
#include "common/dma/gs.h"
class AdgifHelper {
public:
// takes the 5QW of adgif data
explicit AdgifHelper(const u8* data) {
memcpy(&m_data, data, 16 * 5);
m_tex0 = GsTex0(m_data.tex0_data);
m_tex1 = GsTex1(m_data.tex1_data);
m_alpha = GsAlpha(m_data.alpha_data);
}
explicit AdgifHelper(const AdGifData& data) : m_data(data) {
m_tex0 = GsTex0(m_data.tex0_data);
m_tex1 = GsTex1(m_data.tex1_data);
m_alpha = GsAlpha(m_data.alpha_data);
}
bool is_normal_adgif() const {
return (u8)m_data.tex0_addr == (u32)GsRegisterAddress::TEX0_1 &&
(u8)m_data.tex1_addr == (u32)GsRegisterAddress::TEX1_1 &&
(u8)m_data.mip_addr == (u32)GsRegisterAddress::MIPTBP1_1 &&
(u8)m_data.clamp_addr == (u32)GsRegisterAddress::CLAMP_1 &&
(u8)m_data.alpha_addr == (u32)GsRegisterAddress::ALPHA_1;
}
std::string print() const {
std::string result;
result += fmt::format("[0] {}\n {}", register_address_name(m_data.tex0_addr), m_tex0.print());
result += fmt::format("[1] {}\n {}", register_address_name(m_data.tex1_addr), m_tex1.print());
result += fmt::format("[2] {}\n", register_address_name(m_data.mip_addr));
result += fmt::format("[3] {}\n 0x{:x}\n", register_address_name(m_data.clamp_addr),
m_data.clamp_data);
result +=
fmt::format("[4] {}\n {}\n", register_address_name(m_data.alpha_addr), m_alpha.print());
return result;
}
const GsAlpha& alpha() const { return m_alpha; }
const GsTex0& tex0() const { return m_tex0; }
private:
AdGifData m_data;
GsTex0 m_tex0;
GsTex1 m_tex1;
GsAlpha m_alpha;
};