From Giuseppe Donvito, "I'm using OSG 320 and I need to flush a DDS 3D texture on disk.
I found a bug on DDS ReaderWriter that generates a false positive on a guard for the size check on writing operation. This is due to a wrong imageSize computation that uses img->getImageSizeInBytes() method instead of img->getTotalSizeInBytes(), that actually ignores the r() dimension, contrariwise taken into account by the function ComputeImageSizeInBytes() later. The line 1062 on file ReaderWriterDDS.cpp should be fixed with: [code]unsigned int imageSize = img->getTotalSizeInBytes();[/code] "
This commit is contained in:
@@ -1059,7 +1059,7 @@ bool WriteDDSFile(const osg::Image *img, std::ostream& fout, bool autoFlipDDSWri
|
||||
//unsigned int internalFormat = img->getInternalTextureFormat();
|
||||
//unsigned int components = osg::Image::computeNumComponents(pixelFormat);
|
||||
unsigned int pixelSize = osg::Image::computePixelSizeInBits(pixelFormat, dataType);
|
||||
unsigned int imageSize = img->getImageSizeInBytes();
|
||||
unsigned int imageSize = img->getTotalSizeInBytes();
|
||||
|
||||
// Check that theorical image size (computation taking into account DXTC blocks) is not bigger than actual image size.
|
||||
// This may happen, for instance, if some operation tuncated the data buffer non block-aligned. Example:
|
||||
|
||||
Reference in New Issue
Block a user