mirror of
https://github.com/PrimeDecomp/prime.git
synced 2025-12-08 15:04:54 +00:00
More CGX matches part 2
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#include "gx_struct.h"
|
||||
#include <dolphin/gx/GXStruct.h>
|
||||
|
||||
class COsContext {
|
||||
public:
|
||||
|
||||
@@ -4,6 +4,11 @@
|
||||
#include "types.h"
|
||||
|
||||
#include "dolphin/gx.h"
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef __MWERKS__
|
||||
#pragma cpp_extensions on
|
||||
#endif
|
||||
|
||||
class CGX {
|
||||
public:
|
||||
@@ -33,24 +38,29 @@ public:
|
||||
f32 xc_fogFarZ;
|
||||
GXColor x10_fogColor;
|
||||
|
||||
SFogParams(); /* {
|
||||
x0_fogStartZ = 0.f;
|
||||
x4_fogEndZ = 1.f;
|
||||
x8_fogNearZ = 0.1f;
|
||||
xc_fogFarZ = 1.f;
|
||||
}*/
|
||||
SFogParams() : x0_fogStartZ(0.f), x4_fogEndZ(1.f), x8_fogNearZ(0.1f), xc_fogFarZ(1.f) {
|
||||
x10_fogColor.a = 0;
|
||||
x10_fogColor.b = 0;
|
||||
x10_fogColor.g = 0;
|
||||
x10_fogColor.r = 0;
|
||||
}
|
||||
};
|
||||
|
||||
struct SGXState {
|
||||
void* x0_arrayPtrs[12];
|
||||
const void* x0_arrayPtrs[12];
|
||||
u16 x30_prevChanCtrls[2];
|
||||
u16 x34_chanCtrls[2];
|
||||
GXColor x38_chanAmbColors[2];
|
||||
GXColor x40_chanMatColors[2];
|
||||
u32 x48_descList;
|
||||
u8 x4c_ : 5;
|
||||
u8 x4c_dirtyChanCtrl : 2;
|
||||
u8 x4c_numChansDirty : 1;
|
||||
union {
|
||||
u8 x4c_flags;
|
||||
struct {
|
||||
u8 x4c_unk : 5;
|
||||
u8 x4c_dirtyChanCtrl : 2;
|
||||
u8 x4c_numChansDirty : 1;
|
||||
};
|
||||
};
|
||||
u8 x4d_prevNumChans;
|
||||
u8 x4e_numChans;
|
||||
u8 x4f_numTexGens;
|
||||
@@ -77,6 +87,7 @@ public:
|
||||
static void SetNumChans(u8 num);
|
||||
static void SetNumTexGens(u8 num);
|
||||
static void SetNumTevStages(u8 num);
|
||||
static void SetNumIndStages(u8 num);
|
||||
static void SetChanAmbColor(EChannelId channel, const GXColor& color);
|
||||
static void SetChanMatColor(EChannelId channel, const GXColor& color);
|
||||
static void SetChanCtrl(EChannelId channel, GXBool enable, GXColorSrc ambSrc, GXColorSrc matSrc, GXLightID lights, GXDiffuseFn diffFn,
|
||||
@@ -88,6 +99,28 @@ public:
|
||||
static void SetTevColorOp_Compressed(GXTevStageID stageId, u32 flags);
|
||||
static void SetTevAlphaOp(GXTevStageID stageId, GXTevOp op, GXTevBias bias, GXTevScale scale, GXBool clamp, GXTevRegID outReg);
|
||||
static void SetTevAlphaOp_Compressed(GXTevStageID stageId, u32 flags);
|
||||
static void SetTevKColorSel(GXTevStageID stageId, GXTevKColorSel sel);
|
||||
static void SetTevKAlphaSel(GXTevStageID stageId, GXTevKAlphaSel sel);
|
||||
static void SetTevOrder(GXTevStageID stageId, GXTexCoordID texCoord, GXTexMapID texMap, GXChannelID color);
|
||||
static void SetBlendMode(GXBlendMode mode, GXBlendFactor srcFac, GXBlendFactor dstFac, GXLogicOp op);
|
||||
static void SetZMode(bool compareEnable, GXCompare func, bool updateEnable);
|
||||
static void SetAlphaCompare(GXCompare comp0, u8 ref0, GXAlphaOp op, GXCompare comp1, u8 ref1);
|
||||
static void SetTevIndirect(GXTevStageID stageId, GXIndTexStageID indStage, GXIndTexFormat fmt, GXIndTexBiasSel biasSel,
|
||||
GXIndTexMtxID mtxSel, GXIndTexWrap wrapS, GXIndTexWrap wrapT, GXBool addPrev, GXBool indLod,
|
||||
GXIndTexAlphaSel alphaSel);
|
||||
static void SetTevDirect(GXTevStageID stageId);
|
||||
static void SetTexCoordGen(GXTexCoordID dstCoord, GXTexGenType fn, GXTexGenSrc src, GXTexMtx mtx, GXBool normalize, GXPTTexMtx postMtx);
|
||||
static void SetArray(GXAttr attr, const void* data, u8 stride);
|
||||
static void SetFog(GXFogType type, f32 startZ, f32 endZ, f32 nearZ, f32 farZ, const GXColor& color);
|
||||
static void SetLineWidth(u8 width, GXTexOffset offset);
|
||||
static void SetIndTexMtxSTPointFive(GXIndTexMtxID id, s8 scaleExp);
|
||||
static void SetVtxDescv_Compressed(u32 flags);
|
||||
|
||||
static void CallDisplayList(const void* ptr, size_t size);
|
||||
static void Begin(GXPrimitive prim, GXVtxFmt fmt, u16 numVtx);
|
||||
static void End();
|
||||
static void ResetGXStates();
|
||||
static void ResetGXStatesFull(); // name?
|
||||
|
||||
static GXColor GetChanAmbColor(EChannelId channel);
|
||||
|
||||
@@ -97,9 +130,13 @@ public:
|
||||
static inline void CopyGXColor(GXColor& dst, const GXColor& src) {
|
||||
*reinterpret_cast< u32* >(&dst) = *reinterpret_cast< const u32* >(&src);
|
||||
}
|
||||
static inline u32 MaskAndShiftLeft(u32 a, u32 b, u32 s) { return (a & b) << s; }
|
||||
static inline u32 MaskAndShiftLeft(u32 v, u32 m, u32 s) { return (v & m) << s; }
|
||||
static inline u32 ShiftRightAndMask(u32 v, u32 m, u32 s) { return (v >> s) & m; }
|
||||
|
||||
private:
|
||||
static void FlushState();
|
||||
static void update_fog(u32 flags);
|
||||
|
||||
static SGXState sGXState;
|
||||
};
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#ifndef _CTEVCOMBINERS_HPP
|
||||
#define _CTEVCOMBINERS_HPP
|
||||
|
||||
#include "gx_enum.h"
|
||||
#include "types.h"
|
||||
|
||||
#include <dolphin/gx/GXEnum.h>
|
||||
|
||||
class CTevCombiners {
|
||||
public:
|
||||
enum EColorSrc {
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#ifndef _CTEXTURE_HPP
|
||||
#define _CTEXTURE_HPP
|
||||
|
||||
#include "gx_enum.h"
|
||||
#include "types.h"
|
||||
|
||||
#include <dolphin/gx/GXEnum.h>
|
||||
|
||||
class CTexture {
|
||||
public:
|
||||
enum EClampMode {
|
||||
@@ -13,6 +14,8 @@ public:
|
||||
};
|
||||
|
||||
void Load(GXTexMapID texMapId, EClampMode clampMode) const;
|
||||
|
||||
static void InvalidateTexmap(GXTexMapID id);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,9 +1,10 @@
|
||||
#ifndef _CCUBERENDERER_HPP
|
||||
#define _CCUBERENDERER_HPP
|
||||
|
||||
#include "gx_enum.h"
|
||||
#include "types.h"
|
||||
|
||||
#include <dolphin/gx/GXEnum.h>
|
||||
|
||||
#include "Kyoto/Graphics/CColor.hpp"
|
||||
#include "Kyoto/Math/CTransform4f.hpp"
|
||||
#include "Kyoto/Math/CVector2f.hpp"
|
||||
|
||||
@@ -15,11 +15,12 @@ void GXSetIndTexMtx(GXIndTexMtxID mtx_sel, const void* offset, s8 scale_exp);
|
||||
void GXSetIndTexMtx(GXIndTexMtxID mtx_sel, f32 offset[2][3], s8 scale_exp);
|
||||
#endif
|
||||
void GXSetIndTexOrder(GXIndTexStageID ind_stage, GXTexCoordID tex_coord, GXTexMapID tex_map);
|
||||
void GXSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexFormat format,
|
||||
GXIndTexBiasSel bias_sel, GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s, GXIndTexWrap wrap_t,
|
||||
GXBool add_prev, GXBool ind_lod, GXIndTexAlphaSel alpha_sel);
|
||||
void GXSetTevIndirect(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXIndTexFormat format, GXIndTexBiasSel bias_sel,
|
||||
GXIndTexMtxID matrix_sel, GXIndTexWrap wrap_s, GXIndTexWrap wrap_t, GXBool add_prev, GXBool ind_lod,
|
||||
GXIndTexAlphaSel alpha_sel);
|
||||
void GXSetTevIndWarp(GXTevStageID tev_stage, GXIndTexStageID ind_stage, GXBool signed_offsets, GXBool replace_mode,
|
||||
GXIndTexMtxID matrix_sel);
|
||||
void GXSetIndTexCoordScale(GXIndTexStageID ind_state, GXIndTexScale scale_s, GXIndTexScale scale_t);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -122,6 +122,8 @@ typedef enum _GXAttr {
|
||||
GX_VA_NULL = 0xFF,
|
||||
} GXAttr;
|
||||
|
||||
#define GX_MAX_VTXDESCLIST_SZ (GX_VA_MAX_ATTR + 1)
|
||||
|
||||
typedef enum _GXAttrType {
|
||||
GX_NONE,
|
||||
GX_DIRECT,
|
||||
|
||||
@@ -8,19 +8,20 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void GXInitTexObj(GXTexObj* obj, const void* data, u16 width, u16 height, u32 format, GXTexWrapMode wrapS,
|
||||
GXTexWrapMode wrapT, GXBool mipmap);
|
||||
void GXInitTexObjCI(GXTexObj* obj, const void* data, u16 width, u16 height, GXCITexFmt format, GXTexWrapMode wrapS,
|
||||
GXTexWrapMode wrapT, GXBool mipmap, u32 tlut);
|
||||
void GXInitTexObj(GXTexObj* obj, const void* data, u16 width, u16 height, u32 format, GXTexWrapMode wrapS, GXTexWrapMode wrapT,
|
||||
GXBool mipmap);
|
||||
void GXInitTexObjCI(GXTexObj* obj, const void* data, u16 width, u16 height, GXCITexFmt format, GXTexWrapMode wrapS, GXTexWrapMode wrapT,
|
||||
GXBool mipmap, u32 tlut);
|
||||
void GXInitTexObjData(GXTexObj* obj, const void* data);
|
||||
void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filt, GXTexFilter mag_filt, f32 min_lod, f32 max_lod, f32 lod_bias,
|
||||
GXBool bias_clamp, GXBool do_edge_lod, GXAnisotropy max_aniso);
|
||||
void GXInitTexObjLOD(GXTexObj* obj, GXTexFilter min_filt, GXTexFilter mag_filt, f32 min_lod, f32 max_lod, f32 lod_bias, GXBool bias_clamp,
|
||||
GXBool do_edge_lod, GXAnisotropy max_aniso);
|
||||
void GXLoadTexObj(GXTexObj* obj, GXTexMapID id);
|
||||
u32 GXGetTexBufferSize(u16 width, u16 height, u32 format, GXBool mipmap, u8 max_lod);
|
||||
void GXInvalidateTexAll();
|
||||
void GXInitTexObjWrapMode(GXTexObj* obj, GXTexWrapMode s, GXTexWrapMode t);
|
||||
void GXInitTlutObj(GXTlutObj* obj, const void* data, GXTlutFmt format, u16 entries);
|
||||
void GXLoadTlut(const GXTlutObj* obj, GXTlut idx);
|
||||
void GXSetTexCoordScaleManually(GXTexCoordID coord, GXBool enable, u16 ss, u16 ts);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
#ifndef __GX_ENUM_H__
|
||||
#define __GX_ENUM_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum _GXTexMapID {
|
||||
GX_TEXMAP0,
|
||||
GX_TEXMAP1,
|
||||
GX_TEXMAP2,
|
||||
GX_TEXMAP3,
|
||||
GX_TEXMAP4,
|
||||
GX_TEXMAP5,
|
||||
GX_TEXMAP6,
|
||||
GX_TEXMAP7,
|
||||
GX_MAX_TEXMAP,
|
||||
GX_TEXMAP_NULL = 0xFF,
|
||||
GX_TEX_DISABLE = 0x100,
|
||||
} GXTexMapID;
|
||||
|
||||
typedef enum _GXPrimitive {
|
||||
GX_QUADS = 0x80,
|
||||
GX_TRIANGLES = 0x90,
|
||||
GX_TRIANGLESTRIP = 0x98,
|
||||
GX_TRIANGLEFAN = 0xA0,
|
||||
GX_LINES = 0xA8,
|
||||
GX_LINESTRIP = 0xB0,
|
||||
GX_POINTS = 0xB8,
|
||||
} GXPrimitive;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -1,30 +0,0 @@
|
||||
#ifndef __GX_STRUCT_H__
|
||||
#define __GX_STRUCT_H__
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef struct _GXRenderModeObj {
|
||||
u32 viTVMode;
|
||||
u16 fbWidth;
|
||||
u16 efbHeight;
|
||||
u16 xfbHeight;
|
||||
u16 viXOrigin;
|
||||
u16 viYOrigin;
|
||||
u16 viWidth;
|
||||
u16 viHeight;
|
||||
u32 xfbMode;
|
||||
u8 field_rendering;
|
||||
u8 aa;
|
||||
u8 sample_pattern[12][2];
|
||||
u8 vfilter[7];
|
||||
} GXRenderModeObj;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user