From d67cc37dee7e0d60af2cd172fa135962a6dc3ce5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Thu, 12 Sep 2013 17:27:04 +0100 Subject: [PATCH] glretrace: Dump depth buffers as floating point images. --- retrace/glstate_images.cpp | 25 ++++++++++--------------- retrace/json.cpp | 8 +++++++- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/retrace/glstate_images.cpp b/retrace/glstate_images.cpp index 6efc0a6..37c0ae1 100644 --- a/retrace/glstate_images.cpp +++ b/retrace/glstate_images.cpp @@ -59,11 +59,6 @@ OSStatus CGSGetSurfaceBounds(CGSConnectionID, CGWindowID, CGSSurfaceID, CGRect * #endif /* __APPLE__ */ -/* Change thi to one to force interpreting depth buffers as RGBA, which enables - * visualizing full dynamic range, until we can transmit HDR images to the GUI */ -#define DEPTH_AS_RGBA 0 - - namespace glstate { @@ -935,15 +930,15 @@ getDrawBufferImage() { } GLenum type = GL_UNSIGNED_BYTE; + image::ChannelType channelType = image::TYPE_UNORM8; -#if DEPTH_AS_RGBA if (format == GL_DEPTH_COMPONENT) { - type = GL_UNSIGNED_INT; - channels = 4; + type = GL_FLOAT; + channels = 1; + channelType = image::TYPE_FLOAT; } -#endif - image::Image *image = new image::Image(desc.width, desc.height, channels, true); + image::Image *image = new image::Image(desc.width, desc.height, channels, true, channelType); if (!image) { return NULL; } @@ -1002,15 +997,15 @@ dumpReadBufferImage(JSONWriter &json, GLint width, GLint height, GLenum format, Context context; GLenum type = GL_UNSIGNED_BYTE; + image::ChannelType channelType = image::TYPE_UNORM8; -#if DEPTH_AS_RGBA if (format == GL_DEPTH_COMPONENT) { - type = GL_UNSIGNED_INT; - channels = 4; + type = GL_FLOAT; + channels = 1; + channelType = image::TYPE_FLOAT; } -#endif - image::Image *image = new image::Image(width, height, channels, true); + image::Image *image = new image::Image(width, height, channels, true, channelType); while (glGetError() != GL_NO_ERROR) {} diff --git a/retrace/json.cpp b/retrace/json.cpp index 53a61a3..850e37f 100644 --- a/retrace/json.cpp +++ b/retrace/json.cpp @@ -322,7 +322,13 @@ JSONWriter::writeImage(image::Image *image, const char *format, unsigned depth) beginMember("__data__"); std::stringstream ss; - image->writePNG(ss); + + if (image->channelType == image::TYPE_UNORM8) { + image->writePNG(ss); + } else { + image->writePNM(ss); + } + const std::string & s = ss.str(); writeBase64(s.data(), s.size()); endMember(); // __data__ -- 2.43.0