Decompile fn_02116 (RendererDX7Operations::SetTextureMode)

Batch #1633 by eAthena: 0 byte-identical, 1 confirmed by peer review.

- fn_02116 RendererDX7Operations::SetTextureMode: logic confirmed by peer review

Reviewed-by: ragnarok-clanker
This commit is contained in:
ragnarok-clanker 2026-10-28 19:46:32 +00:00
commit 207f838d32

View file

@ -1,10 +1,203 @@
#include "Render/DX7/RendererDX7Operations.h"
#include "Render/TextureStageModes.h"
// OFFSET: 0x0055ED50
// FUNCTION: fn_02116
void RendererDX7Operations::SetTextureMode(int mode) {
for (const auto& write : TextureStageModeWrites(mode)) {
this->device->SetTextureStageState(write.stage, static_cast<D3DTEXTURESTAGESTATETYPE>(write.state), write.value);
switch (mode) {
case 0:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
break;
case 1:
case 2:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
break;
case 3:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_ADD);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
break;
case 4:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_BLENDTEXTUREALPHA);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_DISABLE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_DISABLE);
break;
case 5:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 6:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE | D3DTA_COMPLEMENT);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE | D3DTA_COMPLEMENT);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 7:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE | D3DTA_ALPHAREPLICATE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 8:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADD);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 9:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_BLENDTEXTUREALPHA);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 10:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_BLENDDIFFUSEALPHA);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 11:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADD);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 12:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE | D3DTA_COMPLEMENT);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADD);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 13:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_ADD);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 14:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_MODULATE2X);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
case 15:
this->device->SetTextureStageState(0, D3DTSS_TEXCOORDINDEX, 0);
this->device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
this->device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
this->device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
this->device->SetTextureStageState(1, D3DTSS_TEXCOORDINDEX, 1);
this->device->SetTextureStageState(1, D3DTSS_COLORARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_COLOROP, D3DTOP_ADDSIGNED);
this->device->SetTextureStageState(1, D3DTSS_COLORARG2, D3DTA_CURRENT);
this->device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
this->device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
break;
}
}