1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-07 03:13:49 +00:00
GLideN64/src/Graphics/ColorBufferReader.h
Francisco Zurita 16d1aa6761 Fix possible memory corruption when reading pixels for G_IM_SIZ_8b
buffers.

Also, improve variable naming.
2017-09-11 10:26:49 +07:00

40 lines
1009 B
C++

#pragma once
#include <vector>
#include <Types.h>
#include <Textures.h>
namespace graphics {
class ColorBufferReader
{
public:
ColorBufferReader(CachedTexture * _pTexture);
virtual ~ColorBufferReader() = default;
virtual const u8 * readPixels(s32 _x0, s32 _y0, u32 _width, u32 _height, u32 _size, bool _sync);
virtual void cleanUp() = 0;
protected:
struct ReadColorBufferParams {
s32 x0;
s32 y0;
u32 width;
u32 height;
bool sync;
ColorFormatParam colorFormat;
DatatypeParam colorType;
u32 colorFormatBytes;
};
CachedTexture * m_pTexture;
std::vector<u8> m_pixelData;
std::vector<u8> m_tempPixelData;
private:
const u8* _convertFloatTextureBuffer(const u8* _gpuData, u32 _width, u32 _height, u32 _heightOffset, u32 _stride);
const u8* _convertIntegerTextureBuffer(const u8* _gpuData, u32 _width, u32 _height,u32 _heightOffset, u32 _stride, u32 _colorsPerPixel);
virtual const u8 * _readPixels(const ReadColorBufferParams& _params, u32& _heightOffset, u32& _stride) = 0;
};
}