diff --git a/src/d3d/d3d8.cpp b/src/d3d/d3d8.cpp index 78bef2d..671948f 100644 --- a/src/d3d/d3d8.cpp +++ b/src/d3d/d3d8.cpp @@ -500,7 +500,8 @@ readAsImage(Stream *stream, int32 width, int32 height, int32 depth, int32 format line[0] = palette[*idx*4+0]; line[1] = palette[*idx*4+1]; line[2] = palette[*idx*4+2]; - line[3] = palette[*idx*4+3]; + if(img->bpp > 3) + line[3] = palette[*idx*4+3]; line += img->bpp; idx++; } diff --git a/src/gl/gl3device.cpp b/src/gl/gl3device.cpp index ba6cfd5..9df47ee 100644 --- a/src/gl/gl3device.cpp +++ b/src/gl/gl3device.cpp @@ -660,6 +660,18 @@ setRasterStage(uint32 stage, Raster *raster) } } +void +evictRaster(Raster *raster) +{ + int i; + for(i = 0; i < MAXNUMSTAGES; i++){ + //assert(rwStateCache.texstage[i].raster != raster); + if(rwStateCache.texstage[i].raster != raster) + continue; + setRasterStage(i, nil); + } +} + void setTexture(int32 stage, Texture *tex) { diff --git a/src/gl/gl3raster.cpp b/src/gl/gl3raster.cpp index 89881b4..b7c3941 100644 --- a/src/gl/gl3raster.cpp +++ b/src/gl/gl3raster.cpp @@ -818,12 +818,15 @@ createNativeRaster(void *object, int32 offset, int32) return object; } +void evictRaster(Raster *raster); + static void* destroyNativeRaster(void *object, int32 offset, int32) { Raster *raster = (Raster*)object; Gl3Raster *natras = PLUGINOFFSET(Gl3Raster, object, offset); #ifdef RW_OPENGL + evictRaster(raster); switch(raster->type){ case Raster::NORMAL: case Raster::TEXTURE: