TextureLevelArray::TextureLevelArray (void)
{
- deMemset(&m_data[0], 0, sizeof(m_data));
}
TextureLevelArray::~TextureLevelArray (void)
for (int ndx = 0; ndx < DE_LENGTH_OF_ARRAY(m_data); ndx++)
{
- delete[] m_data[ndx];
-
- m_data[ndx] = DE_NULL;
- m_access[ndx] = PixelBufferAccess();
+ m_data[ndx].clear();
+ m_access[ndx] = PixelBufferAccess();
}
}
void TextureLevelArray::allocLevel (int level, const tcu::TextureFormat& format, int width, int height, int depth)
{
- const int dataSize = format.getPixelSize()*width*height*depth;
+ const int dataSize = format.getPixelSize()*width*height*depth;
- DE_ASSERT(level < DE_LENGTH_OF_ARRAY(m_data));
+ DE_ASSERT(deInBounds32(level, 0, DE_LENGTH_OF_ARRAY(m_data)));
if (hasLevel(level))
clearLevel(level);
- m_data[level] = new deUint8[dataSize];
- m_access[level] = PixelBufferAccess(format, width, height, depth, m_data[level]);
+ m_data[level].setStorage(dataSize);
+ m_access[level] = PixelBufferAccess(format, width, height, depth, m_data[level].getPtr());
}
void TextureLevelArray::clearLevel (int level)
{
- DE_ASSERT(level < DE_LENGTH_OF_ARRAY(m_data));
-
- delete[] m_data[level];
+ DE_ASSERT(deInBounds32(level, 0, DE_LENGTH_OF_ARRAY(m_data)));
- m_data[level] = DE_NULL;
- m_access[level] = PixelBufferAccess();
+ m_data[level].clear();
+ m_access[level] = PixelBufferAccess();
}
Texture::Texture (deUint32 name, Type type)
#include "tcuSurface.hpp"
#include "tcuTexture.hpp"
#include "tcuVector.hpp"
-#include "gluRenderContext.hpp"
#include "rrFragmentOperations.hpp"
#include "rrRenderState.hpp"
#include "rrRenderer.hpp"
#include "rrMultisamplePixelBufferAccess.hpp"
+#include "gluRenderContext.hpp"
#include "gluShaderUtil.hpp"
+#include "deArrayBuffer.hpp"
#include <map>
#include <vector>
TextureLevelArray (void);
~TextureLevelArray (void);
- bool hasLevel (int level) const { return level < DE_LENGTH_OF_ARRAY(m_data) && m_data[level]; }
- const tcu::PixelBufferAccess& getLevel (int level) { DE_ASSERT(hasLevel(level)); return m_access[level]; }
- const tcu::ConstPixelBufferAccess& getLevel (int level) const { DE_ASSERT(hasLevel(level)); return m_access[level]; }
+ bool hasLevel (int level) const { return deInBounds32(level, 0, DE_LENGTH_OF_ARRAY(m_data)) && !m_data[level].empty(); }
+ const tcu::PixelBufferAccess& getLevel (int level) { DE_ASSERT(hasLevel(level)); return m_access[level]; }
+ const tcu::ConstPixelBufferAccess& getLevel (int level) const { DE_ASSERT(hasLevel(level)); return m_access[level]; }
- const tcu::ConstPixelBufferAccess* getLevels (void) const { return &m_access[0]; }
+ const tcu::ConstPixelBufferAccess* getLevels (void) const { return &m_access[0]; }
void allocLevel (int level, const tcu::TextureFormat& format, int width, int height, int depth);
void clearLevel (int level);
void clear (void);
private:
- deUint8* m_data[MAX_TEXTURE_SIZE_LOG2];
+ de::ArrayBuffer<deUint8> m_data[MAX_TEXTURE_SIZE_LOG2];
tcu::PixelBufferAccess m_access[MAX_TEXTURE_SIZE_LOG2];
};