On Sun, 18 Dec 2011 20:08:13 -0700, Brian Paul <bri...@vmware.com> wrote: > Use format pack/unpack functions instead of deprecated renderbuffer > GetRow/PutRow functions. > --- > src/mesa/swrast/s_stencil.c | 31 ++++++++++++++++++++++++++----- > 1 files changed, 26 insertions(+), 5 deletions(-) > > diff --git a/src/mesa/swrast/s_stencil.c b/src/mesa/swrast/s_stencil.c > index 17b3b12..1d78e97 100644 > --- a/src/mesa/swrast/s_stencil.c > +++ b/src/mesa/swrast/s_stencil.c
> /** > + * Return the address of a stencil value in a renderbuffer. > + */ > +static inline GLubyte * > +get_stencil_address(struct gl_renderbuffer *rb, GLint x, GLint y) > +{ > + const GLint bpp = _mesa_get_format_bytes(rb->Format); > + const GLint rowStride = rb->RowStride * bpp; > + assert(rb->Data); > + return (GLubyte *) rb->Data + y * rowStride + x * bpp; > +} > + > + > + > +/** > * Apply the given stencil operator to the array of stencil values. > * Don't touch stencil[i] if mask[i] is zero. > * Input: n - size of stencil array > @@ -1075,6 +1090,8 @@ _swrast_read_stencil_span(struct gl_context *ctx, > struct gl_renderbuffer *rb, > GLint n, GLint x, GLint y, GLubyte stencil[]) > { > GLubyte *src; > + const GLuint bpp = _mesa_get_format_bytes(rb->Format); > + const GLuint rowStride = rb->RowStride * bpp; > > if (y < 0 || y >= (GLint) rb->Height || > x + n <= 0 || x >= (GLint) rb->Width) { > @@ -1096,7 +1113,7 @@ _swrast_read_stencil_span(struct gl_context *ctx, > struct gl_renderbuffer *rb, > return; > } > > - src = (GLubyte *) rb->Data + y * rb->RowStride +x; > + src = (GLubyte *) rb->Data + y * rowStride + x * bpp; > _mesa_unpack_ubyte_stencil_row(rb->Format, n, src, stencil); > } Don't you want to just reuse get_stencil_address here? > @@ -1115,9 +1132,10 @@ _swrast_write_stencil_span(struct gl_context *ctx, > GLint n, GLint x, GLint y, > const GLubyte stencil[] ) > { > struct gl_framebuffer *fb = ctx->DrawBuffer; > - struct gl_renderbuffer *rb = fb->_StencilBuffer; > + struct gl_renderbuffer *rb = fb->Attachment[BUFFER_STENCIL].Renderbuffer; > const GLuint stencilMax = (1 << fb->Visual.stencilBits) - 1; > const GLuint stencilMask = ctx->Stencil.WriteMask[0]; > + GLubyte *stencilBuf; > > if (y < 0 || y >= (GLint) rb->Height || > x + n <= 0 || x >= (GLint) rb->Width) { > @@ -1138,19 +1156,22 @@ _swrast_write_stencil_span(struct gl_context *ctx, > GLint n, GLint x, GLint y, > return; > } > > + stencilBuf = get_stencil_address(rb, x, y); > + > if ((stencilMask & stencilMax) != stencilMax) { > /* need to apply writemask */ > GLubyte destVals[MAX_WIDTH], newVals[MAX_WIDTH]; > GLint i; > - rb->GetRow(ctx, rb, n, x, y, destVals); > + > + _mesa_unpack_ubyte_stencil_row(rb->Format, n, stencilBuf, destVals); > for (i = 0; i < n; i++) { > newVals[i] > = (stencil[i] & stencilMask) | (destVals[i] & ~stencilMask); > } > - rb->PutRow(ctx, rb, n, x, y, newVals, NULL); > + _mesa_pack_ubyte_stencil_row(rb->Format, n, destVals, stencilBuf); s/destVals/newVals/ ?
pgpnEjNvJaQJt.pgp
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev