mesa: added _mesa_dump_renderbuffers() debug code

This commit is contained in:
Brian Paul 2009-10-20 16:13:08 -06:00
parent d364f662c6
commit 2cc5a0e6bb
2 changed files with 77 additions and 2 deletions

View File

@ -27,6 +27,7 @@
#include "attrib.h"
#include "colormac.h"
#include "context.h"
#include "enums.h"
#include "hash.h"
#include "imports.h"
#include "debug.h"
@ -264,10 +265,13 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height,
/**
* Write level[0] image to a ppm file.
* Write a texture image to a ppm file.
* \param face cube face in [0,5]
* \param level mipmap level
*/
static void
write_texture_image(struct gl_texture_object *texObj, GLuint face, GLuint level)
write_texture_image(struct gl_texture_object *texObj,
GLuint face, GLuint level)
{
struct gl_texture_image *img = texObj->Image[face][level];
if (img) {
@ -299,6 +303,45 @@ write_texture_image(struct gl_texture_object *texObj, GLuint face, GLuint level)
}
/**
* Write renderbuffer image to a ppm file.
*/
static void
write_renderbuffer_image(const struct gl_renderbuffer *rb)
{
GET_CURRENT_CONTEXT(ctx);
GLubyte *buffer;
char s[100];
GLenum format, type;
if (rb->_BaseFormat == GL_RGB ||
rb->_BaseFormat == GL_RGBA) {
format = GL_RGBA;
type = GL_UNSIGNED_BYTE;
}
else if (rb->_BaseFormat == GL_DEPTH_STENCIL) {
format = GL_DEPTH_STENCIL;
type = GL_UNSIGNED_INT_24_8;
}
else {
return;
}
buffer = (GLubyte *) _mesa_malloc(rb->Width * rb->Height * 4);
ctx->Driver.ReadPixels(ctx, 0, 0, rb->Width, rb->Height,
format, type, &ctx->DefaultPacking, buffer);
/* make filename */
_mesa_sprintf(s, "/tmp/renderbuffer%u.ppm", rb->Name);
_mesa_printf(" Writing renderbuffer image to %s\n", s);
write_ppm(s, buffer, rb->Width, rb->Height, 4, 0, 1, 2, GL_TRUE);
_mesa_free(buffer);
}
static GLboolean DumpImages;
@ -341,6 +384,35 @@ _mesa_dump_textures(GLboolean dumpImages)
}
static void
dump_renderbuffer_cb(GLuint id, void *data, void *userData)
{
const struct gl_renderbuffer *rb = (const struct gl_renderbuffer *) data;
(void) userData;
_mesa_printf("Renderbuffer %u: %u x %u IntFormat = %s\n",
rb->Name, rb->Width, rb->Height,
_mesa_lookup_enum_by_nr(rb->InternalFormat));
if (DumpImages) {
write_renderbuffer_image(rb);
}
}
/**
* Print basic info about all renderbuffers to stdout.
* If dumpImages is true, write PPM of level[0] image to a file.
*/
void
_mesa_dump_renderbuffers(GLboolean dumpImages)
{
GET_CURRENT_CONTEXT(ctx);
DumpImages = dumpImages;
_mesa_HashWalk(ctx->Shared->RenderBuffers, dump_renderbuffer_cb, ctx);
}
void
_mesa_dump_color_buffer(const char *filename)
{

View File

@ -60,6 +60,9 @@ extern void _mesa_init_debug( GLcontext *ctx );
extern void
_mesa_dump_textures(GLboolean dumpImages);
extern void
_mesa_dump_renderbuffers(GLboolean dumpImages);
extern void
_mesa_dump_color_buffer(const char *filename);