cr_bufferobject.h revision bf144aab354eaec8ee22b16b1c138f47f38b7244
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#ifndef CR_STATE_BUFFEROBJECT_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#define CR_STATE_BUFFEROBJECT_H
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "cr_hash.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#include "state/cr_statetypes.h"
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncextern "C" {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue dirty[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue arrayBinding[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue elementsBinding[CR_MAX_BITARRAY];
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRBufferObjectBits;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/*
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Buffer object, like a texture object, but encapsulates arbitrary
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * data (vertex, image, etc).
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLuint refCount;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLuint name;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum usage;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLenum access;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLuint size; /* buffer size in bytes */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLvoid *pointer; /* only valid while buffer is mapped */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLvoid *data; /* the buffer data, if retainBufferData is true */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRbitvalue dirty[CR_MAX_BITARRAY]; /* dirty data or state */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLintptrARB dirtyStart, dirtyLength; /* dirty region */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRBufferObject;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsynctypedef struct {
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync GLboolean retainBufferData; /* should state tracker retain buffer data? */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRBufferObject *arrayBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRBufferObject *elementsBuffer;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRBufferObject *nullBuffer; /* name = 0 */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync CRHashTable *buffers;
bf144aab354eaec8ee22b16b1c138f47f38b7244vboxsync
bf144aab354eaec8ee22b16b1c138f47f38b7244vboxsync GLboolean bResyncNeeded;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync} CRBufferObjectState;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#ifdef __cplusplus
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync}
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync#endif /* CR_STATE_BUFFEROBJECT_H */