HDK
|
#include <bufferSource.h>
Public Member Functions | |
HdBufferSource () | |
virtual HD_API | ~HdBufferSource () |
virtual TfToken const & | GetName () const =0 |
Return the name of this buffer source. More... | |
virtual void | GetBufferSpecs (HdBufferSpecVector *specs) const =0 |
virtual HD_API size_t | ComputeHash () const |
Computes and returns a hash value for the underlying data. More... | |
virtual bool | Resolve ()=0 |
virtual void const * | GetData () const =0 |
Following interfaces will be called after Resolve. More... | |
virtual HdTupleType | GetTupleType () const =0 |
Returns the data type and count (array size) for this buffer source. More... | |
virtual size_t | GetNumElements () const =0 |
bool | IsResolved () const |
Returns true it this computation has already been resolved. More... | |
bool | HasResolveError () const |
Returns true if an error occurred during resolve. More... | |
HD_API bool | IsValid () const |
Chained Buffers | |
Buffer sources may be daisy-chained together. Pre-chained buffer sources typically represent sources that are inputs to computed buffer sources (e.g. coarse vertex privmar data needing to be quadrangulated or refined) and will be scheduled to be resolved along with their owning buffer sources. Post-chained buffer sources typically represent additional results produced by a computation (e.g. primitive param data computed along with index buffer data) and will be scheduled to be committed along with their owning buffer sources. | |
virtual HD_API bool | HasPreChainedBuffer () const |
Returns true if this buffer has a pre-chained buffer. More... | |
virtual HD_API HdBufferSourceSharedPtr | GetPreChainedBuffer () const |
Returns the pre-chained buffer. More... | |
virtual HD_API bool | HasChainedBuffer () const |
Returns true if this buffer has any chained buffer(s) More... | |
virtual HD_API HdBufferSourceSharedPtrVector | GetChainedBuffers () const |
Returns the vector of chained buffers. More... | |
Protected Member Functions | |
void | _SetResolved () |
void | _SetResolveError () |
bool | _TryLock () |
virtual bool | _CheckValid () const =0 |
A transient buffer of data that has not yet been committed.
HdBufferSource is an abstract interface class, to be registered to the resource registry with the buffer array range that specifies the destination resource.
Definition at line 55 of file bufferSource.h.
|
inline |
Definition at line 58 of file bufferSource.h.
|
virtual |
|
protectedpure virtual |
Checks the validity of the source buffer. This function is called by IsValid() to do the real checking.
Should only be implemented in classes at leafs of the class hierarchy (Please place common validation code in a new non-virtual method)
This code should return false:
The resolve step requires a 'source' buffer and that buffer is invalid.
If returning false, the buffer will not be registered with the resource registry. AddBufferSpec and Resolve will not be called
Implemented in HdVtBufferSource, HdStExtCompCpuComputation, HdStExtCompPrimvarBufferSource, HdStExtCompGpuPrimvarBufferSource, HdSt_SmoothNormalsComputationCPU, and HdSt_FlatNormalsComputationCPU.
|
inlineprotected |
Marks this buffer source as resolved. It has to be called at the end of Resolve on concrete implementations.
Definition at line 149 of file bufferSource.h.
|
inlineprotected |
Called during Resolve() to indicate an unrecoverable failure occurred and the results of the computation can not be used. Further calls to Resolve() will not lead to success.
This is different from Resolve() returning false, which indicates that additional calls to Resolve() will eventually lead to success.
This is also later in the pipeline than IsValid, which checks that the buffer is setup such that Resolve() can be successful.
Definition at line 163 of file bufferSource.h.
|
inlineprotected |
Non-blocking lock acquisition. If no one else is resolving this buffer source, returns true. In that case the caller needs to call _SetResolved at the end of computation. It returns false if anyone else has already acquired lock.
Definition at line 173 of file bufferSource.h.
|
virtual |
Computes and returns a hash value for the underlying data.
Reimplemented in HdNullBufferSource, HdComputedBufferSource, HdStExtCompPrimvarBufferSource, and HdStExtCompGpuPrimvarBufferSource.
|
pure virtual |
Add the buffer spec for this buffer source into given bufferspec vector. note: buffer specs has to be determined before the source resolution.
Implemented in HdNullBufferSource, HdVtBufferSource, HdStExtCompPrimvarBufferSource, HdStExtCompGpuPrimvarBufferSource, HdSt_SmoothNormalsComputationCPU, and HdSt_FlatNormalsComputationCPU.
|
virtual |
Returns the vector of chained buffers.
|
pure virtual |
Following interfaces will be called after Resolve.
Returns the raw pointer to the underlying data.
Implemented in HdNullBufferSource, HdComputedBufferSource, HdVtBufferSource, and HdStExtCompPrimvarBufferSource.
|
pure virtual |
Return the name of this buffer source.
Implemented in HdNullBufferSource, HdComputedBufferSource, HdVtBufferSource, HdStExtCompCpuComputation, HdStExtCompPrimvarBufferSource, HdSt_SmoothNormalsComputationCPU, HdSt_FlatNormalsComputationCPU, and HdStExtCompGpuPrimvarBufferSource.
|
pure virtual |
Returns the number of elements (e.g. VtVec3dArray().GetLength()) from the source array.
Implemented in HdNullBufferSource, HdComputedBufferSource, HdVtBufferSource, HdStExtCompCpuComputation, HdStExtCompPrimvarBufferSource, and HdStExtCompGpuPrimvarBufferSource.
|
virtual |
Returns the pre-chained buffer.
|
pure virtual |
Returns the data type and count (array size) for this buffer source.
Implemented in HdNullBufferSource, HdComputedBufferSource, HdVtBufferSource, HdStExtCompPrimvarBufferSource, and HdStExtCompGpuPrimvarBufferSource.
|
virtual |
Returns true if this buffer has any chained buffer(s)
|
virtual |
Returns true if this buffer has a pre-chained buffer.
|
inline |
Returns true if an error occurred during resolve.
Definition at line 102 of file bufferSource.h.
|
inline |
Returns true it this computation has already been resolved.
Definition at line 97 of file bufferSource.h.
HD_API bool HdBufferSource::IsValid | ( | ) | const |
Checks the validity of the source buffer. The function should be called to determine if AddBufferSpec() and Resolve() would return valid results.
|
pure virtual |
Prepare the access of GetData(). This process may include some computations (e.g. cpu smooth normals). Note: Resolve may be called in parallel from multiple threads across buffer sources, so be careful if it uses static/shared states among objects. Returns true if it resolved. If the buffer source has to wait some results of other buffer sources, or the buffer source is being resolved by other threads, it returns false.
Implemented in HdVtBufferSource, HdStExtCompCpuComputation, HdStExtCompPrimvarBufferSource, HdSt_SmoothNormalsComputationCPU, HdSt_FlatNormalsComputationCPU, and HdStExtCompGpuPrimvarBufferSource.