wined3d: Fix np2 textures.

This commit is contained in:
Stefan Dösinger 2007-01-06 18:43:08 +01:00 committed by Alexandre Julliard
parent 9f2e0fa2e0
commit 577f8db7cf
2 changed files with 22 additions and 6 deletions

View File

@ -1752,13 +1752,28 @@ static void sampler(DWORD state, IWineD3DStateBlockImpl *stateblock) {
}
if(stateblock->textures[sampler]) {
BOOL texIsPow2 = FALSE;
/* NP2 textures need the texture matrix set properly for the stage */
if(wined3d_settings.nonpower2_mode == NP2_NATIVE && sampler < MAX_TEXTURES - 1 &&
stateblock->textureDimensions[sampler] == GL_TEXTURE_2D &&
(((IWineD3DTextureImpl *) stateblock->textures[sampler])->pow2scalingFactorX != 1.0 ||
((IWineD3DTextureImpl *) stateblock->textures[sampler])->pow2scalingFactorY != 1.0 ) ) {
transform_texture(STATE_TRANSFORM(WINED3DTS_TEXTURE0 + stateblock->wineD3DDevice->texUnitMap[sampler]), stateblock);
/* The fixed function np2 texture emulation uses the texture matrix to fix up the coordinates
* IWineD3DBaseTexture::ApplyStateChanges multiplies the set matrix with a fixup matrix. Before the
* scaling is reapplied or removed, the texture matrix has to be reapplied
*/
if(wined3d_settings.nonpower2_mode != NP2_NATIVE && sampler < MAX_TEXTURES) {
if(stateblock->textureDimensions[sampler] == GL_TEXTURE_2D) {
if(((IWineD3DTextureImpl *) stateblock->textures[sampler])->pow2scalingFactorX != 1.0 ||
((IWineD3DTextureImpl *) stateblock->textures[sampler])->pow2scalingFactorY != 1.0 ) {
texIsPow2 = TRUE;
}
} else if(stateblock->textureDimensions[sampler] == GL_TEXTURE_CUBE_MAP_ARB) {
if(((IWineD3DCubeTextureImpl *) stateblock->textures[sampler])->pow2scalingFactor != 1.0) {
texIsPow2 = TRUE;
}
}
if(texIsPow2 || stateblock->wineD3DDevice->lastWasPow2Texture[sampler]) {
transform_texture(STATE_TRANSFORM(WINED3DTS_TEXTURE0 + stateblock->wineD3DDevice->texUnitMap[sampler]), stateblock);
stateblock->wineD3DDevice->lastWasPow2Texture[sampler] = texIsPow2;
}
}
IWineD3DBaseTexture_PreLoad((IWineD3DBaseTexture *) stateblock->textures[sampler]);

View File

@ -583,6 +583,7 @@ typedef struct IWineD3DDeviceImpl
BOOL last_was_vshader;
BOOL last_was_foggy_shader;
BOOL namedArraysLoaded, numberedArraysLoaded;
BOOL lastWasPow2Texture[MAX_TEXTURES];
/* State block related */
BOOL isRecordingState;