--- src/mesa/main/renderbuffer.c | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-)
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c index 4a4a917..a255ddd 100644 --- a/src/mesa/main/renderbuffer.c +++ b/src/mesa/main/renderbuffer.c @@ -113,6 +113,27 @@ 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. + */ +#ifdef TEXTURE_FLOAT_ENABLED + +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); + } +} + +#endif /* TEXTURE_FLOAT_ENABLED */ + /* 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 +1259,18 @@ _mesa_set_renderbuffer_accessors(struct gl_renderbuffer *rb) rb->PutMonoValues = put_mono_values_uint; break; +#ifdef TEXTURE_FLOAT_ENABLED + 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; +#endif + default: break; } -- 1.7.4.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev