Lumiera 0.pre.04~rc.1
»edit your freedom«
Loading...
Searching...
No Matches
buffer-metadata.hpp File Reference

Metadata for managing and accessing buffers. More...

Go to the source code of this file.

Description

Metadata for managing and accessing buffers.

The Lumiera Engine uses the Abstraction of an BufferProvider to handle various kinds of buffer organisation and access in a uniform way. Actually, buffers can be exposed and provided by several facilities, which might even be implemented through an external library. Thus the engine and the abstraction placed in between needs a common set of control data, to be able to expose the correct buffer for each request. Typically – and independent of the actual implementation – the following properties need to be tracked

  • that overall storage size available within the buffer
  • a pair of custom creator and destructor functions to use together with this buffer
  • an additional client key to distinguish otherwise otherwise identical client requests These three distinctions are applied in sequence, thus forming a type tree with 3 levels. Only the first distinguishing level (the size) is mandatory. The others are provided, because some of the foreseeable buffer providers allow to re-access the data placed into the buffer, by assigning an internally managed ID to the buffer. The most prominent example is the frame cache, which obviously needs to keep track of the buffers after the render engine is finished, while the engine code just accesses yet another buffer to place the results of calculations.

These additional distinctions and properties are associated with the help of the Buffer Descriptor, embedded into each BuffHandle. While the engine mostly uses these handles in the way of a pointer, the buffer descriptor acts as a configuration tag attached to the buffer access, allowing to re-access a context within the buffer provider implementation.

See also
buffer-provider.hpp
BufferMetadata_test
BufferProviderProtocol_test

Definition in file buffer-metadata.hpp.

#include "lib/error.hpp"
#include "lib/symbol.hpp"
#include "lib/hash-value.h"
#include "lib/util-foreach.hpp"
#include "include/logging.h"
#include "steam/streamtype.hpp"
#include "steam/engine/type-handler.hpp"
#include "steam/engine/buffer-local-tag.hpp"
#include "lib/nocopy.hpp"
#include <unordered_map>

Namespaces

namespace  steam
 Steam-Layer implementation namespace root.
 
namespace  steam::engine
 Lumiera's render engine core and operational control.
 
 
 
 

Typedefs

using Buff = StreamType::ImplFacade::DataBuffer
 

Enumerations

enum  BufferState {
  NIL ,
  FREE ,
  LOCKED ,
  EMITTED ,
  BLOCKED
}
 Buffer states usable within BufferProvider and stored within the metadata. More...
 

Classes

class  Key
 Description of a Buffer-"type". More...
 
class  Entry
 A complete metadata Entry, based on a Key. More...
 
class  Table
 (Hash)Table to store and manage buffer metadata. More...
 
class  BufferMetadata
 Registry for managing buffer metadata. More...
 

Functions

bool nontrivial (TypeHandler const &toVerify)
 
bool nontrivial (LocalTag const &toVerify)
 
template<typename VAL >
HashVal chainedHash (HashVal accumulatedHash, VAL changedValue)