panda3d/panda/src/gobj/preparedGraphicsObjects.h
2004-03-20 02:09:49 +00:00

93 lines
3.1 KiB
C++

// Filename: preparedGraphicsObjects.h
// Created by: drose (19Feb04)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
//
// All use of this software is subject to the terms of the Panda 3d
// Software license. You should have received a copy of this license
// along with this source code; you will also find a current copy of
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
//
// To contact the maintainers of this program write to
// panda3d-general@lists.sourceforge.net .
//
////////////////////////////////////////////////////////////////////
#ifndef PREPAREDGRAPHICSOBJECTS_H
#define PREPAREDGRAPHICSOBJECTS_H
#include "pandabase.h"
#include "referenceCount.h"
#include "texture.h"
#include "pStatCollector.h"
#include "pset.h"
#include "pmutex.h"
class TextureContext;
class GeomContext;
class GraphicsStateGuardianBase;
////////////////////////////////////////////////////////////////////
// Class : PreparedGraphicsObjects
// Description : A table of objects that are saved within the graphics
// context for reference by handle later. Generally,
// this represents things like OpenGL texture objects or
// display lists (or their equivalent on other
// platforms).
//
// This object simply records the pointers to the
// context objects created by the individual GSG's;
// these context objects will contain enough information
// to reference or release the actual object stored
// within the graphics context.
//
// These tables may potentially be shared between
// related graphics contexts, hence their storage here
// in a separate object rather than as a part of the
// GraphicsStateGuardian.
////////////////////////////////////////////////////////////////////
class EXPCL_PANDA PreparedGraphicsObjects : public ReferenceCount {
public:
PreparedGraphicsObjects();
~PreparedGraphicsObjects();
void enqueue_texture(Texture *tex);
bool dequeue_texture(Texture *tex);
void release_texture(TextureContext *tc);
int release_all_textures();
TextureContext *prepare_texture_now(Texture *tex, GraphicsStateGuardianBase *gsg);
void enqueue_geom(Geom *geom);
bool dequeue_geom(Geom *geom);
void release_geom(GeomContext *gc);
int release_all_geoms();
GeomContext *prepare_geom_now(Geom *geom, GraphicsStateGuardianBase *gsg);
void update(GraphicsStateGuardianBase *gsg);
private:
typedef pset<TextureContext *> Textures;
typedef pset< PT(Texture) > EnqueuedTextures;
typedef pset<GeomContext *> Geoms;
typedef pset< PT(Geom) > EnqueuedGeoms;
Mutex _lock;
Textures _prepared_textures, _released_textures;
EnqueuedTextures _enqueued_textures;
Geoms _prepared_geoms, _released_geoms;
EnqueuedGeoms _enqueued_geoms;
static PStatCollector _total_texusage_pcollector;
friend class GraphicsStateGuardian;
};
#include "preparedGraphicsObjects.I"
#endif