diff options
| author | Luke Street <luke@street.dev> | 2026-03-01 15:35:36 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-01 14:35:36 -0800 |
| commit | 9649319ec4926457ef85e6094f8207474c977c2d (patch) | |
| tree | 1c5cd4c7cc4c1aee03f28921213da47f2775444d /src/JSystem/J2DGraph/J2DPicture.cpp | |
| parent | 6e149819e13b1f70ecbf8a4c66b030c17ffed2bb (diff) | |
Reorganize library code into `libs/` (#3119)
* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN}
* Update configure.py and project.py for new libs structure
* Refactor `#include <dolphin/x.h>` -> `<x.h>`
* Remove `__REVOLUTION_SDK__` forwards from dolphin
* Fix dolphin/ references in revolution
* Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__`
* Always build TRK against dolphin headers
* Resolve revolution SDK header resolution issues
Diffstat (limited to 'src/JSystem/J2DGraph/J2DPicture.cpp')
| -rw-r--r-- | src/JSystem/J2DGraph/J2DPicture.cpp | 1021 |
1 files changed, 0 insertions, 1021 deletions
diff --git a/src/JSystem/J2DGraph/J2DPicture.cpp b/src/JSystem/J2DGraph/J2DPicture.cpp deleted file mode 100644 index 65ce621e40..0000000000 --- a/src/JSystem/J2DGraph/J2DPicture.cpp +++ /dev/null @@ -1,1021 +0,0 @@ -#include "JSystem/JSystem.h" // IWYU pragma: keep - -#include "JSystem/J2DGraph/J2DPicture.h" -#include "JSystem/J2DGraph/J2DScreen.h" -#include "JSystem/J2DGraph/J2DMaterial.h" -#include "JSystem/JUtility/JUTPalette.h" -#include "JSystem/JUtility/JUTTexture.h" -#include "JSystem/JUtility/JUTResource.h" -#include "JSystem/JSupport/JSURandomInputStream.h" -#include <dolphin/gx.h> - -J2DPicture::J2DPicture() : mPalette(NULL) { - for (u32 i = 0; i < 2; i++) { - mTexture[i] = NULL; - } - - field_0x109 = 0; - mTextureNum = 0; - initinfo(); -} - - -J2DPicture::J2DPicture(J2DPane* p_pane, JSURandomInputStream* p_stream, JKRArchive* p_archive) - : mPalette(NULL) { - private_readStream(p_pane, p_stream, p_archive); -} - -J2DPicture::J2DPicture(J2DPane* p_pane, JSURandomInputStream* p_stream, J2DMaterial* p_material) - : mPalette(NULL) { - int position = p_stream->getPosition(); - - J2DPicHeader header; - p_stream->read(&header, sizeof(header)); - mKind = 'PIC1'; - - int position2 = p_stream->getPosition(); - - J2DPaneHeader panHeader; - p_stream->peek(&panHeader, sizeof(panHeader)); - makePaneExStream(p_pane, p_stream); - p_stream->seek(position2 + panHeader.mSize, JSUStreamSeekFrom_SET); - - J2DScrnBlockPictureParameter picInfo; - p_stream->read(&picInfo, sizeof(picInfo)); - u16 matNum = picInfo.field_0x4; - - for (int i = 0; i < 4; i++) { - field_0x10a[i] = picInfo.field_0x10[i]; - mCornerColor[i] = picInfo.mCornerColor[i]; - } - - p_stream->seek(position + header.mSize, JSUStreamSeekFrom_SET); - - J2DMaterial* material = NULL; - if (matNum != 0xFFFF) { - material = &p_material[matNum]; - } - - mAlpha = 255; - if (material != NULL) { - mAlpha = material->getColorBlock()->getMatColor(0)->a; - } - - mBlack = JUtility::TColor(0); - mWhite = JUtility::TColor(0xFFFFFFFF); - mTextureNum = 0; - - if (material != NULL && material->getTevBlock() != NULL) { - u8 texgenNum = material->getTexGenBlock()->getTexGenNum(); - u8 stageNum = u8(material->getTevBlock()->getTevStageNum()); - - if ((texgenNum == 1 && stageNum != 1) || (texgenNum != 1 && (int)stageNum != texgenNum + 1)) - { - J2DGXColorS10 color0 = *material->getTevBlock()->getTevColor(0); - J2DGXColorS10 color1 = *material->getTevBlock()->getTevColor(1); - - mBlack = JUtility::TColor(((u8)color0.r << 0x18) | ((u8)color0.g << 0x10) | - ((u8)color0.b << 8) | (u8)color0.a); - mWhite = JUtility::TColor(((u8)color1.r << 0x18) | ((u8)color1.g << 0x10) | - ((u8)color1.b << 8) | (u8)color1.a); - } - - mTextureNum = texgenNum > 2 ? 2 : texgenNum; - } - - field_0x109 = 0; - - for (u32 i = 0; i < 2; i++) { - mTexture[i] = NULL; - - if (material != NULL && material->getTevBlock() != NULL) { - JUTTexture* tex = material->getTevBlock()->getTexture(i); - - if (tex != NULL) { - mTexture[i] = tex; - field_0x109 |= (1 << i); - } - } - } - - if (material != NULL && material->getTevBlock() != NULL) { - material->getTevBlock()->setUndeleteFlag(0xF0); - } - - mPalette = NULL; - - JUtility::TColor color(0xFFFFFFFF); - JUtility::TColor alpha(0xFFFFFFFF); - if (material != NULL && material->getTevBlock() != NULL) { - color = *material->getTevBlock()->getTevKColor(3); - alpha = *material->getTevBlock()->getTevKColor(1); - } - - setBlendColorRatio(color.a, color.b); - setBlendAlphaRatio(alpha.a, alpha.b); -} - -J2DPicture::J2DPicture(ResTIMG const* p_timg) { - for (u32 i = 0; i < 2; i++) { - mTexture[i] = NULL; - } - - field_0x109 = 0; - mTextureNum = 0; - - if (p_timg != NULL) { - append(p_timg, 1.0f); - } - mPalette = NULL; - initinfo(); -} - - -J2DPicture::J2DPicture(u64 tag, JGeometry::TBox2<f32> const& bounds, ResTIMG const* p_timg, - ResTLUT const* p_tlut) - : J2DPane(tag, bounds), mPalette(NULL) { - for (u32 i = 0; i < 2; i++) { - mTexture[i] = NULL; - } - - field_0x109 = 0; - mTextureNum = 0; - - private_initiate(p_timg, p_tlut); - initinfo(); -} - -void J2DPicture::private_readStream(J2DPane* parent, JSURandomInputStream* stream, - JKRArchive* archive) { - J2DScrnBlockHeader header; - int headerPosition = stream->getPosition(); - - stream->read(&header, sizeof(J2DScrnBlockHeader)); - mKind = header.mTag; - makePaneStream(parent, stream); - - JUTResReference ref; - - ResTIMG* img; - ResTLUT* lut; - u8 local_172 = 0; - u8 local_173 = 0; - u8 r29 = stream->readU8(); - - img = (ResTIMG*)getPointer(stream, 'TIMG', archive); - lut = (ResTLUT*)getPointer(stream, 'TLUT', archive); - - local_172 = stream->read8b(); - - r29 -= 3; - if (r29 != 0) { - local_173 = stream->read8b(); - r29--; - } - - if (r29 != 0) { - u8 local_174 = stream->read8b(); - r29--; - } - - mBlack = 0; - mWhite = 0xFFFFFFFF; - - if (r29 != 0) { - mBlack = stream->readU32(); - r29--; - } - - if (r29 != 0) { - mWhite = stream->readU32(); - r29--; - } - - setCornerColor(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF); - for (int i = 0; r29 != 0 && i < 4; i++) { - mCornerColor[i] = stream->readU32(); - r29--; - } - - stream->seek(headerPosition + header.mSize, JSUStreamSeekFrom_SET); - - for (u32 i = 0; i < 2; i++) { - mTexture[i] = NULL; - } - - mTextureNum = 0; - field_0x109 = 1; - - if (img != NULL) { - mTexture[0] = new JUTTexture(img, 0); - mTextureNum++; - } - - if (lut != NULL) { - mPalette = new JUTPalette(GX_TLUT0, lut); - mTexture[0]->attachPalette(mPalette); - } - - setTexCoord(mTexture[0], J2DBinding(local_172), J2DMirror(local_173 & 3), bool(local_173 & 4)); - setBlendRatio(1.0f, 1.0f); -} - -void J2DPicture::initiate(const ResTIMG* img, const ResTLUT* lut) { - private_initiate(img, lut); - if (mTexture[0] == NULL) { - return; - } - - place(JGeometry::TBox2<f32>(0.0f, 0.0f, mTexture[0]->getWidth(), mTexture[0]->getHeight())); -} - -void J2DPicture::private_initiate(const ResTIMG* timg, const ResTLUT* tlut) { - if (mTextureNum != 0) { - return; - } - - if (timg != NULL) { - if (mTexture[0] == NULL) { - mTexture[0] = new JUTTexture(timg, 0); - if (mTexture[0] != NULL) { - mTextureNum++; - field_0x109 = (field_0x109 & 2) | 1; - } - } else { - mTexture[0]->storeTIMG(timg, (u8)0); - mTextureNum++; - field_0x109 = (field_0x109 & 2) | 1; - } - } - - mPalette = NULL; - if (tlut && mPalette == NULL) { - mPalette = new JUTPalette(GX_TLUT0, const_cast<ResTLUT*>(tlut)); - if (mTexture[0] != NULL) { - mTexture[0]->attachPalette(mPalette); - } - } -} - -void J2DPicture::initinfo() { - mKind = 'PIC1'; - setTexCoord(NULL, BIND15, MIRROR0, false); - setBlendRatio(1.0f, 1.0f); - - mBlack = 0; - mWhite = -1; - setCornerColor(-1, -1, -1, -1); -} - - -J2DPicture::~J2DPicture() { - for (int i = 0; i < 2; i++) { - if ((int)(field_0x109 & 1 << i) != 0) { - delete mTexture[i]; - } - } - - delete mPalette; -} - -bool J2DPicture::prepareTexture(u8 param_0) { - for (u8 i = 0; i < param_0; i++) { - if (i >= 2) { - return 0; - } - - if (mTexture[i] == NULL) { - mTexture[i] = new JUTTexture(); - - if (mTexture[i] == NULL) { - return 0; - } - field_0x109 |= (1 << i); - } - } - return 1; -} - -bool J2DPicture::insert(ResTIMG const* img, JUTPalette* palette, u8 param_2, f32 param_3) { - if (img == NULL || mTextureNum >= 2 || param_2 >= 2 || param_2 > mTextureNum) { - return false; - } - - u8 var_r26 = 0; - if (img->indexTexture != 0 && palette == NULL) { - var_r26 = getUsableTlut(mTextureNum); - } - - JUTTexture* var_r31; - if (mTexture[mTextureNum] == NULL) { - var_r31 = new JUTTexture(img, var_r26); - - if (palette != NULL) { - var_r31->storeTIMG(img, palette); - } - - for (u8 i = 1; i > param_2; i--) { - mTexture[i] = mTexture[i - 1]; - field_0x11c[i] = field_0x11c[i - 1]; - field_0x124[i] = field_0x124[i - 1]; - } - - field_0x109 = - (field_0x109 & ((1 << param_2) - 1)) | ((field_0x109 & ~((1 << param_2) - 1)) * 2); - field_0x109 |= (1 << param_2); - } else { - var_r31 = mTexture[mTextureNum]; - if (palette == NULL) { - var_r31->storeTIMG(img, var_r26); - } else { - var_r31->storeTIMG(img, palette); - } - - bool sp8[2]; - for (u8 i = 0; i < 2; i++) { - sp8[i] = (field_0x109 & (1 << i)) != 0; - } - - for (u8 i = mTextureNum; i > param_2; i--) { - mTexture[i] = mTexture[i - 1]; - sp8[i] = sp8[i - 1]; - field_0x11c[i] = field_0x11c[i - 1]; - field_0x124[i] = field_0x124[i - 1]; - } - - field_0x109 = 0; - - for (u8 i = 0; i < 2; i++) { - if (sp8[i] != 0) { - field_0x109 |= (1 << i); - } - } - - field_0x109 |= (1 << param_2); - } - - mTexture[param_2] = var_r31; - field_0x11c[param_2] = param_3; - field_0x124[param_2] = param_3; - - if (mTextureNum == 0 && mTexture[0] != NULL) { - place(JGeometry::TBox2<f32>(0.0f, 0.0f, mTexture[0]->getWidth(), mTexture[0]->getHeight())); - setTexCoord(NULL, BIND15, MIRROR0, false); - } - - mTextureNum++; - setBlendKonstColor(); - setBlendKonstAlpha(); - return true; -} - - -bool J2DPicture::insert(char const* resName, JUTPalette* palette, u8 param_2, f32 param_3) { - return insert((ResTIMG*)J2DScreen::getNameResource(resName), palette, param_2, param_3); -} - -bool J2DPicture::insert(JUTTexture* texture, u8 param_1, f32 param_2) { - if (texture == NULL || mTextureNum >= 2 || param_1 >= 2 || param_1 > mTextureNum) { - return false; - } - - if (mTexture[1] != NULL && field_0x109 & 2) { - delete mTexture[1]; - field_0x109 &= 1; - } - - for (u8 i = 1; i > param_1; i--) { - mTexture[i] = mTexture[i - 1]; - field_0x11c[i] = field_0x11c[i - 1]; - field_0x124[i] = field_0x124[i - 1]; - } - - field_0x109 = - (field_0x109 & ((1 << param_1) - 1)) | ((field_0x109 & ~((1 << param_1) - 1)) * 2); - mTexture[param_1] = texture; - field_0x109 &= ~(1 << param_1); - - field_0x11c[param_1] = param_2; - field_0x124[param_1] = param_2; - - if (mTextureNum == 0 && &mTexture[0] != NULL) { - place(JGeometry::TBox2<f32>(0.0f, 0.0f, mTexture[0]->getWidth(), mTexture[0]->getHeight())); - setTexCoord(NULL, BIND15, MIRROR0, false); - } - - mTextureNum++; - setBlendKonstColor(); - setBlendKonstAlpha(); - return true; -} - - -bool J2DPicture::remove(u8 param_0) { - if (mTextureNum <= param_0 || mTextureNum == 1) { - return false; - } - - if (field_0x109 & (1 << param_0)) { - delete mTexture[param_0]; - } - - for (u8 i = param_0; i < mTextureNum - 1; i++) { - mTexture[i] = mTexture[i + 1]; - field_0x11c[i] = field_0x11c[i + 1]; - field_0x124[i] = field_0x124[i + 1]; - } - - mTexture[mTextureNum - 1] = NULL; - field_0x109 = - (field_0x109 & ((1 << param_0) - 1)) | ((field_0x109 & ~((1 << (param_0 + 1)) - 1)) >> 1); - - mTextureNum--; - setBlendKonstColor(); - setBlendKonstAlpha(); - return true; -} - -bool J2DPicture::remove(JUTTexture* param_0) { - u8 i = 0; - for (; i < mTextureNum; i++) { - if (mTexture[i] == param_0) { - break; - } - } - return remove(i); -} - -const ResTIMG* J2DPicture::changeTexture(ResTIMG const* img, u8 texIndex) { - if (texIndex > mTextureNum || 2 <= texIndex || img == NULL) { - return NULL; - } - - const ResTIMG* result; - if (texIndex < mTextureNum) { - result = getTexture(texIndex)->getTexInfo(); - - u8 var_r30 = 0; - if (img->indexTexture != 0) { - var_r30 = getUsableTlut(texIndex); - } - getTexture(texIndex)->storeTIMG(img, var_r30); - return result; - } - - append(img, 1.0f); - return NULL; -} - - -const ResTIMG* J2DPicture::changeTexture(char const* resName, u8 param_1) { - return changeTexture((ResTIMG*)J2DScreen::getNameResource(resName), param_1); -} - -static bool dummy_weak_order(J2DPicture* picture, JUTTexture* tex) { - return picture->append(tex, 1.0f); -} - -const ResTIMG* J2DPicture::changeTexture(ResTIMG const* img, u8 texIndex, JUTPalette* palette) { - if (texIndex > mTextureNum || 2 <= texIndex || img == NULL) { - return NULL; - } - - const ResTIMG* result; - if (texIndex < mTextureNum) { - result = getTexture(texIndex)->getTexInfo(); - - GXTlut var_r30 = GX_TLUT0; - if (img->indexTexture != 0) { - u8 tlut = getUsableTlut(texIndex); - var_r30 = getTlutID(img, tlut); - } - getTexture(texIndex)->storeTIMG(img, palette, var_r30); - return result; - } - - append(img, palette, 1.0f); - return NULL; -} - - -const ResTIMG* J2DPicture::changeTexture(char const* param_0, u8 param_1, JUTPalette* param_2) { - return changeTexture((ResTIMG*)J2DScreen::getNameResource(param_0), param_1, param_2); -} - -void J2DPicture::drawSelf(f32 param_0, f32 param_1) { - Mtx tmp; - MTXIdentity(tmp); - - drawSelf(param_0, param_1, &tmp); -} - -void J2DPicture::drawSelf(f32 param_0, f32 param_1, Mtx* param_2) { - if (mTexture[0] != NULL && mTextureNum != 0) { - drawFullSet(mGlobalBounds.i.x + param_0, mGlobalBounds.i.y + param_1, - getWidth(), getHeight(), param_2); - } -} - -void J2DPicture::drawFullSet(f32 param_0, f32 param_1, f32 param_2, f32 param_3, Mtx* param_4) { - if (mTexture[0] != NULL && mTextureNum != 0) { - drawTexCoord(mBounds.i.x, mBounds.i.y, param_2, param_3, field_0x10a[0].x, field_0x10a[0].y, - field_0x10a[1].x, field_0x10a[1].y, field_0x10a[2].x, field_0x10a[2].y, - field_0x10a[3].x, field_0x10a[3].y, param_4); - } -} - -void J2DPicture::draw(f32 x, f32 y, f32 width, f32 height, bool mirrorX, bool mirrorY, - bool rotate90) { - if (isVisible() && mTextureNum != 0 && mTexture[0] != NULL) { - f32 x2 = x + width; - f32 y2 = y + height; - for (u8 i = 0; i < mTextureNum; i++) { - load(i); - } - - GXSetNumTexGens(mTextureNum); - mColorAlpha = mAlpha; - JUtility::TColor color[4]; - getNewColor(color); - - setTevMode(); - makeMatrix(x, y, 0.0f, 0.0f); - GXLoadPosMtxImm(mPositionMtx, GX_PNMTX0); - GXSetCurrentMtx(GX_PNMTX0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); - GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - - JGeometry::TVec2<s16> coords[4]; - setTexCoord(coords, mTexture[0], BIND15, (J2DMirror)((mirrorX << 1) | mirrorY), rotate90); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_S16, 8); - - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3f32(0.0f, 0.0f, 0.0f); - GXColor1u32(color[0]); - GXTexCoord2s16(coords[0].x, coords[0].y); - - GXPosition3f32(width, 0.0f, 0.0f); - GXColor1u32(color[1]); - GXTexCoord2s16(coords[1].x, coords[1].y); - - GXPosition3f32(width, height, 0.0f); - GXColor1u32(color[3]); - GXTexCoord2s16(coords[3].x, coords[3].y); - - GXPosition3f32(0.0f, height, 0.0f); - GXColor1u32(color[2]); - GXTexCoord2s16(coords[2].x, coords[2].y); - GXEnd(); - - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_POS_XYZ, GX_U16, 15); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - - Mtx m; - MTXIdentity(m); - GXLoadPosMtxImm(m, GX_PNMTX0); - GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, - GX_AF_NONE); - GXSetVtxDesc(GX_VA_TEX0, GX_NONE); - } -} - - -void J2DPicture::drawOut(JGeometry::TBox2<f32> const& posBox, - JGeometry::TBox2<f32> const& texRect) { - if (isVisible() && mTextureNum != 0 && mTexture[0] != NULL) { - for (u8 i = 0; i < mTextureNum; i++) { - load(i); - } - - GXSetNumTexGens(mTextureNum); - - f32 s0 = (posBox.i.x - texRect.i.x) / texRect.getWidth(); - f32 s1 = (posBox.f.x - texRect.f.x) / texRect.getWidth() + 1.0f; - - f32 t0 = (posBox.i.y - texRect.i.y) / texRect.getHeight(); - f32 t1 = (posBox.f.y - texRect.f.y) / texRect.getHeight() + 1.0f; - - mColorAlpha = mAlpha; - JUtility::TColor color[4]; - getNewColor(color); - setTevMode(); - - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); - GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_F32, 0); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0); - - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - GXPosition3f32((s16)posBox.i.x, (s16)posBox.i.y, 0.0f); - GXColor1u32(color[0]); - GXTexCoord2f32(s0, t0); - - GXPosition3f32((s16)posBox.f.x, (s16)posBox.i.y, 0.0f); - GXColor1u32(color[1]); - GXTexCoord2f32(s1, t0); - - GXPosition3f32((s16)posBox.f.x, (s16)posBox.f.y, 0.0f); - GXColor1u32(color[3]); - GXTexCoord2f32(s1, t1); - - GXPosition3f32((s16)posBox.i.x, (s16)posBox.f.y, 0.0f); - GXColor1u32(color[2]); - GXTexCoord2f32(s0, t1); - GXEnd(); - - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_S16, 0); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_TEX_ST, GX_U16, 15); - GXSetNumTexGens(0); - GXSetNumTevStages(1); - GXSetTevOp(GX_TEVSTAGE0, GX_PASSCLR); - GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, - GX_AF_NONE); - GXSetVtxDesc(GX_VA_TEX0, GX_NONE); - } -} - - -void J2DPicture::drawTexCoord(f32 param_0, f32 param_1, f32 param_2, f32 param_3, s16 param_4, - s16 param_5, s16 param_6, s16 param_7, s16 param_8, s16 param_9, - s16 param_10, s16 param_11, Mtx* param_12) { - if (mTextureNum != 0) { - for (u8 i = 0; i < mTextureNum; i++) { - load(i); - } - - f32 tmp1 = param_0 + param_2; - f32 tmp2 = param_1 + param_3; - - GXSetNumTexGens(mTextureNum); - - JUtility::TColor black[4]; - - Mtx outputMtx; - - getNewColor(black); - setTevMode(); - MTXConcat((MtxP)param_12, mGlobalMtx, outputMtx); - - GXLoadPosMtxImm(outputMtx, 0); - GXClearVtxDesc(); - GXSetVtxDesc(GX_VA_POS, GX_DIRECT); - GXSetVtxDesc(GX_VA_CLR0, GX_DIRECT); - GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_F32, 0); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBA4, 8); - GXBegin(GX_QUADS, GX_VTXFMT0, 4); - - GXPosition3f32(param_0, param_1, 0.0f); - GXColor1u32(black[0]); - GXTexCoord2s16(param_4, param_5); - - GXPosition3f32(tmp1, param_1, 0.0f); - GXColor1u32(black[1]); - GXTexCoord2s16(param_6, param_7); - - GXPosition3f32(tmp1, tmp2, 0.0f); - GXColor1u32(black[3]); - GXTexCoord2s16(param_10, param_11); - - GXPosition3f32(param_0, tmp2, 0.0f); - GXColor1u32(black[2]); - GXTexCoord2s16(param_8, param_9); - - GXEnd(); - - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_TEX0, GX_CLR_RGBA, GX_RGBX8, 0xf); - GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_CLR_RGBA, GX_RGBA4, 0); - } -} - - -void J2DPicture::setTevMode() { - u8 i; - for (i = 0; i < mTextureNum; i++) { - GXSetTevOrder(GXTevStageID(i), GXTexCoordID(i), GXTexMapID(i), GX_COLOR_NULL); - } - - GXSetTevColor(GX_TEVREG2, JUtility::TColor(0xFFFFFFFF)); - GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_TEXC, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO); - - if (mTexture[0] == NULL) { - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); - } else if (mTexture[0]->getTransparency()) { - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_TEXA, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); - } else { - GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_A2, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO); - } - - GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV); - GXSetTevKColor(GX_KCOLOR0, mBlendKonstColor); - GXSetTevKColor(GX_KCOLOR2, mBlendKonstAlpha); - - for (i = 1; i < mTextureNum; i++) { - GXSetTevKColorSel(GXTevStageID(i), GXTevKColorSel(0x20 - i * 4)); - GXSetTevKAlphaSel(GXTevStageID(i), GXTevKAlphaSel(0x22 - i * 4)); - GXSetTevColorIn(GXTevStageID(i), GX_CC_CPREV, GX_CC_TEXC, GX_CC_KONST, GX_CC_ZERO); - - if (mTexture[i] == NULL) { - GXSetTevAlphaIn(GXTevStageID(i), GX_CA_APREV, GX_CA_A2, GX_CA_KONST, GX_CA_ZERO); - } else if (mTexture[i]->getTransparency()) { - GXSetTevAlphaIn(GXTevStageID(i), GX_CA_APREV, GX_CA_TEXA, GX_CA_KONST, GX_CA_ZERO); - } else { - GXSetTevAlphaIn(GXTevStageID(i), GX_CA_APREV, GX_CA_A2, GX_CA_KONST, GX_CA_ZERO); - } - - GXSetTevColorOp(GXTevStageID(i), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, - GX_TEVPREV); - GXSetTevAlphaOp(GXTevStageID(i), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, - GX_TEVPREV); - } - - if (mBlack != 0 || mWhite != 0xFFFFFFFF) { - GXSetTevOrder(GXTevStageID(i), GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR_NULL); - GXSetTevColor(GX_TEVREG0, mBlack); - GXSetTevColor(GX_TEVREG1, mWhite); - GXSetTevColorIn(GXTevStageID(i), GX_CC_C0, GX_CC_C1, GX_CC_CPREV, GX_CC_ZERO); - GXSetTevAlphaIn(GXTevStageID(i), GX_CA_A0, GX_CA_A1, GX_CA_APREV, GX_CA_ZERO); - GXSetTevColorOp(GXTevStageID(i), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, - GX_TEVPREV); - GXSetTevAlphaOp(GXTevStageID(i), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, - GX_TEVPREV); - i++; - } - - if (mColorAlpha != 0xFF || mCornerColor[0] != 0xFFFFFFFF || mCornerColor[1] != 0xFFFFFFFF || - mCornerColor[2] != 0xFFFFFFFF || mCornerColor[3] != 0xFFFFFFFF) - { - GXSetTevOrder(GXTevStageID(i), GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0); - GXSetTevColorIn(GXTevStageID(i), GX_CC_ZERO, GX_CC_CPREV, GX_CC_RASC, GX_CC_ZERO); - GXSetTevAlphaIn(GXTevStageID(i), GX_CA_ZERO, GX_CA_APREV, GX_CA_RASA, GX_CA_ZERO); - GXSetTevColorOp(GXTevStageID(i), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, - GX_TEVPREV); - GXSetTevAlphaOp(GXTevStageID(i), GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, - GX_TEVPREV); - i++; - } - - GXSetNumTevStages(u8(i)); - GXSetBlendMode(GX_BM_BLEND, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA, GX_LO_SET); - - for (i = 0; i < mTextureNum; i++) { - GXSetTexCoordGen(GXTexCoordID(i), GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY); - } - - GXSetNumChans(1); - GXSetChanCtrl(GX_COLOR0A0, GX_DISABLE, GX_SRC_REG, GX_SRC_VTX, GX_LIGHT_NULL, GX_DF_NONE, - GX_AF_NONE); - GXSetNumIndStages(0); - - for (int i = GX_TEVSTAGE0; i < GX_MAX_TEVSTAGE; i++) { - GXSetTevDirect((GXTevStageID)i); - } -} - -void J2DPicture::swap(f32& lhs, f32& rhs) { - f32 tmp = lhs; - lhs = rhs; - rhs = tmp; -} - -J2DBinding J2DPicture::getBinding() const { - int r30 = J2DBind_None; - bool r29 = isTumble(); - if (field_0x10a[0].x == 0 || field_0x10a[0].x == 256) { - r30 |= !r29 ? J2DBind_Left : J2DBind_Top; - } - if (field_0x10a[0].y == 0 || field_0x10a[0].y == 256) { - r30 |= !r29 ? J2DBind_Top : J2DBind_Left; - } - if (field_0x10a[3].x == 0 || field_0x10a[3].x == 256) { - r30 |= !r29 ? J2DBind_Right : J2DBind_Bottom; - } - if (field_0x10a[3].y == 0 || field_0x10a[3].y == 256) { - r30 |= !r29 ? J2DBind_Bottom : J2DBind_Right; - } - return J2DBinding(r30); -} - -void J2DPicture::setMirror(J2DMirror mirror) { - if (getTexture(0)) { - J2DBinding binding = getBinding(); - bool r28 = isTumble(); - setTexCoord(getTexture(0), binding, mirror, r28); - } -} - -bool J2DPicture::isTumble() const { - return field_0x10a[1] == JGeometry::TVec2<s16>(s16(field_0x10a[0].x), s16(field_0x10a[3].y)); -} - -void J2DPicture::setBlendColorRatio(f32 param_0, f32 param_1) { - field_0x11c[0] = param_0; - field_0x11c[1] = param_1; - setBlendKonstColor(); -} - -void J2DPicture::setBlendAlphaRatio(f32 param_0, f32 param_1) { - field_0x124[0] = param_0; - field_0x124[1] = param_1; - setBlendKonstAlpha(); -} - -void J2DPicture::setBlendKonstColor() { - int uvar3 = 0; - for (u8 i = 1; i < mTextureNum; i++) { - f32 tmp = 0.0f; - for (u8 j = 0; j < i; j++) { - tmp += field_0x11c[j]; - } - - if (tmp + field_0x11c[i] != 0.0f) { - f32 tmp2 = 255.0f * (1.0f - tmp / (tmp + field_0x11c[i])); - uvar3 |= (u8)tmp2 << (i - 1) * 8; - } - } - mBlendKonstColor = uvar3; -} - -void J2DPicture::setBlendKonstAlpha() { - int uvar3 = 0; - for (u8 i = 1; i < mTextureNum; i++) { - f32 tmp = 0.0f; - for (u8 j = 0; j < i; j++) { - tmp += field_0x124[j]; - } - - if (tmp + field_0x124[i] != 0.0f) { - f32 tmp2 = 255.0f * (1.0f - tmp / (tmp + field_0x124[i])); - uvar3 |= (u8)tmp2 << (i - 1) * 8; - } - } - mBlendKonstAlpha = uvar3; -} - -void J2DPicture::getNewColor(JUtility::TColor* param_0) { - param_0[0] = mCornerColor[0]; - param_0[1] = mCornerColor[1]; - param_0[2] = mCornerColor[2]; - param_0[3] = mCornerColor[3]; - - if (mColorAlpha != 0xFF) { - param_0[0].a = (param_0[0].a * mColorAlpha) / 0xFF; - param_0[1].a = (param_0[1].a * mColorAlpha) / 0xFF; - param_0[2].a = (param_0[2].a * mColorAlpha) / 0xFF; - param_0[3].a = (param_0[3].a * mColorAlpha) / 0xFF; - } -} - -void J2DPicture::setTexCoord(JUTTexture const* param_0, J2DBinding param_1, J2DMirror param_2, - bool param_3) { - setTexCoord(&field_0x10a[0], param_0, param_1, param_2, param_3); -} - -void J2DPicture::setTexCoord(JGeometry::TVec2<s16>* param_0, JUTTexture const* param_1, - J2DBinding binding, J2DMirror mirror, bool rotate90) { - bool bindLeft; - bool bindRight; - bool bindTop; - bool bindBottom; - - if (!rotate90) { - bindLeft = mirror & J2DMirror_X ? bool(binding & J2DBind_Right) : bool(binding & J2DBind_Left); - bindRight = mirror & J2DMirror_X ? bool(binding & J2DBind_Left) : bool(binding & J2DBind_Right); - bindTop = mirror & J2DMirror_Y ? bool(binding & J2DBind_Bottom) : bool(binding & J2DBind_Top); - bindBottom = mirror & J2DMirror_Y ? bool(binding & J2DBind_Top) : bool(binding & J2DBind_Bottom); - } else { - bindLeft = mirror & J2DMirror_X ? bool(binding & J2DBind_Bottom) : bool(binding & J2DBind_Top); - bindRight = mirror & J2DMirror_X ? bool(binding & J2DBind_Top) : bool(binding & J2DBind_Bottom); - bindTop = mirror & J2DMirror_Y ? bool(binding & J2DBind_Left) : bool(binding & J2DBind_Right); - bindBottom = mirror & J2DMirror_Y ? bool(binding & J2DBind_Right) : bool(binding & J2DBind_Left); - } - - f32 rectWidth; - f32 rectHeight; - - rectWidth = !rotate90 ? getWidth() : getHeight(); - rectHeight = !rotate90 ? getHeight() : getWidth(); - - f32 texWidth; - f32 texHeight; - if (param_1 == NULL) { - texWidth = rectWidth; - texHeight = rectHeight; - } else { - texWidth = param_1->getWidth(); - texHeight = param_1->getHeight(); - } - - f32 s0, t0, s1, t1; - if (bindLeft) { - s0 = 0.0f; - s1 = bindRight ? 1.0f : (rectWidth / texWidth); - } else if (bindRight) { - s0 = 1.0f - (rectWidth / texWidth); - s1 = 1.0f; - } else { - s0 = 0.5f - (rectWidth / texWidth) / 2.0f; - s1 = 0.5f + (rectWidth / texWidth) / 2.0f; - } - - if (bindTop) { - t0 = 0.0f; - t1 = bindBottom ? 1.0f : (rectHeight / texHeight); - } else if (bindBottom) { - t0 = 1.0f - (rectHeight / texHeight); - t1 = 1.0f; - } else { - t0 = 0.5f - (rectHeight / texHeight) / 2.0f; - t1 = 0.5f + (rectHeight / texHeight) / 2.0f; - } - - if (mirror & J2DMirror_X) { - swap(s0, s1); - } - if (mirror & J2DMirror_Y) { - swap(t0, t1); - } - - s16 temp_r27 = J2DCast_F32_to_S16(s0, 8); - s16 temp_r28 = J2DCast_F32_to_S16(s1, 8); - s16 temp_r30 = J2DCast_F32_to_S16(t0, 8); - s16 temp_r31 = J2DCast_F32_to_S16(t1, 8); - - if (!rotate90) { - param_0[0].set(temp_r27, temp_r30); - param_0[1].set(temp_r28, temp_r30); - param_0[2].set(temp_r27, temp_r31); - param_0[3].set(temp_r28, temp_r31); - } else { - param_0[0].set(temp_r27, temp_r31); - param_0[1].set(temp_r27, temp_r30); - param_0[2].set(temp_r28, temp_r31); - param_0[3].set(temp_r28, temp_r30); - } -} - - -bool J2DPicture::isUsed(ResTIMG const* param_0) { - for (u8 i = 0; i < mTextureNum; i++) { - if (mTexture[i] != NULL && mTexture[i]->getTexInfo() == param_0) { - return true; - } - } - - return J2DPane::isUsed(param_0); -} - -u8 J2DPicture::getUsableTlut(u8 param_0) { - u8 r27 = 0; - - for (u8 i = 0; i < mTextureNum; i++) { - if (i != param_0 && mTexture[i] != NULL) { - const ResTIMG* img = mTexture[i]->getTexInfo(); - - if (img != NULL && img->indexTexture != 0) { - int name = mTexture[i]->getTlutName(); - - GXTlut local_34; - (void)&local_34; // force this variable to the stack - if (name >= GX_BIGTLUT0) { - local_34 = GX_BIGTLUT0; - } else { - local_34 = GX_TLUT0; - } - - u8 r24 = name - local_34; - if (r24 < 2) { - r27 |= (1 << r24); - } - } - } - } - - u8 r23 = 0; - for (u8 i = 0; i < 2; i++) { - if (!(r27 & (1 << i))) { - r23 = i; - break; - } - } - - return r23; -} - -GXTlut J2DPicture::getTlutID(ResTIMG const* img, u8 param_1) { - if (img->numColors > 256) { - return (GXTlut)((param_1 % 4) + 0x10); - } - - return (GXTlut)param_1; -} |
