mirror of
https://github.com/zeldaret/ss
synced 2026-08-02 08:31:51 -04:00
Some Symbols
This commit is contained in:
@@ -20,7 +20,7 @@ CoreControllerMgr::T__Disposer *CoreControllerMgr::T__Disposer::sStaticDisposer;
|
||||
CoreControllerFactory CoreControllerMgr::sCoreControllerFactory;
|
||||
CoreControllerConnectCallback CoreControllerMgr::sConnectCallback;
|
||||
// This controls whether EggController registers an allocator within the WPAD driver
|
||||
bool CoreControllerMgr::sUseBuiltinWpadAllocator;
|
||||
bool CoreControllerMgr::sWPADRegisterAllocatorOFF;
|
||||
s32 CoreControllerMgr::sWPADWorkSize = 0x32000;
|
||||
|
||||
void CoreStatus::init() {
|
||||
@@ -356,7 +356,7 @@ void CoreControllerMgr::connectCallback(s32 a1, s32 a2) {
|
||||
/* 0x80499D10 */
|
||||
CoreControllerMgr::CoreControllerMgr() {
|
||||
const int idxes[] = {0, 1, 2, 3};
|
||||
if (sUseBuiltinWpadAllocator == false) {
|
||||
if (sWPADRegisterAllocatorOFF == false) {
|
||||
Heap *heap = ExpHeap::create(sWPADWorkSize, BaseSystem::mConfigData->mRootHeapMem2, 0);
|
||||
heap->mName = "EGG::CoreControllerMgr";
|
||||
sAllocator = new Allocator(heap, 0x20);
|
||||
|
||||
@@ -296,16 +296,15 @@ const GXRenderModeObj gRMO_Ntsc_640x456IntDf_4x3 = {
|
||||
{0, 0, 21, 22, 21, 0, 0} // vFilter
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
namespace EGG {
|
||||
|
||||
const EGG::Video::RenderModeObjSet renderModes = {
|
||||
const EGG::Video::RenderModeObjSet gStandardRenderModeObjSet = {
|
||||
{&gRMO_Pal60_640x456Prog_16x9, &gRMO_Pal60_640x456IntDf_16x9, &gRMO_Pal50_640x456IntDf_16x9,
|
||||
&gRMO_Ntsc_640x456Prog_16x9, &gRMO_Ntsc_640x456IntDf_16x9, &gRMO_Pal60_640x456Prog_4x3,
|
||||
&gRMO_Pal60_640x456IntDf_4x3, &gRMO_Pal50_640x456IntDf_4x3, &gRMO_Ntsc_640x456Prog_4x3,
|
||||
&gRMO_Ntsc_640x456IntDf_4x3}
|
||||
};
|
||||
} // namespace
|
||||
|
||||
namespace EGG {
|
||||
|
||||
void Video::initialize(GXRenderModeObj *obj, const RenderModeObjSet *set) {
|
||||
VIInit();
|
||||
@@ -315,7 +314,7 @@ void Video::initialize(GXRenderModeObj *obj, const RenderModeObjSet *set) {
|
||||
GXRenderModeObj *Video::configure(GXRenderModeObj *obj, const RenderModeObjSet *set) {
|
||||
GXRenderModeObj *oldMode = pRenderMode;
|
||||
if (set == nullptr) {
|
||||
set = &renderModes;
|
||||
set = &gStandardRenderModeObjSet;
|
||||
}
|
||||
if (obj == nullptr) {
|
||||
// Cast away constness. In an incredibly cursed way, adding proper
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace EGG {
|
||||
|
||||
namespace {
|
||||
|
||||
void calcColorGradient(GXColor &outColor, const GXColor &c1, const GXColor &c2, f32 amount) {
|
||||
void blendColor(GXColor &outColor, const GXColor &c1, const GXColor &c2, f32 amount) {
|
||||
if (amount <= 0.0f) {
|
||||
outColor = c1;
|
||||
} else if (amount >= 1.0f) {
|
||||
@@ -62,7 +62,7 @@ void makeGradient(int op, GXColor *outColor, u16 size, u16 start, u16 end, const
|
||||
ratio = -ratio * ratio * ratio * ratio + 1.0f;
|
||||
break;
|
||||
}
|
||||
calcColorGradient(outColor[i], c1, c2, ratio);
|
||||
blendColor(outColor[i], c1, c2, ratio);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+85
-81
@@ -36,12 +36,8 @@ const DrawGX::DL DrawGX::s_DL0 = DrawGX::DL_0;
|
||||
const DrawGX::DL DrawGX::s_DL7 = DrawGX::DL_7;
|
||||
const DrawGX::DL DrawGX::s_DL8 = DrawGX::DL_8;
|
||||
|
||||
GXTexMapID DrawGX::sTexMapDefault;
|
||||
GXLightID DrawGX::sLightMaskDefault = GX_LIGHT0;
|
||||
|
||||
nw4r::math::MTX34 DrawGX::s_cameraMtx;
|
||||
DrawGX::DLData DrawGX::s_DL[DL_MAX];
|
||||
GXTexObj DrawGX::sDummyTexObj;
|
||||
|
||||
u32 DrawGX::s_flag;
|
||||
|
||||
@@ -49,6 +45,10 @@ u32 DrawGX::s_flag;
|
||||
|
||||
namespace {
|
||||
|
||||
static GXTexObj CLEAR_Z_TEX_OBJ;
|
||||
static GXLightID LIGHTMASK_DEFAULT = GX_LIGHT0;
|
||||
static GXTexMapID TEXMAP_DEFAULT;
|
||||
|
||||
static void DrawQuadNormal(u8 x1, u8 x2, u8 x3, u8 x4, u8 y) {
|
||||
GXPosition2u8(x1, y);
|
||||
GXPosition2u8(x2, y);
|
||||
@@ -118,42 +118,42 @@ namespace EGG {
|
||||
|
||||
static DrawGX sDrawGX;
|
||||
|
||||
static u8 DummyTextureData[64] = {
|
||||
// clang-format off
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
void DrawGX::Initialize(Heap *pHeap_) {
|
||||
2.0f; // cool
|
||||
2.0f; // cool+
|
||||
|
||||
static u8 s_clear_z_TX[64] = {
|
||||
// clang-format off
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0x00, 0xFF, 0x00, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF,
|
||||
// clang-format on
|
||||
};
|
||||
Heap *pHeap = pHeap_ == nullptr ? Heap::getCurrentHeap() : pHeap_;
|
||||
|
||||
GXInitTexObj(&sDummyTexObj, DummyTextureData, 4, 4, GX_TF_Z24X8, GX_REPEAT, GX_REPEAT, false);
|
||||
GXInitTexObjLOD(&sDummyTexObj, GX_NEAR, GX_NEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
|
||||
GXInitTexObj(&CLEAR_Z_TEX_OBJ, s_clear_z_TX, 4, 4, GX_TF_Z24X8, GX_REPEAT, GX_REPEAT, false);
|
||||
GXInitTexObjLOD(&CLEAR_Z_TEX_OBJ, GX_NEAR, GX_NEAR, 0.0, 0.0, 0.0, 0, 0, GX_ANISO_1);
|
||||
PSMTXIdentity(s_cameraMtx.m);
|
||||
CreateDisplayList(pHeap);
|
||||
}
|
||||
|
||||
GXTexMapID DrawGX::GetTexMapDefault() {
|
||||
return sTexMapDefault;
|
||||
return TEXMAP_DEFAULT;
|
||||
}
|
||||
GXLightID DrawGX::GetLightMaskDefault() {
|
||||
return sLightMaskDefault;
|
||||
return LIGHTMASK_DEFAULT;
|
||||
}
|
||||
|
||||
void DrawGX::BeginDrawLine(ColorChannel chan, ZMode zMode) {
|
||||
@@ -240,7 +240,7 @@ void DrawGX::ClearEfb(
|
||||
GXSetCullMode(GX_CULL_NONE);
|
||||
if (b3) {
|
||||
SetMat_TexGen(TEXGEN_1);
|
||||
GXLoadTexObj(&sDummyTexObj, sTexMapDefault);
|
||||
GXLoadTexObj(&CLEAR_Z_TEX_OBJ, TEXMAP_DEFAULT);
|
||||
} else {
|
||||
SetMat_TexGen(TEXGEN_0);
|
||||
}
|
||||
@@ -252,7 +252,7 @@ void DrawGX::ClearEfb(
|
||||
GXSetTevSwapMode(GX_TEVSTAGE0, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
|
||||
if (b3) {
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, sTexMapDefault, GX_COLOR_NULL);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, TEXMAP_DEFAULT, GX_COLOR_NULL);
|
||||
} else {
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL);
|
||||
}
|
||||
@@ -336,7 +336,7 @@ void DrawGX::SetMat_Tev(GXTevStageID stageId, enum TevSetting setting) {
|
||||
break;
|
||||
case TEV_2:
|
||||
GXSetTevDirect(stageId);
|
||||
GXSetTevOrder(stageId, GX_TEXCOORD0, sTexMapDefault, GX_COLOR0A0);
|
||||
GXSetTevOrder(stageId, GX_TEXCOORD0, TEXMAP_DEFAULT, GX_COLOR0A0);
|
||||
GXSetTevSwapMode(stageId, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevColorIn(stageId, GX_CC_ZERO, GX_CC_TEXC, GX_CC_RASC, GX_CC_ZERO);
|
||||
GXSetTevColorOp(stageId, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
@@ -345,7 +345,7 @@ void DrawGX::SetMat_Tev(GXTevStageID stageId, enum TevSetting setting) {
|
||||
break;
|
||||
case TEV_1:
|
||||
GXSetTevDirect(stageId);
|
||||
GXSetTevOrder(stageId, GX_TEXCOORD0, sTexMapDefault, GX_COLOR0A0);
|
||||
GXSetTevOrder(stageId, GX_TEXCOORD0, TEXMAP_DEFAULT, GX_COLOR0A0);
|
||||
GXSetTevSwapMode(stageId, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevColorIn(stageId, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_TEXC);
|
||||
GXSetTevColorOp(stageId, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
@@ -377,7 +377,7 @@ void DrawGX::LoadTexture(nw4r::g3d::ResTex tex, GXTexMapID texMapId) {
|
||||
void DrawGX::SetVtxState(EGG::DrawGX::VtxType type) {
|
||||
GXClearVtxDesc();
|
||||
switch (type) {
|
||||
case VTX_TYPE_0:
|
||||
case VTX_TYPE_0: {
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0xe);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_S16, 0xe);
|
||||
// clang-format off
|
||||
@@ -405,16 +405,18 @@ void DrawGX::SetVtxState(EGG::DrawGX::VtxType type) {
|
||||
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
||||
GXSetVtxDesc(GX_VA_NRM, GX_INDEX8);
|
||||
break;
|
||||
}
|
||||
case VTX_TYPE_2:
|
||||
case VTX_TYPE_3:
|
||||
case VTX_TYPE_4:
|
||||
case VTX_TYPE_5:
|
||||
case VTX_TYPE_5: {
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_NRM, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
|
||||
break;
|
||||
case VTX_TYPE_6:
|
||||
}
|
||||
case VTX_TYPE_6: {
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_NRM, GX_DIRECT);
|
||||
GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT);
|
||||
@@ -422,23 +424,25 @@ void DrawGX::SetVtxState(EGG::DrawGX::VtxType type) {
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_F32, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_CLR0, GX_CLR_RGBA, GX_RGBA8, 0);
|
||||
break;
|
||||
case VTX_TYPE_1:
|
||||
}
|
||||
case VTX_TYPE_1: {
|
||||
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
break;
|
||||
}
|
||||
case VTX_TYPE_7:
|
||||
case VTX_TYPE_8:
|
||||
case VTX_TYPE_8: {
|
||||
// clang-format off
|
||||
static const ALIGN_DECL(32) s16 sVtxDataType7[][2] = {
|
||||
static const ALIGN_DECL(32) s16 QUAD_VTX[][2] = {
|
||||
{0xE000, 0x2000},
|
||||
{0x2000, 0x2000},
|
||||
{0x2000, 0xE000},
|
||||
{0xE000, 0xE000},
|
||||
};
|
||||
static const ALIGN_DECL(32) s16 sNrmDataType7[][3] = {
|
||||
static const ALIGN_DECL(32) s16 QUAD_NRM[][3] = {
|
||||
{0x0000, 0x0000, 0x4000}
|
||||
};
|
||||
static const ALIGN_DECL(32) u8 sTexDataType7[][2] = {
|
||||
static const ALIGN_DECL(32) u8 QUAD_UV[][2] = {
|
||||
{0x00, 0x00},
|
||||
{0x01, 0x00},
|
||||
{0x01, 0x01},
|
||||
@@ -455,21 +459,22 @@ void DrawGX::SetVtxState(EGG::DrawGX::VtxType type) {
|
||||
if (type == VTX_TYPE_7) {
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_U8, 0);
|
||||
}
|
||||
GXSetArray(GX_VA_POS, sVtxDataType7, 4);
|
||||
GXSetArray(GX_VA_NRM, sNrmDataType7, 6);
|
||||
GXSetArray(GX_VA_POS, QUAD_VTX, 4);
|
||||
GXSetArray(GX_VA_NRM, QUAD_NRM, 6);
|
||||
if (type == VTX_TYPE_7) {
|
||||
GXSetArray(GX_VA_TEX0, sTexDataType7, 2);
|
||||
GXSetArray(GX_VA_TEX0, QUAD_UV, 2);
|
||||
}
|
||||
break;
|
||||
case VTX_TYPE_9:
|
||||
}
|
||||
case VTX_TYPE_9: {
|
||||
// clang-format off
|
||||
static const ALIGN_DECL(32) s16 sVtxDataType9[][3] = {
|
||||
static const ALIGN_DECL(32) s16 QUAD_VTX[][3] = {
|
||||
{0xE000, 0x0000, 0xE000},
|
||||
{0x2000, 0x0000, 0xE000},
|
||||
{0x2000, 0x0000, 0x2000},
|
||||
{0xE000, 0x0000, 0x2000},
|
||||
};
|
||||
static const ALIGN_DECL(32) s16 sNrmDataType9[][3] = {
|
||||
static const ALIGN_DECL(32) s16 QUAD_NRM[][3] = {
|
||||
{0x0000, 0x4000, 0x0000}
|
||||
};
|
||||
// clang-format on
|
||||
@@ -477,21 +482,22 @@ void DrawGX::SetVtxState(EGG::DrawGX::VtxType type) {
|
||||
GXSetVtxDesc(GX_VA_NRM, GX_INDEX8);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0xe);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_NRM, GX_NRM_XYZ, GX_S16, 0xe);
|
||||
GXSetArray(GX_VA_POS, sVtxDataType9, 6);
|
||||
GXSetArray(GX_VA_NRM, sNrmDataType9, 6);
|
||||
GXSetArray(GX_VA_POS, QUAD_VTX, 6);
|
||||
GXSetArray(GX_VA_NRM, QUAD_NRM, 6);
|
||||
break;
|
||||
}
|
||||
case VTX_TYPE_10:
|
||||
case VTX_TYPE_11:
|
||||
case VTX_TYPE_12:
|
||||
case VTX_TYPE_13: {
|
||||
// clang-format off
|
||||
static const ALIGN_DECL(32) u8 sPosDataType10[][2] = {
|
||||
static const ALIGN_DECL(32) u8 SCREEN_VTX[][2] = {
|
||||
{0x00, 0x01},
|
||||
{0x01, 0x01},
|
||||
{0x01, 0x00},
|
||||
{0x00, 0x00},
|
||||
};
|
||||
static const ALIGN_DECL(32) u8 sTexDataType10[][2] = {
|
||||
static const ALIGN_DECL(32) u8 SCREEN_VTX_LU[][2] = {
|
||||
{0x00, 0x00},
|
||||
{0x01, 0x00},
|
||||
{0x01, 0x01},
|
||||
@@ -504,9 +510,9 @@ void DrawGX::SetVtxState(EGG::DrawGX::VtxType type) {
|
||||
if (bVar2) {
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
|
||||
}
|
||||
GXSetArray(GX_VA_POS, bVar1 ? sTexDataType10 : sPosDataType10, 2);
|
||||
GXSetArray(GX_VA_POS, bVar1 ? SCREEN_VTX_LU : SCREEN_VTX, 2);
|
||||
if (bVar2) {
|
||||
GXSetArray(GX_VA_TEX0, sTexDataType10, 2);
|
||||
GXSetArray(GX_VA_TEX0, SCREEN_VTX_LU, 2);
|
||||
}
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XY, GX_U8, 0);
|
||||
if (bVar2) {
|
||||
@@ -683,38 +689,36 @@ void DrawGX::DrawDL(enum DL dl, const nw4r::math::MTX34 &mtx, GXColor clr) {
|
||||
GXCallDisplayList(s_DL[dl].mpList, s_DL[dl].mLen);
|
||||
}
|
||||
|
||||
const DrawGX::ZModeConfig DrawGX::s_ZMode[ZMODE_MAX] = {
|
||||
{false, GX_ALWAYS, false},
|
||||
{ true, GX_LEQUAL, true},
|
||||
{ true, GX_LEQUAL, false},
|
||||
{ true, GX_ALWAYS, true},
|
||||
};
|
||||
|
||||
void DrawGX::SetZMode(enum ZMode mode) {
|
||||
GXSetZMode(s_ZMode[mode].mTest, s_ZMode[mode].mCompare, s_ZMode[mode].mUpdate);
|
||||
static const DrawGX::ZModeConfig Z_ARG[ZMODE_MAX] = {
|
||||
{false, GX_ALWAYS, false},
|
||||
{ true, GX_LEQUAL, true},
|
||||
{ true, GX_LEQUAL, false},
|
||||
{ true, GX_ALWAYS, true},
|
||||
};
|
||||
GXSetZMode(Z_ARG[mode].mTest, Z_ARG[mode].mCompare, Z_ARG[mode].mUpdate);
|
||||
}
|
||||
|
||||
const DrawGX::BlendModeConfig DrawGX::s_Blend[BLEND_MAX] = {
|
||||
{ GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVSRCALPHA, GX_BL_SRCALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ONE, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_SRCCLR, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVSRCCLR, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{GX_BM_SUBTRACT, GX_BL_ONE, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ZERO, GX_BL_SRCCLR, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVSRCCLR, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ONE, GX_BL_ZERO, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_DSTALPHA, GX_BL_INVDSTALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVDSTALPHA, GX_BL_DSTALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_DSTALPHA, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVDSTALPHA, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_NONE, GX_BL_ONE, GX_BL_ONE, GX_LO_CLEAR},
|
||||
};
|
||||
|
||||
void DrawGX::SetBlendMode(enum Blend mode) {
|
||||
static const DrawGX::BlendModeConfig BLEND[BLEND_MAX] = {
|
||||
{ GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVSRCALPHA, GX_BL_SRCALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ONE, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_SRCCLR, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVSRCCLR, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{GX_BM_SUBTRACT, GX_BL_ONE, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ZERO, GX_BL_SRCCLR, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ZERO, GX_BL_INVSRCCLR, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_ONE, GX_BL_ZERO, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_DSTALPHA, GX_BL_INVDSTALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVDSTALPHA, GX_BL_DSTALPHA, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_DSTALPHA, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_BLEND, GX_BL_INVDSTALPHA, GX_BL_ONE, GX_LO_CLEAR},
|
||||
{ GX_BM_NONE, GX_BL_ONE, GX_BL_ONE, GX_LO_CLEAR},
|
||||
};
|
||||
GXSetBlendMode(
|
||||
s_Blend[mode].mBlendMode, s_Blend[mode].mBlendFactorSrc, s_Blend[mode].mBlendFactorDst, s_Blend[mode].mLogicOp
|
||||
BLEND[mode].mBlendMode, BLEND[mode].mBlendFactorSrc, BLEND[mode].mBlendFactorDst, BLEND[mode].mLogicOp
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,12 +31,15 @@ int IBinary<LightObject>::GetVersion() {
|
||||
}
|
||||
|
||||
// why
|
||||
static const f32 zeroVec[3] = {0.0f, 0.0f, 0.0f};
|
||||
namespace {
|
||||
|
||||
static const f32 ZERO_VEC[3] = {0.0f, 0.0f, 0.0f};
|
||||
}
|
||||
|
||||
LightObject::LightObject()
|
||||
: mIndex(0),
|
||||
field_0x06(0),
|
||||
mAt(zeroVec),
|
||||
mAt(ZERO_VEC),
|
||||
mPos(-10000.0f, 10000.0f, 10000.0f),
|
||||
mDir(0.0f, -1.0f, 0.0f),
|
||||
mWhite(DrawGX::WHITE),
|
||||
@@ -54,7 +57,7 @@ LightObject::LightObject()
|
||||
mFlags(0x661) {}
|
||||
|
||||
void LightObject::Reset() {
|
||||
SetPosAt(nw4r::math::VEC3(-10000.0f, 10000.0f, 10000.0f), zeroVec);
|
||||
SetPosAt(nw4r::math::VEC3(-10000.0f, 10000.0f, 10000.0f), ZERO_VEC);
|
||||
mFlags = 0x661;
|
||||
mWhite = DrawGX::WHITE;
|
||||
mBlack = DrawGX::BLACK;
|
||||
@@ -149,12 +152,12 @@ void LightObject::InitGX(GXLightObj *obj) const {
|
||||
case 1: {
|
||||
nw4r::math::VEC3 tmp = field_0x94 * -1e10f;
|
||||
GXInitLightPos(obj, tmp.x, tmp.y, tmp.z);
|
||||
GXInitLightDir(obj, zeroVec[0], zeroVec[1], zeroVec[2]);
|
||||
GXInitLightDir(obj, ZERO_VEC[0], ZERO_VEC[1], ZERO_VEC[2]);
|
||||
break;
|
||||
}
|
||||
case 0: {
|
||||
GXInitLightPos(obj, mViewPos.x, mViewPos.y, mViewPos.z);
|
||||
GXInitLightDir(obj, zeroVec[0], zeroVec[1], zeroVec[2]);
|
||||
GXInitLightDir(obj, ZERO_VEC[0], ZERO_VEC[1], ZERO_VEC[2]);
|
||||
break;
|
||||
}
|
||||
case 2: {
|
||||
@@ -259,8 +262,8 @@ void LightObject::CopyFromG3D(
|
||||
g3dLight.GetAnmResult(&result, frame);
|
||||
if (!skipDoingSomething || (result.flags & nw4r::g3d::LightAnmResult::FLAG_LIGHT_ENABLE) != 0) {
|
||||
if ((result.flags & nw4r::g3d::LightAnmResult::FLAG_LIGHT_ENABLE) != 0) {
|
||||
ApplyAnmResultA(result);
|
||||
if (optObj != nullptr && optObj->ApplyAnmResultB(result)) {
|
||||
ImportAnmG3D_Diff(result);
|
||||
if (optObj != nullptr && optObj->ImportAnmG3D_Spec(result)) {
|
||||
optObj->field_0x06 = mIndex;
|
||||
optObj->mFlags |= 2;
|
||||
}
|
||||
@@ -273,7 +276,7 @@ void LightObject::CopyFromG3D(
|
||||
}
|
||||
}
|
||||
|
||||
void LightObject::ApplyAnmResultInner(const nw4r::g3d::LightAnmResult &res) {
|
||||
void LightObject::ImportAnmG3D(const nw4r::g3d::LightAnmResult &res) {
|
||||
// TODO
|
||||
mFlags = mFlags & 0xF07E;
|
||||
mCutoff = 90.0f;
|
||||
@@ -298,8 +301,8 @@ void LightObject::ApplyAnmResultInner(const nw4r::g3d::LightAnmResult &res) {
|
||||
}
|
||||
}
|
||||
|
||||
void LightObject::ApplyAnmResultA(const nw4r::g3d::LightAnmResult &res) {
|
||||
ApplyAnmResultInner(res);
|
||||
void LightObject::ImportAnmG3D_Diff(const nw4r::g3d::LightAnmResult &res) {
|
||||
ImportAnmG3D(res);
|
||||
switch ((int)(res.flags & nw4r::g3d::LightAnmResult::FLAG_LIGHT_TYPE_MASK)) {
|
||||
case 0: {
|
||||
field_0x3D = 0;
|
||||
@@ -334,9 +337,9 @@ void LightObject::ApplyAnmResultA(const nw4r::g3d::LightAnmResult &res) {
|
||||
}
|
||||
}
|
||||
|
||||
bool LightObject::ApplyAnmResultB(const nw4r::g3d::LightAnmResult &res) {
|
||||
bool LightObject::ImportAnmG3D_Spec(const nw4r::g3d::LightAnmResult &res) {
|
||||
if ((res.flags & nw4r::g3d::LightAnmResult::FLAG_SPECULAR_ENABLE) != 0) {
|
||||
ApplyAnmResultInner(res);
|
||||
ImportAnmG3D(res);
|
||||
field_0x3D = 1;
|
||||
mWhite = res.specColor;
|
||||
SetPosAt(res.pos, res.aim);
|
||||
|
||||
@@ -42,7 +42,7 @@ bool LightTexture::sUseDebug;
|
||||
|
||||
u16 LightTexture::sTextureSize = 0x20;
|
||||
|
||||
static s8 lbl_80574F3A = 0xFE;
|
||||
s8 LightTexture::sScaleExp = 0xFE;
|
||||
|
||||
template <>
|
||||
const char *IBinary<LightTexture>::GetBinaryType() {
|
||||
@@ -53,18 +53,25 @@ template <>
|
||||
int IBinary<LightTexture>::GetVersion() {
|
||||
return 3;
|
||||
}
|
||||
} // namespace EGG
|
||||
|
||||
void LightTexture::fn_804AB270() {
|
||||
namespace {
|
||||
|
||||
static const GXTevColorArg TEV_MAIN_COLOR[3] = {GX_CC_C0, GX_CC_C1, GX_CC_C2};
|
||||
static const GXTevKColorSel TEV_SUB_COLOR[3] = {GX_TEV_KCSEL_K0, GX_TEV_KCSEL_K1, GX_TEV_KCSEL_K2};
|
||||
static const GXIndTexMtxID TEV_MTX_ID[3] = {GX_ITM_0, GX_ITM_1, GX_ITM_2};
|
||||
|
||||
void setMaterialCommon() {
|
||||
GXSetNumChans(1);
|
||||
GXSetCullMode(GX_CULL_BACK);
|
||||
GXSetChanCtrl(GX_COLOR0A0, false, GX_SRC_VTX, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_SIGN, GX_AF_NONE);
|
||||
GXSetChanCtrl(GX_COLOR1A1, false, GX_SRC_VTX, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, GX_AF_NONE);
|
||||
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
|
||||
GXSetZMode(false, GX_LEQUAL, false);
|
||||
EGG::DrawGX::SetBlendMode(DrawGX::BLEND_14);
|
||||
EGG::DrawGX::SetBlendMode(EGG::DrawGX::BLEND_14);
|
||||
}
|
||||
|
||||
void LightTexture::fn_804AB310(const GXColor &color) {
|
||||
void setMaterialAmbient(const GXColor &color) {
|
||||
GXSetNumTexGens(0);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, 0, 0x7d);
|
||||
GXSetNumIndStages(0);
|
||||
@@ -79,14 +86,9 @@ void LightTexture::fn_804AB310(const GXColor &color) {
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
EGG::DrawGX::SetBlendMode(DrawGX::BLEND_14);
|
||||
EGG::DrawGX::SetBlendMode(EGG::DrawGX::BLEND_14);
|
||||
}
|
||||
|
||||
static const GXTevColorArg sTevkColorArg[3] = {GX_CC_C0, GX_CC_C1, GX_CC_C2};
|
||||
static const GXTevKColorSel sTevkColorSel[3] = {GX_TEV_KCSEL_K0, GX_TEV_KCSEL_K1, GX_TEV_KCSEL_K2};
|
||||
static const GXIndTexMtxID sIndTexMtxId[3] = {GX_ITM_0, GX_ITM_1, GX_ITM_2};
|
||||
|
||||
void LightTexture::fn_804AB440() {
|
||||
void setMaterialNormalSphere() {
|
||||
GXSetNumTexGens(1);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, 0, 0x7d);
|
||||
GXSetNumIndStages(1);
|
||||
@@ -101,20 +103,20 @@ void LightTexture::fn_804AB440() {
|
||||
|
||||
GXSetTevSwapMode(id, GX_TEV_SWAP0, GX_TEV_SWAP0);
|
||||
GXSetTevOrder(id, GX_TEXCOORD_NULL, static_cast<GXTexMapID>(GX_TEXMAP1 + i), GX_COLOR_NULL);
|
||||
GXSetTevKColorSel(id, sTevkColorSel[i]);
|
||||
GXSetTevKColorSel(id, TEV_SUB_COLOR[i]);
|
||||
GXSetTevKAlphaSel(id, GX_TEV_KASEL_1);
|
||||
GXSetTevColorIn(id, GX_CC_KONST, sTevkColorArg[i], GX_CC_TEXC, tevColorArg);
|
||||
GXSetTevColorIn(id, GX_CC_KONST, TEV_MAIN_COLOR[i], GX_CC_TEXC, tevColorArg);
|
||||
GXSetTevColorOp(id, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(id, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST);
|
||||
GXSetTevAlphaOp(id, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetTevIndirect(
|
||||
id, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_STU, sIndTexMtxId[i], GX_ITW_0, GX_ITW_0, false, false, GX_ITBA_OFF
|
||||
id, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_STU, TEV_MTX_ID[i], GX_ITW_0, GX_ITW_0, false, false, GX_ITBA_OFF
|
||||
);
|
||||
}
|
||||
EGG::DrawGX::SetBlendMode(DrawGX::BLEND_2);
|
||||
EGG::DrawGX::SetBlendMode(EGG::DrawGX::BLEND_2);
|
||||
}
|
||||
|
||||
void LightTexture::fn_804AB600() {
|
||||
void setMaterialCrossOver() {
|
||||
GXSetNumTexGens(2);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x3c, 0, 0x7d);
|
||||
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, 0x1e, 0, 0x7d);
|
||||
@@ -128,17 +130,20 @@ void LightTexture::fn_804AB600() {
|
||||
GXSetTevOrder(
|
||||
id, static_cast<GXTexCoordID>(GX_TEXCOORD0 + i), static_cast<GXTexMapID>(GX_TEXMAP0 + i), GX_COLOR_NULL
|
||||
);
|
||||
GXSetTevKColorSel(id, sTevkColorSel[i]);
|
||||
GXSetTevKColorSel(id, TEV_SUB_COLOR[i]);
|
||||
GXSetTevKAlphaSel(id, GX_TEV_KASEL_1);
|
||||
GXSetTevColorIn(id, GX_CC_KONST, sTevkColorArg[i], GX_CC_TEXC, tevColorArg);
|
||||
GXSetTevColorIn(id, GX_CC_KONST, TEV_MAIN_COLOR[i], GX_CC_TEXC, tevColorArg);
|
||||
GXSetTevColorOp(id, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, 1, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(id, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_KONST);
|
||||
GXSetTevAlphaOp(id, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, true, GX_TEVPREV);
|
||||
GXSetTevDirect(id);
|
||||
}
|
||||
EGG::DrawGX::SetBlendMode(DrawGX::BLEND_2);
|
||||
EGG::DrawGX::SetBlendMode(EGG::DrawGX::BLEND_2);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
namespace EGG {
|
||||
|
||||
void LightTexture::initialize(u16 textureSize, Heap *pHeap) {
|
||||
static const int sCpuTexGradientOp[NUM_CPU_TEX] = {0, 0, 0, 1, 2, 3, 4, 0, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0};
|
||||
|
||||
@@ -174,19 +179,19 @@ void LightTexture::initialize(u16 textureSize, Heap *pHeap) {
|
||||
tex->fillGradient(sCpuTexGradientOp[i], 0x73, a + 1, b - 1, DrawGX::BLACK, DrawGX::WHITE, true, true);
|
||||
}
|
||||
if (sTextureSize == 0x100) {
|
||||
lbl_80574F3A = 1;
|
||||
sScaleExp = 1;
|
||||
} else if (sTextureSize == 0x80) {
|
||||
lbl_80574F3A = 0;
|
||||
sScaleExp = 0;
|
||||
} else if (sTextureSize == 0x40) {
|
||||
lbl_80574F3A = -1;
|
||||
sScaleExp = -1;
|
||||
} else if (sTextureSize == 0x20) {
|
||||
lbl_80574F3A = -2;
|
||||
sScaleExp = -2;
|
||||
} else if (sTextureSize == 0x10) {
|
||||
lbl_80574F3A = -3;
|
||||
sScaleExp = -3;
|
||||
} else if (sTextureSize == 0x8) {
|
||||
lbl_80574F3A = -4;
|
||||
sScaleExp = -4;
|
||||
} else if (sTextureSize == 0x4) {
|
||||
lbl_80574F3A = -5;
|
||||
sScaleExp = -5;
|
||||
}
|
||||
|
||||
spNormalEnvironment = new (pHeap) CpuTexture(sTextureSize, sTextureSize, GX_TF_RGBA8);
|
||||
@@ -274,7 +279,7 @@ void LightTexture::loadTextureFromResTimg(int index, EGG::ResTIMG *img) {
|
||||
}
|
||||
|
||||
void LightTexture::initDrawSetting(u16 u1, u16 u2, u16 u3, u16 u4) {
|
||||
static const u8 ALIGN_DECL(32) sVtxBuf[] = {0, 0, 0, 1, 1, 1, 1, 0};
|
||||
static const u8 ALIGN_DECL(32) vtx[] = {0, 0, 0, 1, 1, 1, 1, 0};
|
||||
|
||||
nw4r::math::MTX44 mtx;
|
||||
C_MTXOrtho(mtx, u4, 0.0f, 0.0f, u3, 0.0f, 1.0f);
|
||||
@@ -285,7 +290,7 @@ void LightTexture::initDrawSetting(u16 u1, u16 u2, u16 u3, u16 u4) {
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
||||
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
|
||||
GXSetArray(GX_VA_POS, sVtxBuf, 2);
|
||||
GXSetArray(GX_VA_POS, vtx, 2);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGB, GX_RGB565, 0);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_F32, 0);
|
||||
|
||||
@@ -298,7 +303,7 @@ void LightTexture::initDrawSetting(u16 u1, u16 u2, u16 u3, u16 u4) {
|
||||
sDrawPosX = u1;
|
||||
sDrawPosY = u2;
|
||||
|
||||
fn_804AB270();
|
||||
setMaterialCommon();
|
||||
GXSetCurrentMtx(0);
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
|
||||
}
|
||||
@@ -352,7 +357,7 @@ void LightTexture::fn_804AC0E0(int i, const GXColor &color, bool b) {
|
||||
c = DrawGX::BLACK;
|
||||
}
|
||||
|
||||
fn_804AB310(c);
|
||||
setMaterialAmbient(c);
|
||||
|
||||
f32 origin = 0.0f;
|
||||
GXBegin(GX_QUADS, GX_VTXFMT0, 4);
|
||||
@@ -374,13 +379,13 @@ void LightTexture::fn_804AC0E0(int i, const GXColor &color, bool b) {
|
||||
case 0:
|
||||
case 2:
|
||||
spNormalEnvironment->load(GX_TEXMAP0);
|
||||
fn_804AB440();
|
||||
setMaterialNormalSphere();
|
||||
field_0x9D = 3;
|
||||
field_0x9E = 1;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
fn_804AB600();
|
||||
setMaterialCrossOver();
|
||||
field_0x9D = 2;
|
||||
field_0x9E = 0;
|
||||
break;
|
||||
@@ -568,7 +573,7 @@ void LightTexture::addLight(const EGG::LightObject &obj) {
|
||||
mtx[1][1] = 0.0f;
|
||||
mtx[1][2] = 0.0f;
|
||||
|
||||
GXSetIndTexMtx(sIndTexMtxId[remainder], mtx, -1);
|
||||
GXSetIndTexMtx(TEV_MTX_ID[remainder], mtx, -1);
|
||||
}
|
||||
|
||||
if (remainder == field_0x9D - 1) {
|
||||
|
||||
+12
-10
@@ -15,7 +15,7 @@ namespace EGG {
|
||||
StateEfb::Buffer StateEfb::spBufferSet[BUFFER_MAX];
|
||||
f32 StateEfb::sWorkSpaceV[6];
|
||||
f32 StateEfb::sWorkSpaceHideV[6];
|
||||
f32 StateEfb::sUnkBuffer[6];
|
||||
f32 StateEfb::sShiftViewPort[6];
|
||||
|
||||
u32 StateEfb::sFlag = 4;
|
||||
s32 StateEfb::sWorkBuffer = -1;
|
||||
@@ -204,18 +204,20 @@ void StateEfb::popWorkBuffer(bool b, u32 userData) {
|
||||
|
||||
f32 *StateEfb::fn_804B4550() {
|
||||
const Screen::DataEfb &efb = GlobalDrawState::getScreen().GetDataEfb();
|
||||
sUnkBuffer[0] = sWorkSpaceV[0];
|
||||
sUnkBuffer[1] = sWorkSpaceV[1];
|
||||
sUnkBuffer[2] = efb.vp.x2;
|
||||
sUnkBuffer[3] = efb.vp.y2;
|
||||
sUnkBuffer[4] = efb.vp.z1;
|
||||
sUnkBuffer[5] = efb.vp.z2;
|
||||
StateGX::GXSetViewport_(sUnkBuffer[0], sUnkBuffer[1], sUnkBuffer[2], sUnkBuffer[3], sUnkBuffer[4], sUnkBuffer[5]);
|
||||
sShiftViewPort[0] = sWorkSpaceV[0];
|
||||
sShiftViewPort[1] = sWorkSpaceV[1];
|
||||
sShiftViewPort[2] = efb.vp.x2;
|
||||
sShiftViewPort[3] = efb.vp.y2;
|
||||
sShiftViewPort[4] = efb.vp.z1;
|
||||
sShiftViewPort[5] = efb.vp.z2;
|
||||
StateGX::GXSetViewport_(
|
||||
sShiftViewPort[0], sShiftViewPort[1], sShiftViewPort[2], sShiftViewPort[3], sShiftViewPort[4], sShiftViewPort[5]
|
||||
);
|
||||
u32 f[4];
|
||||
StateGX::CalculateScreenScissor(sUnkBuffer, f);
|
||||
StateGX::GetScissorSafeParam(sShiftViewPort, f);
|
||||
StateGX::GXSetScissor_(f[0], f[1], f[2], f[3]);
|
||||
StateGX::GXSetScissorBoxOffset_(0, 0);
|
||||
return sUnkBuffer;
|
||||
return sShiftViewPort;
|
||||
}
|
||||
|
||||
bool StateEfb::isEnableDirtyBufferMode() {
|
||||
|
||||
+18
-19
@@ -21,10 +21,11 @@ namespace {
|
||||
static GXTexRegion *texRegionCallback(const GXTexObj *pObj, GXTexMapID map) {
|
||||
return &EGG::StateGX::s_tmem_layout.mRegions[map % EGG::StateGX::s_tmem_layout.numRegions];
|
||||
}
|
||||
static GXTexObj ALIGN_DECL(32) DUMMY_TEX_OBJ;
|
||||
|
||||
static const GXColor white = {0xFF, 0xFF, 0xFF, 0xFF};
|
||||
static const GXColor WHITE = {0xFF, 0xFF, 0xFF, 0xFF};
|
||||
|
||||
static const f32 identity[3][4] = {
|
||||
static const f32 IDENTITY[3][4] = {
|
||||
{1.0f, 0.0f, 0.0f, 0.0f},
|
||||
{0.0f, 1.0f, 0.0f, 0.0f},
|
||||
{0.0f, 0.0f, 1.0f, 0.0f},
|
||||
@@ -33,8 +34,6 @@ static const f32 identity[3][4] = {
|
||||
} // namespace
|
||||
|
||||
namespace EGG {
|
||||
|
||||
GXTexObj ALIGN_DECL(32) StateGX::sDefaultTexObj;
|
||||
StateGX::MemLayout StateGX::s_tmem_layout;
|
||||
StateGX::CacheGX StateGX::s_cacheGX;
|
||||
|
||||
@@ -56,10 +55,10 @@ void StateGX::initialize(u16 width, u16 height, GXColor color, GXPixelFmt pixelF
|
||||
BaseSystem::getDisplay()->setClearColor(color);
|
||||
}
|
||||
|
||||
static u8 sDefaultTexObjData[16] = {0};
|
||||
static u8 NullTexData[16] = {0};
|
||||
|
||||
GXInitTexObj(&sDefaultTexObj, sDefaultTexObjData, 4, 4, GX_TF_IA8, GX_CLAMP, GX_CLAMP, 0);
|
||||
GXInitTexObjLOD(&sDefaultTexObj, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1);
|
||||
GXInitTexObj(&DUMMY_TEX_OBJ, NullTexData, 4, 4, GX_TF_IA8, GX_CLAMP, GX_CLAMP, 0);
|
||||
GXInitTexObjLOD(&DUMMY_TEX_OBJ, GX_LINEAR, GX_LINEAR, 0.0f, 0.0f, 0.0f, 0, 0, GX_ANISO_1);
|
||||
invalidateTexAllGX();
|
||||
frameInit();
|
||||
setTMemLayout(nw4r::g3d::tmem::TMEM_LAYOUT_1);
|
||||
@@ -137,12 +136,12 @@ void StateGX::resetVtx() {
|
||||
|
||||
void StateGX::resetColorChannel() {
|
||||
GXSetNumChans(1);
|
||||
GXSetChanAmbColor(GX_COLOR0A0, white);
|
||||
GXSetChanAmbColor(GX_COLOR1A1, white);
|
||||
GXSetChanAmbColor(GX_COLOR0A0, WHITE);
|
||||
GXSetChanAmbColor(GX_COLOR1A1, WHITE);
|
||||
|
||||
GXSetChanMatColor(GX_COLOR0A0, white);
|
||||
GXSetChanMatColor(GX_COLOR0A0, WHITE);
|
||||
|
||||
GXSetChanMatColor(GX_COLOR1A1, white);
|
||||
GXSetChanMatColor(GX_COLOR1A1, WHITE);
|
||||
GXSetCullMode(GX_CULL_BACK);
|
||||
GXSetChanCtrl(GX_COLOR0A0, false, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
|
||||
GXSetChanCtrl(GX_COLOR1A1, false, GX_SRC_REG, GX_SRC_REG, GX_LIGHT_NULL, GX_DF_CLAMP, GX_AF_NONE);
|
||||
@@ -150,12 +149,12 @@ void StateGX::resetColorChannel() {
|
||||
|
||||
void StateGX::resetIndirect() {
|
||||
GXSetNumIndStages(0);
|
||||
static const f32 ind[2][3] = {
|
||||
static const f32 offsetMtx[2][3] = {
|
||||
{0.5f, 0.0f, 0.0f},
|
||||
{0.0f, 0.5f, 0.0f},
|
||||
};
|
||||
for (u32 i = 0; i < 3; i++) {
|
||||
GXSetIndTexMtx(static_cast<GXIndTexMtxID>(i + GX_ITM_0), ind, 1);
|
||||
GXSetIndTexMtx(static_cast<GXIndTexMtxID>(i + GX_ITM_0), offsetMtx, 1);
|
||||
}
|
||||
for (u32 i = 0; i < 4; i++) {
|
||||
GXSetIndTexCoordScale(static_cast<GXIndTexStageID>(i + GX_INDTEXSTAGE0), GX_ITS_1, GX_ITS_1);
|
||||
@@ -164,7 +163,7 @@ void StateGX::resetIndirect() {
|
||||
|
||||
void StateGX::resetTexture() {
|
||||
for (u32 i = 0; i < s_tmem_layout.numRegions; i++) {
|
||||
GXLoadTexObj(&sDefaultTexObj, static_cast<GXTexMapID>(i + GX_TEXMAP0));
|
||||
GXLoadTexObj(&DUMMY_TEX_OBJ, static_cast<GXTexMapID>(i + GX_TEXMAP0));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -172,7 +171,7 @@ void StateGX::resetTexGen() {
|
||||
GXSetNumTexGens(1);
|
||||
|
||||
for (u32 i = 0; i < 10; i++) {
|
||||
GXLoadTexMtxImm(identity, i * 3 + 0x1E, GX_MTX3x4);
|
||||
GXLoadTexMtxImm(IDENTITY, i * 3 + 0x1E, GX_MTX3x4);
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < GX_MAX_TEXCOORD; i++) {
|
||||
@@ -198,12 +197,12 @@ void StateGX::resetTev() {
|
||||
|
||||
for (u32 i = 0; i < GX_MAX_KCOLOR; i++) {
|
||||
GXTevKColorID id = static_cast<GXTevKColorID>(i);
|
||||
GXSetTevKColor(id, white);
|
||||
GXSetTevKColor(id, WHITE);
|
||||
}
|
||||
|
||||
for (u32 i = 0; i < GX_MAX_TEVREG; i++) {
|
||||
GXTevRegID id = static_cast<GXTevRegID>(i);
|
||||
GXSetTevColor(id, white);
|
||||
GXSetTevColor(id, WHITE);
|
||||
}
|
||||
|
||||
GXSetTevSwapModeTable(GX_TEV_SWAP0, GX_CH_RED, GX_CH_GREEN, GX_CH_BLUE, GX_CH_ALPHA);
|
||||
@@ -217,7 +216,7 @@ void StateGX::resetPE() {
|
||||
GXSetAlphaCompare(GX_ALWAYS, 0, GX_AOP_AND, GX_ALWAYS, 0);
|
||||
GXSetZTexture(0, GX_TF_Z24X8, 0);
|
||||
GXSetZMode(true, GX_LEQUAL, true);
|
||||
GXSetFog(GX_FOG_NONE, white, 0.0f, 1.0f, 0.1f, 1.0f);
|
||||
GXSetFog(GX_FOG_NONE, WHITE, 0.0f, 1.0f, 0.1f, 1.0f);
|
||||
GXSetFogRangeAdj(false, 0, nullptr);
|
||||
GXSetZCompLoc(true);
|
||||
GXSetDstAlpha(false, 0);
|
||||
@@ -288,7 +287,7 @@ StateGX::CacheGX &StateGX::GXSetDstAlpha_(bool enable, u8 alpha) {
|
||||
return s_cacheGX;
|
||||
}
|
||||
|
||||
void StateGX::CalculateScreenScissor(const f32 src[4], u32 dst[4]) {
|
||||
void StateGX::GetScissorSafeParam(const f32 src[4], u32 dst[4]) {
|
||||
dst[0] = src[0] >= 0.0f ? src[0] : 0.0f;
|
||||
dst[1] = src[1] >= 0.0f ? src[1] : 0.0f;
|
||||
dst[2] = dst[0] + src[2] > 640.0f ? 640 - dst[0] : src[2];
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "common.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/d_gfx.h"
|
||||
#include "d/d_light_env.h"
|
||||
#include "d/d_sc_game.h"
|
||||
#include "d/t/d_t_siren.h"
|
||||
@@ -25,7 +26,7 @@
|
||||
namespace d3d {
|
||||
|
||||
static EGG::Screen sSomeScreen;
|
||||
static SomeList sSomeList;
|
||||
static SomeList l_list;
|
||||
|
||||
AnmMdlWrapper::AnmMdlWrapper() : mpSoundSource(nullptr), mpSoundData(nullptr) {}
|
||||
|
||||
@@ -210,22 +211,19 @@ bool AnmMdlWrapper2::setAnm(const char *anmFile, m3d::playMode_e mode, f32 frame
|
||||
return false;
|
||||
}
|
||||
|
||||
extern "C" f32 lbl_80575150;
|
||||
extern "C" f32 lbl_8057514C;
|
||||
extern "C" f32 lbl_80576A0C;
|
||||
|
||||
void insertNode(SomeListNode *node, f32 a, f32 b) {
|
||||
node->field_0x04 = ((a * lbl_80575150) - 0.5f) + lbl_8057514C;
|
||||
node->field_0x06 = (lbl_80575150 - 0.5f) - b;
|
||||
sSomeList.append(node);
|
||||
node->field_0x04 =
|
||||
((a * dGfx_c::getCurrentScreenTo4x3WidthScaleF()) - 0.5f) + dGfx_c::getCurrentScreenWidthLimitF();
|
||||
node->field_0x06 = (dGfx_c::getCurrentScreenHeightLimitF() - 0.5f) - b;
|
||||
l_list.append(node);
|
||||
}
|
||||
|
||||
void clearList() {
|
||||
// TODO
|
||||
for (SomeList::Iterator it = sSomeList.GetBeginIter(); it != sSomeList.GetEndIter(); ++it) {
|
||||
for (SomeList::Iterator it = l_list.GetBeginIter(); it != l_list.GetEndIter(); ++it) {
|
||||
SomeListNode *nd = &*it;
|
||||
SomeList::Iterator itCopy = sSomeList.GetPosition(nd);
|
||||
sSomeList.remove(nd);
|
||||
SomeList::Iterator itCopy = l_list.GetPosition(nd);
|
||||
l_list.remove(nd);
|
||||
it = itCopy;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user