wined3d: Implement range based fog and advertize it correctly.
This commit is contained in:
parent
04d62b4322
commit
0dade7207f
|
@ -1889,7 +1889,6 @@ static HRESULT WINAPI IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,
|
||||||
WINED3DPRASTERCAPS_ZFOG |
|
WINED3DPRASTERCAPS_ZFOG |
|
||||||
WINED3DPRASTERCAPS_FOGVERTEX |
|
WINED3DPRASTERCAPS_FOGVERTEX |
|
||||||
WINED3DPRASTERCAPS_FOGTABLE |
|
WINED3DPRASTERCAPS_FOGTABLE |
|
||||||
WINED3DPRASTERCAPS_FOGRANGE |
|
|
||||||
WINED3DPRASTERCAPS_STIPPLE |
|
WINED3DPRASTERCAPS_STIPPLE |
|
||||||
WINED3DPRASTERCAPS_SUBPIXEL |
|
WINED3DPRASTERCAPS_SUBPIXEL |
|
||||||
WINED3DPRASTERCAPS_ZTEST |
|
WINED3DPRASTERCAPS_ZTEST |
|
||||||
|
@ -1901,6 +1900,9 @@ static HRESULT WINAPI IWineD3DImpl_GetDeviceCaps(IWineD3D *iface, UINT Adapter,
|
||||||
*pCaps->RasterCaps |= WINED3DPRASTERCAPS_ANISOTROPY |
|
*pCaps->RasterCaps |= WINED3DPRASTERCAPS_ANISOTROPY |
|
||||||
WINED3DPRASTERCAPS_ZBIAS |
|
WINED3DPRASTERCAPS_ZBIAS |
|
||||||
WINED3DPRASTERCAPS_MIPMAPLODBIAS;
|
WINED3DPRASTERCAPS_MIPMAPLODBIAS;
|
||||||
|
}
|
||||||
|
if(GL_SUPPORT(NV_FOG_DISTANCE)) {
|
||||||
|
*pCaps->RasterCaps |= WINED3DPRASTERCAPS_FOGRANGE;
|
||||||
}
|
}
|
||||||
/* FIXME Add:
|
/* FIXME Add:
|
||||||
WINED3DPRASTERCAPS_COLORPERSPECTIVE
|
WINED3DPRASTERCAPS_COLORPERSPECTIVE
|
||||||
|
|
|
@ -988,9 +988,21 @@ static void state_fog(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DCo
|
||||||
checkGLcall("glFogf(GL_FOG_END, fogend");
|
checkGLcall("glFogf(GL_FOG_END, fogend");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (GL_SUPPORT(NV_FOG_DISTANCE)) {
|
static void state_rangefog(DWORD state, IWineD3DStateBlockImpl *stateblock, WineD3DContext *context) {
|
||||||
glFogi(GL_FOG_DISTANCE_MODE_NV, GL_EYE_PLANE_ABSOLUTE_NV);
|
if(stateblock->renderState[WINED3DRS_RANGEFOGENABLE]) {
|
||||||
|
if (GL_SUPPORT(NV_FOG_DISTANCE)) {
|
||||||
|
glFogi(GL_FOG_DISTANCE_MODE_NV, GL_EYE_RADIAL_NV);
|
||||||
|
checkGLcall("glFogi(GL_FOG_DISTANCE_MODE_NV, GL_EYE_RADIAL_NV)");
|
||||||
|
} else {
|
||||||
|
WARN("Range fog enabled, but not supported by this opengl implementation\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (GL_SUPPORT(NV_FOG_DISTANCE)) {
|
||||||
|
glFogi(GL_FOG_DISTANCE_MODE_NV, GL_EYE_PLANE_ABSOLUTE_NV);
|
||||||
|
checkGLcall("glFogi(GL_FOG_DISTANCE_MODE_NV, GL_EYE_PLANE_ABSOLUTE_NV)");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3534,7 +3546,7 @@ const struct StateEntry StateTable[] =
|
||||||
{ /* 45, WINED3DRS_TEXTUREADDRESSV */ 0, /* Handled in ddraw */ state_undefined },
|
{ /* 45, WINED3DRS_TEXTUREADDRESSV */ 0, /* Handled in ddraw */ state_undefined },
|
||||||
{ /* 46, WINED3DRS_MIPMAPLODBIAS */ STATE_RENDER(WINED3DRS_MIPMAPLODBIAS), state_mipmaplodbias },
|
{ /* 46, WINED3DRS_MIPMAPLODBIAS */ STATE_RENDER(WINED3DRS_MIPMAPLODBIAS), state_mipmaplodbias },
|
||||||
{ /* 47, WINED3DRS_ZBIAS */ STATE_RENDER(WINED3DRS_ZBIAS), state_zbias },
|
{ /* 47, WINED3DRS_ZBIAS */ STATE_RENDER(WINED3DRS_ZBIAS), state_zbias },
|
||||||
{ /* 48, WINED3DRS_RANGEFOGENABLE */ 0, state_nogl },
|
{ /* 48, WINED3DRS_RANGEFOGENABLE */ STATE_RENDER(WINED3DRS_RANGEFOGENABLE), state_rangefog },
|
||||||
{ /* 49, WINED3DRS_ANISOTROPY */ STATE_RENDER(WINED3DRS_ANISOTROPY), state_anisotropy },
|
{ /* 49, WINED3DRS_ANISOTROPY */ STATE_RENDER(WINED3DRS_ANISOTROPY), state_anisotropy },
|
||||||
{ /* 50, WINED3DRS_FLUSHBATCH */ STATE_RENDER(WINED3DRS_FLUSHBATCH), state_flushbatch },
|
{ /* 50, WINED3DRS_FLUSHBATCH */ STATE_RENDER(WINED3DRS_FLUSHBATCH), state_flushbatch },
|
||||||
{ /* 51, WINED3DRS_TRANSLUCENTSORTINDEPENDENT */ STATE_RENDER(WINED3DRS_TRANSLUCENTSORTINDEPENDENT), state_translucentsi },
|
{ /* 51, WINED3DRS_TRANSLUCENTSORTINDEPENDENT */ STATE_RENDER(WINED3DRS_TRANSLUCENTSORTINDEPENDENT), state_translucentsi },
|
||||||
|
|
Loading…
Reference in New Issue