summaryrefslogtreecommitdiffstats
path: root/tools/render-test/surface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test/surface.cpp')
-rw-r--r--tools/render-test/surface.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/tools/render-test/surface.cpp b/tools/render-test/surface.cpp
index 3f96052ce..4d761389a 100644
--- a/tools/render-test/surface.cpp
+++ b/tools/render-test/surface.cpp
@@ -188,4 +188,35 @@ void Surface::flipInplaceVertically()
}
}
+SlangResult Surface::set(int width, int height, Format format, int srcRowStride, const void* data, SurfaceAllocator* allocator)
+{
+ if (hasContents() && m_width == width && m_height == height && m_format == format)
+ {
+ // I can just overwrite the contents that is there
+ }
+ else
+ {
+ SLANG_RETURN_ON_FAIL(allocate(width, height, format, 0, allocator));
+ }
+
+ // Okay just need to set the contents
+
+ {
+ const size_t rowSize = calcRowSize(format, width);
+
+ const uint8_t* srcRow = (const uint8_t*)data;
+ uint8_t* dstRow = (uint8_t*)m_data;
+
+ for (int i = 0; i < m_numRows; i++)
+ {
+ ::memcpy(dstRow, srcRow, rowSize);
+
+ srcRow += srcRowStride;
+ dstRow += m_rowStrideInBytes;
+ }
+ }
+
+ return SLANG_OK;
+}
+
} // renderer_test