Integrate 3D texture fixes from Ben Goldstein @ Nihilistic.

pull/216/head
castano 12 years ago
parent ac3f2d1794
commit 63897b3ecc

@ -1242,6 +1242,7 @@ void DirectDrawSurface::readLinearImage(Image * img)
const uint w = img->width(); const uint w = img->width();
const uint h = img->height(); const uint h = img->height();
const uint d = img->depth();
uint rshift, rsize; uint rshift, rsize;
PixelFormat::maskShiftAndSize(header.pf.rmask, &rshift, &rsize); PixelFormat::maskShiftAndSize(header.pf.rmask, &rshift, &rsize);
@ -1260,20 +1261,23 @@ void DirectDrawSurface::readLinearImage(Image * img)
#pragma NV_MESSAGE("TODO: Support floating point linear images and other FOURCC codes.") #pragma NV_MESSAGE("TODO: Support floating point linear images and other FOURCC codes.")
// Read linear RGB images. // Read linear RGB images.
for (uint y = 0; y < h; y++) for (uint z = 0; z < d; z++)
{ {
for (uint x = 0; x < w; x++) for (uint y = 0; y < h; y++)
{ {
uint c = 0; for (uint x = 0; x < w; x++)
stream->serialize(&c, byteCount); {
uint c = 0;
stream->serialize(&c, byteCount);
Color32 pixel(0, 0, 0, 0xFF); Color32 pixel(0, 0, 0, 0xFF);
pixel.r = PixelFormat::convert((c & header.pf.rmask) >> rshift, rsize, 8); pixel.r = PixelFormat::convert((c & header.pf.rmask) >> rshift, rsize, 8);
pixel.g = PixelFormat::convert((c & header.pf.gmask) >> gshift, gsize, 8); pixel.g = PixelFormat::convert((c & header.pf.gmask) >> gshift, gsize, 8);
pixel.b = PixelFormat::convert((c & header.pf.bmask) >> bshift, bsize, 8); pixel.b = PixelFormat::convert((c & header.pf.bmask) >> bshift, bsize, 8);
pixel.a = PixelFormat::convert((c & header.pf.amask) >> ashift, asize, 8); pixel.a = PixelFormat::convert((c & header.pf.amask) >> ashift, asize, 8);
img->pixel(x, y) = pixel; img->pixel(x, y, z) = pixel;
}
} }
} }
} }

@ -1443,7 +1443,7 @@ FloatImage* FloatImage::clone() const
{ {
FloatImage* copy = new FloatImage(); FloatImage* copy = new FloatImage();
copy->allocate(m_componentCount, m_width, m_height); copy->allocate(m_componentCount, m_width, m_height, m_depth);
memcpy(copy->m_mem, m_mem, m_floatCount * sizeof(float)); memcpy(copy->m_mem, m_mem, m_floatCount * sizeof(float));
return copy; return copy;

@ -48,8 +48,8 @@ namespace nv
const Color32 & pixel(uint idx) const; const Color32 & pixel(uint idx) const;
Color32 & pixel(uint idx); Color32 & pixel(uint idx);
const Color32 & pixel(uint x, uint y) const; const Color32 & pixel(uint x, uint y, uint z = 0) const;
Color32 & pixel(uint x, uint y); Color32 & pixel(uint x, uint y, uint z = 0);
Format format() const; Format format() const;
void setFormat(Format f); void setFormat(Format f);
@ -68,16 +68,16 @@ namespace nv
}; };
inline const Color32 & Image::pixel(uint x, uint y) const inline const Color32 & Image::pixel(uint x, uint y, uint z) const
{ {
nvDebugCheck(x < m_width && y < m_height); nvDebugCheck(x < m_width && y < m_height && z < m_depth);
return pixel(y * m_width + x); return pixel((z * m_height + y) * m_width + x);
} }
inline Color32 & Image::pixel(uint x, uint y) inline Color32 & Image::pixel(uint x, uint y, uint z)
{ {
nvDebugCheck(x < m_width && y < m_height); nvDebugCheck(x < m_width && y < m_height && z < m_depth);
return pixel(y * m_width + x); return pixel((z * m_height + y) * m_width + x);
} }
} // nv namespace } // nv namespace

Loading…
Cancel
Save