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{
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_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)
e761514762c8705557b347266d54ade68888537cvboxsync packet_length += sizeof(GLint);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync else
af8d59d05d72f134aeea62712f1286b369807d52vboxsync packet_length += 32*32/8;
af8d59d05d72f134aeea62712f1286b369807d52vboxsync
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_GET_BUFFERED_POINTER(pc, packet_length );
af8d59d05d72f134aeea62712f1286b369807d52vboxsync WRITE_DATA_AI(int, nodata);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync if (nodata)
af8d59d05d72f134aeea62712f1286b369807d52vboxsync {
e761514762c8705557b347266d54ade68888537cvboxsync WRITE_DATA_AI(GLint, (GLint)(uintptr_t)mask);
af8d59d05d72f134aeea62712f1286b369807d52vboxsync }
af8d59d05d72f134aeea62712f1286b369807d52vboxsync else
af8d59d05d72f134aeea62712f1286b369807d52vboxsync {
af8d59d05d72f134aeea62712f1286b369807d52vboxsync crMemcpy( data_ptr, mask, 32*32/8 );
af8d59d05d72f134aeea62712f1286b369807d52vboxsync }
af8d59d05d72f134aeea62712f1286b369807d52vboxsync WRITE_OPCODE( pc, CR_POLYGONSTIPPLE_OPCODE );
2f44080df90cb90c1e524d97c8e327b40298f3c6vboxsync CR_UNLOCK_PACKER_CONTEXT(pc);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}