PreparedGraphicsObjects
-
class PreparedGraphicsObjects
Bases:
ReferenceCount
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
.Inheritance diagram
-
bool dequeue_geom(Geom *geom)
Removes a geom from the queued list of geoms to be prepared. Normally it is not necessary to call this, unless you change your mind about preparing it at the last minute, since the geom will automatically be dequeued and prepared at the next frame.
The return value is true if the geom is successfully dequeued, false if it had not been queued.
-
bool dequeue_index_buffer(GeomPrimitive *data)
Removes a buffer from the queued list of data arrays to be prepared. Normally it is not necessary to call this, unless you change your mind about preparing it at the last minute, since the data will automatically be dequeued and prepared at the next frame.
The return value is true if the buffer is successfully dequeued, false if it had not been queued.
-
bool dequeue_sampler(SamplerState const &sampler)
Removes a sampler from the queued list of samplers to be prepared. Normally it is not necessary to call this, unless you change your mind about preparing it at the last minute, since the sampler will automatically be dequeued and prepared at the next frame.
The return value is true if the sampler is successfully dequeued, false if it had not been queued.
-
bool dequeue_shader(Shader *shader)
Removes a shader from the queued list of shaders to be prepared. Normally it is not necessary to call this, unless you change your mind about preparing it at the last minute, since the shader will automatically be dequeued and prepared at the next frame.
The return value is true if the shader is successfully dequeued, false if it had not been queued.
-
bool dequeue_shader_buffer(ShaderBuffer *data)
Removes a buffer from the queued list of data arrays to be prepared. Normally it is not necessary to call this, unless you change your mind about preparing it at the last minute, since the data will automatically be dequeued and prepared at the next frame.
The return value is true if the buffer is successfully dequeued, false if it had not been queued.
-
bool dequeue_texture(Texture *tex)
Removes a texture from the queued list of textures to be prepared. Normally it is not necessary to call this, unless you change your mind about preparing it at the last minute, since the texture will automatically be dequeued and prepared at the next frame.
The return value is true if the texture is successfully dequeued, false if it had not been queued.
-
bool dequeue_vertex_buffer(GeomVertexArrayData *data)
Removes a buffer from the queued list of data arrays to be prepared. Normally it is not necessary to call this, unless you change your mind about preparing it at the last minute, since the data will automatically be dequeued and prepared at the next frame.
The return value is true if the buffer is successfully dequeued, false if it had not been queued.
-
void enqueue_geom(Geom *geom)
Indicates that a geom would like to be put on the list to be prepared when the GSG is next ready to do this (presumably at the next frame).
-
void enqueue_index_buffer(GeomPrimitive *data)
Indicates that a buffer would like to be put on the list to be prepared when the GSG is next ready to do this (presumably at the next frame).
-
void enqueue_sampler(SamplerState const &sampler)
Indicates that a sampler would like to be put on the list to be prepared when the GSG is next ready to do this (presumably at the next frame).
-
void enqueue_shader(Shader *shader)
Indicates that a shader would like to be put on the list to be prepared when the GSG is next ready to do this (presumably at the next frame).
-
void enqueue_shader_buffer(ShaderBuffer *data)
Indicates that a buffer would like to be put on the list to be prepared when the GSG is next ready to do this (presumably at the next frame).
-
void enqueue_texture(Texture *tex)
Indicates that a texture would like to be put on the list to be prepared when the GSG is next ready to do this (presumably at the next frame).
-
void enqueue_vertex_buffer(GeomVertexArrayData *data)
Indicates that a buffer would like to be put on the list to be prepared when the GSG is next ready to do this (presumably at the next frame).
-
std::size_t get_graphics_memory_limit(void) const
Returns the artificial cap on graphics memory that will be imposed on this GSG. See
set_graphics_memory_limit()
.
-
std::string const &get_name(void) const
Returns the name of the
PreparedGraphicsObjects
structure. This is an arbitrary name that serves mainly to uniquify the context for PStats reporting.
-
int get_num_prepared(void) const
Returns the number of objects of any kind that have already been prepared on this GSG.
-
int get_num_prepared_geoms(void) const
Returns the number of geoms that have already been prepared on this GSG.
-
int get_num_prepared_index_buffers(void) const
Returns the number of index buffers that have already been prepared on this GSG.
-
int get_num_prepared_samplers(void) const
Returns the number of samplers that have already been prepared on this GSG.
-
int get_num_prepared_shader_buffers(void) const
Returns the number of index buffers that have already been prepared on this GSG.
-
int get_num_prepared_shaders(void) const
Returns the number of shaders that have already been prepared on this GSG.
-
int get_num_prepared_textures(void) const
Returns the number of textures that have already been prepared on this GSG.
-
int get_num_prepared_vertex_buffers(void) const
Returns the number of vertex buffers that have already been prepared on this GSG.
-
int get_num_queued(void) const
Returns the number of objects of any kind that have been enqueued to be prepared on this GSG.
-
int get_num_queued_geoms(void) const
Returns the number of geoms that have been enqueued to be prepared on this GSG.
-
int get_num_queued_index_buffers(void) const
Returns the number of index buffers that have been enqueued to be prepared on this GSG.
-
int get_num_queued_samplers(void) const
Returns the number of samplers that have been enqueued to be prepared on this GSG.
-
int get_num_queued_shader_buffers(void) const
Returns the number of index buffers that have been enqueued to be prepared on this GSG.
-
int get_num_queued_shaders(void) const
Returns the number of shaders that have been enqueued to be prepared on this GSG.
-
int get_num_queued_textures(void) const
Returns the number of textures that have been enqueued to be prepared on this GSG.
-
int get_num_queued_vertex_buffers(void) const
Returns the number of vertex buffers that have been enqueued to be prepared on this GSG.
-
bool is_geom_prepared(Geom const *geom) const
Returns true if the vertex buffer has been prepared on this GSG, false otherwise.
-
bool is_geom_queued(Geom const *geom) const
Returns true if the geom has been queued on this GSG, false otherwise.
-
bool is_index_buffer_prepared(GeomPrimitive const *data) const
Returns true if the index buffer has been prepared on this GSG, false otherwise.
-
bool is_index_buffer_queued(GeomPrimitive const *data) const
Returns true if the index buffer has been queued on this GSG, false otherwise.
-
bool is_sampler_prepared(SamplerState const &sampler) const
Returns true if the sampler has been prepared on this GSG, false otherwise.
-
bool is_sampler_queued(SamplerState const &sampler) const
Returns true if the sampler has been queued on this GSG, false otherwise.
-
bool is_shader_buffer_prepared(ShaderBuffer const *data) const
Returns true if the index buffer has been prepared on this GSG, false otherwise.
-
bool is_shader_buffer_queued(ShaderBuffer const *data) const
Returns true if the index buffer has been queued on this GSG, false otherwise.
-
bool is_shader_prepared(Shader const *shader) const
Returns true if the shader has been prepared on this GSG, false otherwise.
-
bool is_shader_queued(Shader const *shader) const
Returns true if the shader has been queued on this GSG, false otherwise.
-
bool is_texture_prepared(Texture const *tex) const
Returns true if the texture has been prepared on this GSG, false otherwise.
-
bool is_texture_queued(Texture const *tex) const
Returns true if the texture has been queued on this GSG, false otherwise.
-
bool is_vertex_buffer_prepared(GeomVertexArrayData const *data) const
Returns true if the vertex buffer has been prepared on this GSG, false otherwise.
-
bool is_vertex_buffer_queued(GeomVertexArrayData const *data) const
Returns true if the vertex buffer has been queued on this GSG, false otherwise.
-
GeomContext *prepare_geom_now(Geom *geom, GraphicsStateGuardianBase *gsg)
Immediately creates a new
GeomContext
for the indicated geom and returns it. This assumes that theGraphicsStateGuardian
is the currently active rendering context and that it is ready to accept new geoms. If this is not necessarily the case, you should useenqueue_geom()
instead.Normally, this function is not called directly. Call
Geom::prepare_now()
instead.The
GeomContext
contains all of the pertinent information needed by the GSG to keep track of this one particular geom, and will exist as long as the geom is ready to be rendered.When either the Geom or the
PreparedGraphicsObjects
object destructs, theGeomContext
will be deleted.
-
IndexBufferContext *prepare_index_buffer_now(GeomPrimitive *data, GraphicsStateGuardianBase *gsg)
Immediately creates a new
IndexBufferContext
for the indicated data and returns it. This assumes that theGraphicsStateGuardian
is the currently active rendering context and that it is ready to accept new datas. If this is not necessarily the case, you should useenqueue_index_buffer()
instead.Normally, this function is not called directly. Call Data::prepare_now() instead.
The
IndexBufferContext
contains all of the pertinent information needed by the GSG to keep track of this one particular data, and will exist as long as the data is ready to be rendered.When either the Data or the
PreparedGraphicsObjects
object destructs, theIndexBufferContext
will be deleted.
-
SamplerContext *prepare_sampler_now(SamplerState const &sampler, GraphicsStateGuardianBase *gsg)
Immediately creates a new SamplerContext for the indicated sampler and returns it. This assumes that the
GraphicsStateGuardian
is the currently active rendering context and that it is ready to accept new samplers. If this is not necessarily the case, you should useenqueue_sampler()
instead.Normally, this function is not called directly. Call Sampler::prepare_now() instead.
The SamplerContext contains all of the pertinent information needed by the GSG to keep track of this one particular sampler, and will exist as long as the sampler is ready to be rendered.
When either the Sampler or the
PreparedGraphicsObjects
object destructs, the SamplerContext will be deleted.
-
BufferContext *prepare_shader_buffer_now(ShaderBuffer *data, GraphicsStateGuardianBase *gsg)
Immediately creates a new
BufferContext
for the indicated data and returns it. This assumes that theGraphicsStateGuardian
is the currently active rendering context and that it is ready to accept new datas. If this is not necessarily the case, you should useenqueue_shader_buffer()
instead.Normally, this function is not called directly. Call Data::prepare_now() instead.
The
BufferContext
contains all of the pertinent information needed by the GSG to keep track of this one particular data, and will exist as long as the data is ready to be rendered.When either the Data or the
PreparedGraphicsObjects
object destructs, theBufferContext
will be deleted.
-
ShaderContext *prepare_shader_now(Shader *shader, GraphicsStateGuardianBase *gsg)
Immediately creates a new
ShaderContext
for the indicated shader and returns it. This assumes that theGraphicsStateGuardian
is the currently active rendering context and that it is ready to accept new shaders. If this is not necessarily the case, you should useenqueue_shader()
instead.Normally, this function is not called directly. Call
Shader::prepare_now()
instead.The
ShaderContext
contains all of the pertinent information needed by the GSG to keep track of this one particular shader, and will exist as long as the shader is ready to be rendered.When either the Shader or the
PreparedGraphicsObjects
object destructs, theShaderContext
will be deleted.
-
TextureContext *prepare_texture_now(Texture *tex, int view, GraphicsStateGuardianBase *gsg)
Immediately creates a new
TextureContext
for the indicated texture and returns it. This assumes that theGraphicsStateGuardian
is the currently active rendering context and that it is ready to accept new textures. If this is not necessarily the case, you should useenqueue_texture()
instead.Normally, this function is not called directly. Call
Texture::prepare_now()
instead.The
TextureContext
contains all of the pertinent information needed by the GSG to keep track of this one particular texture, and will exist as long as the texture is ready to be rendered.When either the Texture or the
PreparedGraphicsObjects
object destructs, theTextureContext
will be deleted.
-
VertexBufferContext *prepare_vertex_buffer_now(GeomVertexArrayData *data, GraphicsStateGuardianBase *gsg)
Immediately creates a new
VertexBufferContext
for the indicated data and returns it. This assumes that theGraphicsStateGuardian
is the currently active rendering context and that it is ready to accept new datas. If this is not necessarily the case, you should useenqueue_vertex_buffer()
instead.Normally, this function is not called directly. Call Data::prepare_now() instead.
The
VertexBufferContext
contains all of the pertinent information needed by the GSG to keep track of this one particular data, and will exist as long as the data is ready to be rendered.When either the Data or the
PreparedGraphicsObjects
object destructs, theVertexBufferContext
will be deleted.
-
void release_all(void)
Releases all prepared objects of all kinds at once.
-
int release_all_geoms(void)
Releases all geoms at once. This will force them to be reloaded into geom memory for all GSG’s that share this object. Returns the number of geoms released.
-
int release_all_index_buffers(void)
Releases all datas at once. This will force them to be reloaded into data memory for all GSG’s that share this object. Returns the number of datas released.
-
int release_all_samplers(void)
Releases all samplers at once. This will force them to be reloaded for all GSG’s that share this object. Returns the number of samplers released.
-
int release_all_shader_buffers(void)
Releases all datas at once. This will force them to be reloaded into data memory for all GSG’s that share this object. Returns the number of datas released.
-
int release_all_shaders(void)
Releases all shaders at once. This will force them to be reloaded into shader memory for all GSG’s that share this object. Returns the number of shaders released.
-
int release_all_textures(void)
Releases all textures at once. This will force them to be reloaded into texture memory for all GSG’s that share this object. Returns the number of textures released.
-
int release_all_vertex_buffers(void)
Releases all datas at once. This will force them to be reloaded into data memory for all GSG’s that share this object. Returns the number of datas released.
-
void release_geom(GeomContext *gc)
Indicates that a geom context, created by a previous call to prepare_geom(), is no longer needed. The driver resources will not be freed until some GSG calls update(), indicating it is at a stage where it is ready to release geoms–this prevents conflicts from threading or multiple GSG’s sharing geoms (we have no way of knowing which graphics context is currently active, or what state it’s in, at the time release_geom is called).
-
void release_index_buffer(IndexBufferContext *ibc)
Indicates that a data context, created by a previous call to prepare_index_buffer(), is no longer needed. The driver resources will not be freed until some GSG calls update(), indicating it is at a stage where it is ready to release datas–this prevents conflicts from threading or multiple GSG’s sharing datas (we have no way of knowing which graphics context is currently active, or what state it’s in, at the time release_index_buffer is called).
-
void release_sampler(SamplerContext *sc)
-
void release_sampler(SamplerState const &sampler)
Indicates that a sampler context, created by a previous call to prepare_sampler(), is no longer needed. The driver resources will not be freed until some GSG calls update(), indicating it is at a stage where it is ready to release samplers.
Releases a sampler if it has already been prepared, or removes it from the preparation queue.
-
void release_shader(ShaderContext *sc)
Indicates that a shader context, created by a previous call to prepare_shader(), is no longer needed. The driver resources will not be freed until some GSG calls update(), indicating it is at a stage where it is ready to release shaders–this prevents conflicts from threading or multiple GSG’s sharing shaders (we have no way of knowing which graphics context is currently active, or what state it’s in, at the time release_shader is called).
-
void release_shader_buffer(BufferContext *bc)
Indicates that a data context, created by a previous call to prepare_shader_buffer(), is no longer needed. The driver resources will not be freed until some GSG calls update(), indicating it is at a stage where it is ready to release datas–this prevents conflicts from threading or multiple GSG’s sharing datas (we have no way of knowing which graphics context is currently active, or what state it’s in, at the time release_shader_buffer is called).
-
void release_texture(TextureContext *tc)
-
void release_texture(Texture *tex)
Indicates that a texture context, created by a previous call to prepare_texture(), is no longer needed. The driver resources will not be freed until some GSG calls update(), indicating it is at a stage where it is ready to release textures–this prevents conflicts from threading or multiple GSG’s sharing textures (we have no way of knowing which graphics context is currently active, or what state it’s in, at the time release_texture is called).
Releases a texture if it has already been prepared, or removes it from the preparation queue.
-
void release_vertex_buffer(VertexBufferContext *vbc)
Indicates that a data context, created by a previous call to prepare_vertex_buffer(), is no longer needed. The driver resources will not be freed until some GSG calls update(), indicating it is at a stage where it is ready to release datas–this prevents conflicts from threading or multiple GSG’s sharing datas (we have no way of knowing which graphics context is currently active, or what state it’s in, at the time release_vertex_buffer is called).
-
void set_graphics_memory_limit(std::size_t limit)
Sets an artificial cap on graphics memory that will be imposed on this GSG.
This limits the total amount of graphics memory, including texture memory and vertex buffer memory, that will be consumed by the GSG, regardless of whether the hardware claims to provide more graphics memory than this. It is useful to put a ceiling on graphics memory consumed, since some drivers seem to allow the application to consume more memory than the hardware can realistically support.
-
void show_graphics_memory_lru(std::ostream &out) const
Writes to the indicated ostream a report of how the various textures and vertex buffers are allocated in the LRU.
-
void show_residency_trackers(std::ostream &out) const
Writes to the indicated ostream a report of how the various textures and vertex buffers are allocated in the LRU.
-
bool dequeue_geom(Geom *geom)