diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2018-05-04 12:00:53 -0400 |
|---|---|---|
| committer | Tim Foley <tfoleyNV@users.noreply.github.com> | 2018-05-04 09:00:53 -0700 |
| commit | ee47232fc17f31ef2bd95ca480372216a79def56 (patch) | |
| tree | 75d1fdd76e2ed4e081699aaae8b6df819f181260 /tools/render-test/surface.cpp | |
| parent | 494330d4941ccaf50e07ef309fd783c2f44a492e (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.cpp | 31 |
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 |
