1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Workaround for NVIDIA texture color key bug

This commit is contained in:
narzoul 2022-05-21 23:29:15 +02:00
parent 6463cc84aa
commit 32301efd5c

View File

@ -277,6 +277,17 @@ namespace D3dDdi
{
return value & (D3DWRAPCOORD_0 | D3DWRAPCOORD_1 | D3DWRAPCOORD_2 | D3DWRAPCOORD_3);
}
if (D3DDDIRS_COLORKEYENABLE == state && value)
{
UINT enable = FALSE;
for (UINT i = 0; i < getVertexDecl().textureStageCount && !enable; ++i)
{
enable = !m_app.textureStageState[i][D3DDDITSS_DISABLETEXTURECOLORKEY];
}
return enable;
}
if (D3DDDIRS_MULTISAMPLEANTIALIAS == state)
{
return 0 != value && !m_spriteMode;
@ -476,7 +487,8 @@ namespace D3dDdi
HRESULT DeviceState::pfnSetTexture(UINT stage, HANDLE texture)
{
m_app.textures[stage] = texture;
m_changedStates |= CS_TEXTURE_STAGE;
m_changedStates |= CS_RENDER_STATE | CS_TEXTURE_STAGE;
m_changedRenderStates.set(D3DDDIRS_COLORKEYENABLE);
m_changedTextureStageStates[stage].set(D3DDDITSS_ADDRESSU);
m_changedTextureStageStates[stage].set(D3DDDITSS_ADDRESSV);
m_maxChangedTextureStage = max(stage, m_maxChangedTextureStage);
@ -495,9 +507,15 @@ namespace D3dDdi
return S_OK;
}
if (D3DDDITSS_TEXTURECOLORKEYVAL == data->State)
if (D3DDDITSS_TEXTURECOLORKEYVAL == data->State ||
D3DDDITSS_DISABLETEXTURECOLORKEY == data->State)
{
m_app.textureStageState[data->Stage][D3DDDITSS_DISABLETEXTURECOLORKEY] = FALSE;
if (D3DDDITSS_TEXTURECOLORKEYVAL == data->State)
{
m_app.textureStageState[data->Stage][D3DDDITSS_DISABLETEXTURECOLORKEY] = FALSE;
}
m_changedRenderStates.set(D3DDDIRS_COLORKEYENABLE);
m_changedStates |= CS_RENDER_STATE;
}
m_app.textureStageState[data->Stage][data->State] = data->Value;