diff options
author | Eric Anholt <eric@anholt.net> | 2011-04-15 13:36:40 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2011-04-20 10:35:41 -0700 |
commit | ba99c2fbd95c5ecd741767d0c37eaf94bf655342 (patch) | |
tree | 57b91d1a62bd6f6d6c3b434dd79efa784d0d4b21 | |
parent | a45b757f788d3a59a446fe2596065ec5f0d5eac2 (diff) |
mesa: Add renderbuffer accessors for MESA_FORMAT_RGBA_FLOAT32.
Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r-- | src/mesa/main/renderbuffer.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index 4a4a917540..ab55c3688e 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -113,6 +113,23 @@ get_row_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, memcpy(values, src, count * _mesa_get_format_bytes(rb->Format)); } +/* Only used for float textures currently, but might also be used for + * RGBA8888, RGBA16, etc. + */ +static void +get_values_generic(struct gl_context *ctx, struct gl_renderbuffer *rb, + GLuint count, const GLint x[], const GLint y[], void *values) +{ + int format_bytes = _mesa_get_format_bytes(rb->Format) / sizeof(GLfloat); + GLuint i; + + for (i = 0; i < count; i++) { + const void *src = rb->GetPointer(ctx, rb, x[i], y[i]); + + memcpy(values + i * format_bytes, src, format_bytes); + } +} + /* For the GL_RED/GL_RG/GL_RGB format/DataType combinations (and * GL_LUMINANCE/GL_INTENSITY?), the Put functions are a matter of * storing those initial components of the value per pixel into the @@ -1238,6 +1255,16 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) rb->PutMonoValues = put_mono_values_uint; break; + case MESA_FORMAT_RGBA_FLOAT32: + rb->GetRow = get_row_generic; + rb->GetValues = get_values_generic; + rb->PutRow = put_row_generic; + rb->PutRowRGB = NULL; + rb->PutMonoRow = put_mono_row_generic; + rb->PutValues = put_values_generic; + rb->PutMonoValues = put_mono_values_generic; + break; + default: break; } |