- /* XXX someday we may put this code into a separate function and call
- * it with ctx->Driver.GetPolygonStipple().
- */
- if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
- /* Put/pack the stipple pattern into a PBO */
- GLubyte *buf;
- if (!_mesa_validate_pbo_access(2, &ctx->Pack, 32, 32, 1,
- GL_COLOR_INDEX, GL_BITMAP, dest)) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetPolygonStipple(bad PBO access)");
- return;
- }
- buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
- GL_WRITE_ONLY_ARB,
- ctx->Pack.BufferObj);
- if (!buf) {
- _mesa_error(ctx, GL_INVALID_OPERATION,
- "glGetPolygonStipple(PBO mapped)");
- return;
- }
- buf = ADD_POINTERS(buf, dest);
- _mesa_pack_polygon_stipple(ctx->PolygonStipple, buf, &ctx->Pack);
- ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
- ctx->Pack.BufferObj);
- }
- else {
- /* Put/pack the stipple pattern into user memory */
- _mesa_pack_polygon_stipple(ctx->PolygonStipple, dest, &ctx->Pack);
- }
+ dest = _mesa_map_validate_pbo_dest(ctx, 2,
+ &ctx->Pack, 32, 32, 1,
+ GL_COLOR_INDEX, GL_BITMAP, dest,
+ "glGetPolygonStipple");
+ if (!dest)
+ return;
+
+ _mesa_pack_polygon_stipple(ctx->PolygonStipple, dest, &ctx->Pack);
+
+ _mesa_unmap_pbo_dest(ctx, &ctx->Pack);