pack_stipple.c revision af8d59d05d72f134aeea62712f1286b369807d52
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync *
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "packer.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_opcodes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_mem.h"
af8d59d05d72f134aeea62712f1286b369807d52vboxsync#include "cr_glstate.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncvoid PACK_APIENTRY crPackPolygonStipple( const GLubyte *mask )
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync{
af8d59d05d72f134aeea62712f1286b369807d52vboxsync GET_PACKER_CONTEXT(pc);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync unsigned char *data_ptr;
af8d59d05d72f134aeea62712f1286b369807d52vboxsync int nodata = crStateIsBufferBound(GL_PIXEL_UNPACK_BUFFER_ARB);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync int packet_length = sizeof(int);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if (nodata)
af8d59d05d72f134aeea62712f1286b369807d52vboxsync packet_length += sizeof(uintptr_t);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync else
af8d59d05d72f134aeea62712f1286b369807d52vboxsync packet_length += 32*32/8;
af8d59d05d72f134aeea62712f1286b369807d52vboxsync
af8d59d05d72f134aeea62712f1286b369807d52vboxsync GET_BUFFERED_POINTER(pc, packet_length );
af8d59d05d72f134aeea62712f1286b369807d52vboxsync WRITE_DATA_AI(int, nodata);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if (nodata)
af8d59d05d72f134aeea62712f1286b369807d52vboxsync {
af8d59d05d72f134aeea62712f1286b369807d52vboxsync WRITE_DATA_AI(uintptr_t, (uintptr_t)mask);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync }
af8d59d05d72f134aeea62712f1286b369807d52vboxsync else
af8d59d05d72f134aeea62712f1286b369807d52vboxsync {
af8d59d05d72f134aeea62712f1286b369807d52vboxsync crMemcpy( data_ptr, mask, 32*32/8 );
af8d59d05d72f134aeea62712f1286b369807d52vboxsync }
af8d59d05d72f134aeea62712f1286b369807d52vboxsync WRITE_OPCODE( pc, CR_POLYGONSTIPPLE_OPCODE );
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}