server_readpixels.c revision ad27e1d5e48ca41245120c331cc88b50464813ce
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
af8d59d05d72f134aeea62712f1286b369807d52vboxsynccrServerDispatchReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
febfe671adda070d044dced344f97b3971f2a660vboxsync const GLint bytes_per_row = READ_DATA( 40, GLint );
febfe671adda070d044dced344f97b3971f2a660vboxsync const int msg_len = sizeof(*rp) + bytes_per_row * height;
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if (crStateIsBufferBound(GL_PIXEL_PACK_BUFFER_ARB))
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync /*pixels are actually a pointer to location of 8byte network pointer in hgcm buffer
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync regardless of guest/host bitness we're using only 4lower bytes as there're no
af8d59d05d72f134aeea62712f1286b369807d52vboxsync pbo>4gb (yet?)
e761514762c8705557b347266d54ade68888537cvboxsync pbo_offset = (GLvoid*) ((uintptr_t) *((GLint*)pixels));
af8d59d05d72f134aeea62712f1286b369807d52vboxsync cr_server.head_spu->dispatch_table.ReadPixels(x, y, width, height,
af8d59d05d72f134aeea62712f1286b369807d52vboxsync /* Note: the ReadPixels data gets densely packed into the buffer
af8d59d05d72f134aeea62712f1286b369807d52vboxsync * (no skip pixels, skip rows, etc. It's up to the receiver (pack spu,
af8d59d05d72f134aeea62712f1286b369807d52vboxsync * tilesort spu, etc) to apply the real PixelStore packing parameters.
af8d59d05d72f134aeea62712f1286b369807d52vboxsync cr_server.head_spu->dispatch_table.ReadPixels(x, y, width, height,
af8d59d05d72f134aeea62712f1286b369807d52vboxsync /* <pixels> points to the 8-byte network pointer */
af8d59d05d72f134aeea62712f1286b369807d52vboxsync crMemcpy( &rp->pixels, pixels, sizeof(rp->pixels) );