KiCad PCB EDA Suite
|
Specialization of CACHED_CONTAINER that stores data in RAM. More...
#include <cached_container_ram.h>
Public Member Functions | |
CACHED_CONTAINER_RAM (unsigned int aSize=DEFAULT_SIZE) | |
~CACHED_CONTAINER_RAM () | |
Finish the vertices updates stage. | |
void | Map () override |
Finish the vertices updates stage. | |
void | Unmap () override |
Finish the vertices updates stage. | |
bool | IsMapped () const override |
Return true if vertex buffer is currently mapped. | |
unsigned int | GetBufferHandle () const override |
Return handle to the vertex buffer. | |
bool | IsCached () const override |
Return true if the container caches vertex data in RAM or video memory. | |
virtual void | SetItem (VERTEX_ITEM *aItem) override |
Clean up after adding an item. | |
virtual void | FinishItem () override |
Clean up after adding an item. | |
virtual VERTEX * | Allocate (unsigned int aSize) override |
Return allocated space for the requested number of vertices associated with the current item (set with SetItem()). | |
virtual void | Delete (VERTEX_ITEM *aItem) override |
Remove all data stored in the container and restores its original state. | |
virtual void | Clear () override |
Remove all data stored in the container and restores its original state. | |
virtual unsigned int | AllItemsSize () const |
VERTEX * | GetAllVertices () const |
Return pointer to the vertices stored in the container. | |
virtual VERTEX * | GetVertices (unsigned int aOffset) const |
Return vertices stored at the specific offset. | |
virtual unsigned int | GetSize () const |
Return amount of vertices currently stored in the container. | |
bool | IsDirty () const |
Return information about the container cache state. | |
void | SetDirty () |
Set the dirty flag, so vertices in the container are going to be reuploaded to the GPU on the next frame. | |
void | ClearDirty () |
Clear the dirty flag to prevent reuploading vertices to the GPU memory. | |
Static Public Member Functions | |
static VERTEX_CONTAINER * | MakeContainer (bool aCached) |
Return a pointer to a new container of an appropriate type. | |
Protected Types | |
typedef std::pair< unsigned int, unsigned int > | CHUNK |
< Maps size of free memory chunks to their offsets | |
typedef std::multimap< unsigned int, unsigned int > | FREE_CHUNK_MAP |
typedef std::set< VERTEX_ITEM * > | ITEMS |
List of all the stored items. | |
Protected Member Functions | |
bool | defragmentResize (unsigned int aNewSize) override |
Defragment the currently stored data and resizes the buffer. | |
bool | reallocate (unsigned int aSize) |
Resize the chunk that stores the current item to the given size. | |
void | defragment (VERTEX *aTarget) |
Transfer all stored data to a new buffer, removing empty spaces between the data chunks in the container. | |
void | mergeFreeChunks () |
Look for consecutive free memory chunks and merges them, decreasing fragmentation of memory. | |
int | getChunkSize (const CHUNK &aChunk) const |
Return the size of a chunk. | |
unsigned int | getChunkOffset (const CHUNK &aChunk) const |
Return the offset of a chunk. | |
void | addFreeChunk (unsigned int aOffset, unsigned int aSize) |
Add a chunk marked as a free space. | |
unsigned int | usedSpace () const |
Return size of the used memory space. | |
Protected Attributes | |
GLuint | m_verticesBuffer |
FREE_CHUNK_MAP | m_freeChunks |
Stored VERTEX_ITEMs. | |
ITEMS | m_items |
Currently modified item. | |
VERTEX_ITEM * | m_item |
Properties of currently modified chunk & item. | |
unsigned int | m_chunkSize |
unsigned int | m_chunkOffset |
Maximal vertex index number stored in the container. | |
unsigned int | m_maxIndex |
unsigned int | m_freeSpace |
Current container size, expressed in vertices. | |
unsigned int | m_currentSize |
Store the initial size, so it can be resized to this on Clear() | |
unsigned int | m_initialSize |
Actual storage memory. | |
VERTEX * | m_vertices |
bool | m_failed |
bool | m_dirty |
Default initial size of a container (expressed in vertices) | |
Static Protected Attributes | |
static constexpr unsigned int | DEFAULT_SIZE = 1048576 |
Private Member Functions | |
void | showFreeChunks () |
Debug & test functions. | |
void | showUsedChunks () |
void | test () |
Specialization of CACHED_CONTAINER that stores data in RAM.
This is mainly for video cards/drivers that do not cope well with video memory mapping.
Definition at line 45 of file cached_container_ram.h.
|
protectedinherited |
< Maps size of free memory chunks to their offsets
Definition at line 101 of file cached_container.h.
|
protectedinherited |
Definition at line 102 of file cached_container.h.
|
protectedinherited |
List of all the stored items.
Definition at line 105 of file cached_container.h.
CACHED_CONTAINER_RAM::CACHED_CONTAINER_RAM | ( | unsigned int | aSize = DEFAULT_SIZE | ) |
Definition at line 55 of file cached_container_ram.cpp.
References checkGlError(), KIGFX::VERTEX_CONTAINER::m_vertices, m_verticesBuffer, and KIGFX::VERTEX_SIZE.
CACHED_CONTAINER_RAM::~CACHED_CONTAINER_RAM | ( | ) |
Finish the vertices updates stage.
Definition at line 69 of file cached_container_ram.cpp.
References KIGFX::VERTEX_CONTAINER::m_vertices, and m_verticesBuffer.
|
protectedinherited |
Add a chunk marked as a free space.
Store size & offset of free chunks.
Definition at line 391 of file cached_container.cpp.
References KIGFX::VERTEX_CONTAINER::m_currentSize, KIGFX::CACHED_CONTAINER::m_freeChunks, and KIGFX::VERTEX_CONTAINER::m_freeSpace.
Referenced by KIGFX::CACHED_CONTAINER::Delete(), KIGFX::CACHED_CONTAINER::FinishItem(), and KIGFX::CACHED_CONTAINER::reallocate().
|
inlinevirtualinherited |
Reimplemented in KIGFX::CACHED_CONTAINER_GPU.
Definition at line 97 of file cached_container.h.
Referenced by KIGFX::GPU_CACHED_MANAGER::EndDrawing().
|
overridevirtualinherited |
Return allocated space for the requested number of vertices associated with the current item (set with SetItem()).
The allocated space is added at the end of the chunk used by the current item and may serve to store new vertices.
aSize | is the number of vertices to be allocated. |
bad_alloc | exception if allocation fails. |
Erase the data related to an item.
aItem | is the item to be erased. |
Implements KIGFX::VERTEX_CONTAINER.
Definition at line 111 of file cached_container.cpp.
References KIGFX::VERTEX_ITEM::GetSize(), KIGFX::CACHED_CONTAINER::IsMapped(), KIGFX::CACHED_CONTAINER::m_chunkOffset, KIGFX::CACHED_CONTAINER::m_chunkSize, KIGFX::VERTEX_CONTAINER::m_dirty, KIGFX::VERTEX_CONTAINER::m_failed, KIGFX::CACHED_CONTAINER::m_item, KIGFX::VERTEX_CONTAINER::m_vertices, KIGFX::CACHED_CONTAINER::reallocate(), KIGFX::VERTEX_ITEM::setSize(), KIGFX::CACHED_CONTAINER::showFreeChunks(), KIGFX::CACHED_CONTAINER::showUsedChunks(), and KIGFX::CACHED_CONTAINER::test().
|
overridevirtualinherited |
Remove all data stored in the container and restores its original state.
Implements KIGFX::VERTEX_CONTAINER.
Definition at line 193 of file cached_container.cpp.
References KIGFX::VERTEX_CONTAINER::m_currentSize, KIGFX::VERTEX_CONTAINER::m_failed, KIGFX::CACHED_CONTAINER::m_freeChunks, KIGFX::VERTEX_CONTAINER::m_freeSpace, KIGFX::CACHED_CONTAINER::m_items, and KIGFX::CACHED_CONTAINER::m_maxIndex.
|
inlineinherited |
Clear the dirty flag to prevent reuploading vertices to the GPU memory.
Definition at line 152 of file vertex_container.h.
References KIGFX::VERTEX_CONTAINER::m_dirty.
Referenced by KIGFX::GPU_CACHED_MANAGER::EndDrawing().
|
protectedinherited |
Transfer all stored data to a new buffer, removing empty spaces between the data chunks in the container.
aTarget | is the destination for the defragmented data. |
Definition at line 276 of file cached_container.cpp.
References KIGFX::VERTEX_ITEM::GetOffset(), KIGFX::VERTEX_ITEM::GetSize(), KIGFX::CACHED_CONTAINER::m_chunkOffset, KIGFX::CACHED_CONTAINER::m_item, KIGFX::CACHED_CONTAINER::m_items, KIGFX::CACHED_CONTAINER::m_maxIndex, KIGFX::VERTEX_CONTAINER::m_vertices, KIGFX::VERTEX_ITEM::setOffset(), KIGFX::VERTEX_CONTAINER::usedSpace(), and KIGFX::VERTEX_SIZE.
Referenced by defragmentResize(), and KIGFX::CACHED_CONTAINER_GPU::defragmentResizeMemcpy().
|
overrideprotectedvirtual |
Defragment the currently stored data and resizes the buffer.
aNewSize | is the new buffer vertex buffer size, expressed as the number of vertices. |
Implements KIGFX::CACHED_CONTAINER.
Definition at line 93 of file cached_container_ram.cpp.
References KIGFX::CACHED_CONTAINER::defragment(), KIGFX::VERTEX_CONTAINER::m_currentSize, KIGFX::VERTEX_CONTAINER::m_dirty, KIGFX::CACHED_CONTAINER::m_freeChunks, KIGFX::VERTEX_CONTAINER::m_freeSpace, KIGFX::VERTEX_CONTAINER::m_vertices, PROF_TIMER::msecs(), PROF_TIMER::Stop(), traceGalCachedContainer, KIGFX::VERTEX_CONTAINER::usedSpace(), and KIGFX::VERTEX_SIZE.
|
overridevirtualinherited |
Remove all data stored in the container and restores its original state.
Implements KIGFX::VERTEX_CONTAINER.
Definition at line 152 of file cached_container.cpp.
References KIGFX::CACHED_CONTAINER::addFreeChunk(), KIGFX::CACHED_CONTAINER::defragmentResize(), KIGFX::VERTEX_ITEM::GetOffset(), KIGFX::VERTEX_ITEM::GetSize(), KIGFX::VERTEX_CONTAINER::m_currentSize, KIGFX::VERTEX_CONTAINER::m_freeSpace, KIGFX::VERTEX_CONTAINER::m_initialSize, KIGFX::CACHED_CONTAINER::m_items, KIGFX::VERTEX_ITEM::setSize(), and KIGFX::CACHED_CONTAINER::test().
|
overridevirtualinherited |
Clean up after adding an item.
Reimplemented from KIGFX::VERTEX_CONTAINER.
Definition at line 79 of file cached_container.cpp.
References KIGFX::CACHED_CONTAINER::addFreeChunk(), KIGFX::VERTEX_ITEM::GetOffset(), KIGFX::VERTEX_ITEM::GetSize(), KIGFX::CACHED_CONTAINER::m_chunkOffset, KIGFX::CACHED_CONTAINER::m_chunkSize, KIGFX::CACHED_CONTAINER::m_item, KIGFX::CACHED_CONTAINER::m_items, KIGFX::CACHED_CONTAINER::m_maxIndex, and KIGFX::CACHED_CONTAINER::test().
|
inlineinherited |
Return pointer to the vertices stored in the container.
Definition at line 107 of file vertex_container.h.
References KIGFX::VERTEX_CONTAINER::m_vertices.
Referenced by KIGFX::GPU_NONCACHED_MANAGER::EndDrawing().
|
inlineoverridevirtual |
Return handle to the vertex buffer.
It might be negative if the buffer is not initialized.
Implements KIGFX::CACHED_CONTAINER.
Definition at line 67 of file cached_container_ram.h.
References m_verticesBuffer.
|
inlineprotectedinherited |
Return the offset of a chunk.
aChunk | is the chunk. |
Definition at line 157 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER::reallocate().
|
inlineprotectedinherited |
Return the size of a chunk.
aChunk | is the chunk. |
Definition at line 147 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER::reallocate(), and KIGFX::CACHED_CONTAINER::test().
|
inlinevirtualinherited |
Return amount of vertices currently stored in the container.
Reimplemented in KIGFX::NONCACHED_CONTAINER.
Definition at line 125 of file vertex_container.h.
References KIGFX::VERTEX_CONTAINER::m_currentSize.
Referenced by KIGFX::GPU_NONCACHED_MANAGER::EndDrawing().
|
inlinevirtualinherited |
Return vertices stored at the specific offset.
aOffset | is the offset. |
Definition at line 117 of file vertex_container.h.
References KIGFX::VERTEX_CONTAINER::m_vertices.
|
inlineoverridevirtualinherited |
Return true if the container caches vertex data in RAM or video memory.
Otherwise it is a single batch draw which is later discarded.
Implements KIGFX::VERTEX_CONTAINER.
Definition at line 52 of file cached_container.h.
|
inlineinherited |
Return information about the container cache state.
Definition at line 135 of file vertex_container.h.
References KIGFX::VERTEX_CONTAINER::m_dirty.
|
inlineoverridevirtual |
Return true if vertex buffer is currently mapped.
Prepare the container for vertices updates.
Implements KIGFX::CACHED_CONTAINER.
Definition at line 57 of file cached_container_ram.h.
|
staticinherited |
Return a pointer to a new container of an appropriate type.
Definition at line 42 of file vertex_container.cpp.
Referenced by KIGFX::VERTEX_MANAGER::VERTEX_MANAGER().
|
inlineoverridevirtual |
Finish the vertices updates stage.
Implements KIGFX::CACHED_CONTAINER.
Definition at line 52 of file cached_container_ram.h.
|
protectedinherited |
Look for consecutive free memory chunks and merges them, decreasing fragmentation of memory.
Definition at line 337 of file cached_container.cpp.
References KIGFX::CACHED_CONTAINER::m_freeChunks, and KIGFX::CACHED_CONTAINER::test().
|
protectedinherited |
Resize the chunk that stores the current item to the given size.
The current item has its offset adjusted after the call, and the new chunk parameters are stored in m_chunkOffset and m_chunkSize.
aSize | is the requested chunk size. |
Definition at line 212 of file cached_container.cpp.
References KIGFX::CACHED_CONTAINER::addFreeChunk(), KIGFX::CACHED_CONTAINER::defragmentResize(), KIGFX::CACHED_CONTAINER::getChunkOffset(), KIGFX::CACHED_CONTAINER::getChunkSize(), KIGFX::VERTEX_ITEM::GetSize(), KIGFX::CACHED_CONTAINER::IsMapped(), KIGFX::CACHED_CONTAINER::m_chunkOffset, KIGFX::CACHED_CONTAINER::m_chunkSize, KIGFX::VERTEX_CONTAINER::m_currentSize, KIGFX::CACHED_CONTAINER::m_freeChunks, KIGFX::VERTEX_CONTAINER::m_freeSpace, KIGFX::CACHED_CONTAINER::m_item, KIGFX::VERTEX_CONTAINER::m_vertices, KIGFX::VERTEX_ITEM::setOffset(), and KIGFX::VERTEX_SIZE.
Referenced by KIGFX::CACHED_CONTAINER::Allocate().
|
inlineinherited |
Set the dirty flag, so vertices in the container are going to be reuploaded to the GPU on the next frame.
Definition at line 144 of file vertex_container.h.
References KIGFX::VERTEX_CONTAINER::m_dirty.
|
overridevirtualinherited |
Clean up after adding an item.
Implements KIGFX::VERTEX_CONTAINER.
Definition at line 66 of file cached_container.cpp.
References KIGFX::VERTEX_ITEM::GetOffset(), KIGFX::VERTEX_ITEM::GetSize(), KIGFX::CACHED_CONTAINER::m_chunkOffset, KIGFX::CACHED_CONTAINER::m_chunkSize, and KIGFX::CACHED_CONTAINER::m_item.
|
privateinherited |
Debug & test functions.
Definition at line 401 of file cached_container.cpp.
Referenced by KIGFX::CACHED_CONTAINER::Allocate().
|
privateinherited |
Definition at line 406 of file cached_container.cpp.
Referenced by KIGFX::CACHED_CONTAINER::Allocate().
|
privateinherited |
Definition at line 411 of file cached_container.cpp.
References KIGFX::CACHED_CONTAINER::getChunkSize(), KIGFX::CACHED_CONTAINER::m_chunkSize, KIGFX::VERTEX_CONTAINER::m_currentSize, KIGFX::CACHED_CONTAINER::m_freeChunks, KIGFX::VERTEX_CONTAINER::m_freeSpace, KIGFX::CACHED_CONTAINER::m_item, and KIGFX::CACHED_CONTAINER::m_items.
Referenced by KIGFX::CACHED_CONTAINER::Allocate(), KIGFX::CACHED_CONTAINER::Delete(), KIGFX::CACHED_CONTAINER::FinishItem(), and KIGFX::CACHED_CONTAINER::mergeFreeChunks().
|
overridevirtual |
Finish the vertices updates stage.
Implements KIGFX::CACHED_CONTAINER.
Definition at line 78 of file cached_container_ram.cpp.
References checkGlError(), KIGFX::VERTEX_CONTAINER::m_dirty, KIGFX::CACHED_CONTAINER::m_maxIndex, KIGFX::VERTEX_CONTAINER::m_vertices, m_verticesBuffer, and KIGFX::VERTEX_SIZE.
|
inlineprotectedinherited |
Return size of the used memory space.
Definition at line 165 of file vertex_container.h.
References KIGFX::VERTEX_CONTAINER::m_currentSize, and KIGFX::VERTEX_CONTAINER::m_freeSpace.
Referenced by KIGFX::CACHED_CONTAINER::defragment(), KIGFX::CACHED_CONTAINER_GPU::defragmentResize(), defragmentResize(), and KIGFX::CACHED_CONTAINER_GPU::defragmentResizeMemcpy().
|
staticconstexprprotectedinherited |
Definition at line 187 of file vertex_container.h.
|
protectedinherited |
Maximal vertex index number stored in the container.
Definition at line 178 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Allocate(), KIGFX::CACHED_CONTAINER::defragment(), KIGFX::CACHED_CONTAINER_GPU::defragmentResize(), KIGFX::CACHED_CONTAINER::FinishItem(), KIGFX::CACHED_CONTAINER::reallocate(), and KIGFX::CACHED_CONTAINER::SetItem().
|
protectedinherited |
Definition at line 177 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Allocate(), KIGFX::CACHED_CONTAINER::FinishItem(), KIGFX::CACHED_CONTAINER::reallocate(), KIGFX::CACHED_CONTAINER::SetItem(), and KIGFX::CACHED_CONTAINER::test().
|
protectedinherited |
Store the initial size, so it can be resized to this on Clear()
Definition at line 174 of file vertex_container.h.
Referenced by KIGFX::CACHED_CONTAINER::addFreeChunk(), KIGFX::NONCACHED_CONTAINER::Allocate(), KIGFX::CACHED_CONTAINER_GPU::CACHED_CONTAINER_GPU(), KIGFX::CACHED_CONTAINER::Clear(), KIGFX::NONCACHED_CONTAINER::Clear(), KIGFX::CACHED_CONTAINER_GPU::defragmentResize(), defragmentResize(), KIGFX::CACHED_CONTAINER_GPU::defragmentResizeMemcpy(), KIGFX::CACHED_CONTAINER::Delete(), KIGFX::VERTEX_CONTAINER::GetSize(), KIGFX::CACHED_CONTAINER::reallocate(), KIGFX::CACHED_CONTAINER::test(), and KIGFX::VERTEX_CONTAINER::usedSpace().
|
protectedinherited |
Default initial size of a container (expressed in vertices)
Definition at line 184 of file vertex_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Allocate(), KIGFX::VERTEX_CONTAINER::ClearDirty(), defragmentResize(), KIGFX::VERTEX_CONTAINER::IsDirty(), KIGFX::VERTEX_CONTAINER::SetDirty(), and Unmap().
|
protectedinherited |
Definition at line 183 of file vertex_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Allocate(), and KIGFX::CACHED_CONTAINER::Clear().
|
protectedinherited |
Stored VERTEX_ITEMs.
Definition at line 168 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER::addFreeChunk(), KIGFX::CACHED_CONTAINER::CACHED_CONTAINER(), KIGFX::CACHED_CONTAINER::Clear(), KIGFX::CACHED_CONTAINER_GPU::defragmentResize(), defragmentResize(), KIGFX::CACHED_CONTAINER_GPU::defragmentResizeMemcpy(), KIGFX::CACHED_CONTAINER::mergeFreeChunks(), KIGFX::CACHED_CONTAINER::reallocate(), and KIGFX::CACHED_CONTAINER::test().
|
protectedinherited |
Current container size, expressed in vertices.
Definition at line 171 of file vertex_container.h.
Referenced by KIGFX::CACHED_CONTAINER::addFreeChunk(), KIGFX::NONCACHED_CONTAINER::Allocate(), KIGFX::CACHED_CONTAINER::Clear(), KIGFX::NONCACHED_CONTAINER::Clear(), KIGFX::CACHED_CONTAINER_GPU::defragmentResize(), defragmentResize(), KIGFX::CACHED_CONTAINER_GPU::defragmentResizeMemcpy(), KIGFX::CACHED_CONTAINER::Delete(), KIGFX::CACHED_CONTAINER::reallocate(), KIGFX::CACHED_CONTAINER::test(), and KIGFX::VERTEX_CONTAINER::usedSpace().
|
protectedinherited |
Actual storage memory.
Definition at line 177 of file vertex_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Delete().
|
protectedinherited |
Properties of currently modified chunk & item.
Definition at line 174 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Allocate(), KIGFX::CACHED_CONTAINER::defragment(), KIGFX::CACHED_CONTAINER_GPU::defragmentResize(), KIGFX::CACHED_CONTAINER::FinishItem(), KIGFX::CACHED_CONTAINER::reallocate(), KIGFX::CACHED_CONTAINER::SetItem(), and KIGFX::CACHED_CONTAINER::test().
|
protectedinherited |
Currently modified item.
Definition at line 171 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER_GPU::AllItemsSize(), KIGFX::CACHED_CONTAINER::Clear(), KIGFX::CACHED_CONTAINER::defragment(), KIGFX::CACHED_CONTAINER_GPU::defragmentResize(), KIGFX::CACHED_CONTAINER::Delete(), KIGFX::CACHED_CONTAINER::FinishItem(), and KIGFX::CACHED_CONTAINER::test().
|
protectedinherited |
Definition at line 181 of file cached_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Clear(), KIGFX::CACHED_CONTAINER::defragment(), KIGFX::CACHED_CONTAINER::FinishItem(), and Unmap().
|
protectedinherited |
Definition at line 180 of file vertex_container.h.
Referenced by KIGFX::CACHED_CONTAINER::Allocate(), KIGFX::NONCACHED_CONTAINER::Allocate(), CACHED_CONTAINER_RAM(), KIGFX::CACHED_CONTAINER::defragment(), defragmentResize(), KIGFX::VERTEX_CONTAINER::GetAllVertices(), KIGFX::VERTEX_CONTAINER::GetVertices(), KIGFX::CACHED_CONTAINER_GPU::Map(), KIGFX::NONCACHED_CONTAINER::NONCACHED_CONTAINER(), KIGFX::CACHED_CONTAINER::reallocate(), KIGFX::CACHED_CONTAINER_GPU::Unmap(), Unmap(), ~CACHED_CONTAINER_RAM(), and KIGFX::NONCACHED_CONTAINER::~NONCACHED_CONTAINER().
|
protected |
Definition at line 82 of file cached_container_ram.h.
Referenced by CACHED_CONTAINER_RAM(), GetBufferHandle(), Unmap(), and ~CACHED_CONTAINER_RAM().