paysages3d/src/render/software/CanvasPortion.h

76 lines
1.8 KiB
C
Raw Normal View History

#ifndef CANVASPORTION_H
#define CANVASPORTION_H
#include "software_global.h"
namespace paysages {
namespace software {
/**
2014-08-18 10:17:16 +00:00
* Rectangular portion of a Canvas.
*
* Contains the pixels of a canvas region (CanvasPixel).
*
* Pixels are not allocated until preparePixels is called.
*/
class SOFTWARESHARED_EXPORT CanvasPortion
{
public:
2014-06-12 15:45:59 +00:00
CanvasPortion(CanvasPreview* preview=NULL);
2014-06-10 13:13:16 +00:00
~CanvasPortion();
inline int getWidth() const {return width;}
inline int getHeight() const {return height;}
inline int getXOffset() const {return xoffset;}
inline int getYOffset() const {return yoffset;}
2014-06-10 13:13:16 +00:00
int getFragmentCount(int x, int y) const;
const CanvasFragment *getFrontFragment(int x, int y) const;
2014-06-10 13:13:16 +00:00
void clear();
void setSize(int width, int height, int xoffset=0, int yoffset=0);
/**
* Prepare (allocate in memory) the pixels area.
*/
void preparePixels();
/**
* Discard the memory used by pixels.
*/
void discardPixels();
2014-06-10 13:13:16 +00:00
/**
2014-08-18 10:17:16 +00:00
* Add a fragment to the pixel located at (x, y).
2014-06-10 13:13:16 +00:00
*
* Checking x and y coordinates to be in the canvas portion should be done before this call.
*/
void pushFragment(int x, int y, const CanvasFragment &fragment);
2014-08-18 10:17:16 +00:00
/**
* Get the CanvasPixel at a given coordinates.
*
* Checking x and y coordinates to be in the canvas portion should be done before this call.
*/
const CanvasPixel &at(int x, int y);
/**
* Change the final color of the pixel.
*
* Checking x and y coordinates to be in the canvas portion should be done before this call.
*/
void setColor(int x, int y, const Color &color);
private:
int width;
int height;
int xoffset;
int yoffset;
2014-06-10 13:13:16 +00:00
CanvasPixel *pixels;
2014-06-12 15:45:59 +00:00
CanvasPreview* preview;
};
}
}
#endif // CANVASPORTION_H