00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef VRS_IMAGE_COMPRESSEDIMAGE_H
00021 #define VRS_IMAGE_COMPRESSEDIMAGE_H
00022
00023 #include <vrs/image/image.h>
00024 #include <vrs/opengl/openglconfig.h>
00025
00026 namespace VRS {
00027
00028 class DataResource;
00029
00031 class VRS_CORE_API CompressedImage : public Image {
00032 public:
00033 enum Compression { R5G6B5_S3TC = 0, R5G6B5A1_S3TC, R5G6B5A8_S3TC, R3G3B2, R5G6B5, R5G5B5A1, R4G4B4A4, B5G5R5A1 };
00034 VRS_SERIALIZABLE_CLASS_ENUM(Compression);
00036
00037 CompressedImage(DataResource* data);
00038 CompressedImage(unsigned int sizeX, unsigned int sizeY, Compression compression);
00039 CompressedImage(Compression compression, Image* source, const std::string& filename = "");
00052 virtual int width() const;
00053 virtual int height() const;
00055
00056 virtual void* pixelComponents(int x, int y, int component = 0) const;
00058
00059 virtual Image::MemoryLayout memoryLayout() const;
00060 virtual int alignment() const;
00061 virtual int padding() const;
00062
00063 CompressedImage::Compression compression() const;
00064
00065 GLenum internalFormat() const;
00066 GLenum imageFormat() const;
00067 GLenum pixelFormat() const;
00069
00070 virtual int dataSize() const;
00072
00073 virtual int bitsPerPixel() const;
00074
00075 virtual DataResource* rawData() const;
00076
00078 virtual SO<Image> uncompressed(bool storeReference = false) const;
00079
00080 virtual bool flipY() const { return m_flipY; }
00081 virtual void flipY(bool yesNo) { m_flipY = yesNo; }
00082
00083 VRS_TYPEINFO(CompressedImage, Image);
00084 VRS_SERIALIZABLE(CompressedImage);
00085
00086 protected:
00087 CompressedImage();
00088
00089 private:
00090 UINT width_;
00091 UINT height_;
00092 Compression compression_;
00093 SO<DataResource> data_;
00094 mutable SO<Image> uncompressed_;
00095 bool m_flipY;
00096 };
00097
00098 }
00099
00100 #endif // VRS_IMAGE_COMPRESSEDIMAGE_H