[Mesa-dev] [PATCH 02/10] mesa: Add renderbuffer accessors for MESA_FORMAT_RGBA_FLOAT32.

Eric Anholt eric at anholt.net
Mon Apr 18 13:37:54 PDT 2011


---
 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



More information about the mesa-dev mailing list