From 3fd819aef8139761ce86cb8d763de83a11c81b33 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Thu, 29 Sep 2005 04:27:47 +0000 Subject: added _swrast_put_row() --- src/mesa/swrast/s_span.c | 34 ++++++++++++++++++++++++++++++++++ src/mesa/swrast/s_span.h | 5 +++++ 2 files changed, 39 insertions(+) (limited to 'src/mesa') diff --git a/src/mesa/swrast/s_span.c b/src/mesa/swrast/s_span.c index 38a7f95f273..a9745063d90 100644 --- a/src/mesa/swrast/s_span.c +++ b/src/mesa/swrast/s_span.c @@ -1474,3 +1474,37 @@ _swrast_get_values(GLcontext *ctx, struct gl_renderbuffer *rb, (GLubyte *) values + inStart * valueSize); } } + + +/** + * Wrapper for gl_renderbuffer::PutRow() which does clipping. + */ +void +_swrast_put_row(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, + const GLvoid *values, GLuint valueSize) +{ + GLint skip = 0; + + if (y < 0 || y >= rb->Height) + return; /* above or below */ + + if (x + (GLint) count <= 0 || x >= rb->Width) + return; /* entirely left or right */ + + if (x + count > rb->Width) { + /* right clip */ + GLint clip = x + count - rb->Width; + count -= clip; + } + + if (x < 0) { + /* left clip */ + skip = -x; + x = 0; + count -= skip; + } + + rb->PutRow(ctx, rb, count, x, y, + (const GLubyte *) values + skip * valueSize, NULL); +} diff --git a/src/mesa/swrast/s_span.h b/src/mesa/swrast/s_span.h index 1bba5aa53b3..0c853746b82 100644 --- a/src/mesa/swrast/s_span.h +++ b/src/mesa/swrast/s_span.h @@ -72,4 +72,9 @@ _swrast_get_values(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count, const GLint x[], const GLint y[], void *values, GLuint valueSize); +extern void +_swrast_put_row(GLcontext *ctx, struct gl_renderbuffer *rb, + GLuint count, GLint x, GLint y, + const GLvoid *values, GLuint valueSize); + #endif -- cgit v1.2.3