瀏覽代碼

Made the getSize() and getData() methods for CompressedData consistent with each other. Note that CompressedData's data may not all be contiguous in memory, so getData(miplevel) and getSize(miplevel) should always be used instead.

--HG--
branch : image-CompressedData
Alex Szpakowski 12 年之前
父節點
當前提交
4cd14d5c08
共有 2 個文件被更改,包括 16 次插入9 次删除
  1. 13 8
      src/modules/image/CompressedData.cpp
  2. 3 1
      src/modules/image/CompressedData.h

+ 13 - 8
src/modules/image/CompressedData.cpp

@@ -36,18 +36,23 @@ CompressedData::~CompressedData()
 
 
 int CompressedData::getSize() const
 int CompressedData::getSize() const
 {
 {
-	size_t totalsize = sizeof(SubImage) * dataImages.size();
-
-	for (size_t i = 0; i < dataImages.size(); i++)
-		totalsize += dataImages[i].size;
-
-	return totalsize;
+	// Adding up the total size for all mipmap levels would make more sense, but
+	// it's probably better for getSize() to match getData() so no bad memory
+	// accesses happen...
+	if (dataImages.size() > 0)
+		return dataImages[0].size;
+	else
+		return 0;
 }
 }
 
 
 void *CompressedData::getData() const
 void *CompressedData::getData() const
 {
 {
-	// ?
-	return (void *) &dataImages[0].data[0];
+	// Data for different mipmap levels is not stored contiguously in memory, so
+	// getData() won't work properly for CompressedData.
+	if (dataImages.size() > 0)
+		return (void *) &(dataImages[0].data[0]);
+	else
+		return 0;
 }
 }
 
 
 int CompressedData::getNumMipmaps() const
 int CompressedData::getNumMipmaps() const

+ 3 - 1
src/modules/image/CompressedData.h

@@ -70,7 +70,9 @@ public:
 	CompressedData();
 	CompressedData();
 	virtual ~CompressedData();
 	virtual ~CompressedData();
 
 
-	// Implements Data.
+	// Implements Data. Note that data for different mipmap levels is not always
+	// stored contiguously in memory, so getData() and getSize() don't make
+	// much sense. Use getData(miplevel) and getSize(mipleveL) instead.
 	virtual void *getData() const;
 	virtual void *getData() const;
 	virtual int getSize() const;
 	virtual int getSize() const;