summaryrefslogtreecommitdiffstats
path: root/tools/render-test/surface.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-05-04 12:00:53 -0400
committerTim Foley <tfoleyNV@users.noreply.github.com>2018-05-04 09:00:53 -0700
commitee47232fc17f31ef2bd95ca480372216a79def56 (patch)
tree75d1fdd76e2ed4e081699aaae8b6df819f181260 /tools/render-test/surface.cpp
parent494330d4941ccaf50e07ef309fd783c2f44a492e (diff)
Use Surface for screen capture in Renderer interface (#551)
* Remove serialization of screen captures from a renderer implementation, capture now writes to a Surface. Then client code can decide to serialize (or use as needed). * Improved comment for captureScreenSurface.
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