Although AGI appears to support multi-texturing, support has been removed in a few places:
NoMultiTexture
is always set to 1.
agiCurState.MaxTextures
is always set to 1.
// test1560.exe
NoMultiTexture = 1;
if (hwcaps.dwDevCaps & 0x4000) {
agiDisplayf("Separate texture memories (probably a voodoo!)");
NoMultiTexture = 1;
}
agiCurState.State.MaxTextures = 1;
SeparateTextureMemories = 0;
// am.exe
NoMultiTexture = 1;
if (hwcaps.dwDevCaps & 0x4000) {
agiDisplayf("Separate texture memories (probably a voodoo!)");
SeparateTextureMemories = 1;
NoMultiTexture = 1;
}
if (NoMultiTexture)
agiRendState::SetMaxTextures(&agiCurState, 1);
else
agiRendState::SetMaxTextures(&agiCurState, hwcaps.wMaxSimultaneousTextures);
if (agiRendState::GetMaxTextures((char*)&agiCurState) <= 1) {
SeparateTextureMemories = 0;
} else {
agiDisplayf("Multitexturing is supported!");
v41 = v49->D3DDevice->lpVtbl->SetTextureStageState(v49->D3DDevice, 1, D3DTSS_TEXCOORDINDEX, 1);
__DDTry(
v41,
(int)"D3DDevice->SetTextureStageState(1,D3DTSS_TEXCOORDINDEX,1)",
(int)"C:\\mm\\src\\agid3d\\d3dpipe.c",
583);
}
// am.exe
multi_texture = 0;
// ...
if (multi_texture
&& agiRendState::GetMaxTextures(&agiCurState) > 1
&& !strncmp(this->Params.Name, "SHADMAP", 7u)) {
Displayf("Fixing shadow map '%s' for multitexturing...", this->Params.Name);
surface = (uint16_t*)this->Surface->lpSurface;
surface_bytes = 0;
v19 = this->Surface->dwWidth;
for (i = this->Surface->dwHeight; v19 && i; i >>= 1) {
surface_bytes += i * v19;
v19 >>= 1;
}
while (surface_bytes--) {
*surface = ~(((signed int)*surface >> 12) | ((signed int)*surface >> 8) | ((signed int)*surface >> 4));
++surface;
}
}
// ...