aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/surface.cpp19
-rw-r--r--graphics/surface.h11
2 files changed, 30 insertions, 0 deletions
diff --git a/graphics/surface.cpp b/graphics/surface.cpp
index 4d7cc713bf..b0585eab15 100644
--- a/graphics/surface.cpp
+++ b/graphics/surface.cpp
@@ -46,6 +46,25 @@ void Surface::drawLine(int x0, int y0, int x1, int y1, uint32 color) {
error("Surface::drawLine: bytesPerPixel must be 1 or 2");
}
+void Surface::create(uint16 width, uint16 height, uint8 bytesPP) {
+ free();
+
+ w = width;
+ h = height;
+ bytesPerPixel = bytesPP;
+ pitch = w * bytesPP;
+
+ pixels = calloc(width * height, bytesPP);
+ assert(pixels);
+}
+
+void Surface::free() {
+ ::free(pixels);
+ pixels = 0;
+ w = h = pitch = 0;
+ bytesPerPixel = 0;
+}
+
void Surface::hLine(int x, int y, int x2, uint32 color) {
// Clipping
if (y < 0 || y >= h)
diff --git a/graphics/surface.h b/graphics/surface.h
index ce3596b364..fcdadf3b4a 100644
--- a/graphics/surface.h
+++ b/graphics/surface.h
@@ -47,6 +47,17 @@ struct Surface {
return static_cast<void *>(static_cast<byte *>(pixels) + y * pitch + x * bytesPerPixel);
}
+ /**
+ * Allocate pixels memory for this surface and for the specified dimension.
+ */
+ void create(uint16 width, uint16 height, uint8 bytesPP);
+
+ /**
+ * Release the memory used by the pixels memory of this surface. This is the
+ * counterpart to create().
+ */
+ void free();
+
void drawLine(int x0, int y0, int x1, int y1, uint32 color);
void hLine(int x, int y, int x2, uint32 color);
void vLine(int x, int y, int y2, uint32 color);