diff options
Diffstat (limited to 'intern/cycles/render/attribute.h')
-rw-r--r-- | intern/cycles/render/attribute.h | 300 |
1 files changed, 151 insertions, 149 deletions
diff --git a/intern/cycles/render/attribute.h b/intern/cycles/render/attribute.h index ed9e9fe76d6..ebab0fe7f88 100644 --- a/intern/cycles/render/attribute.h +++ b/intern/cycles/render/attribute.h @@ -37,8 +37,8 @@ struct Transform; /* Attributes for voxels are images */ struct VoxelAttribute { - ImageManager *manager; - int slot; + ImageManager *manager; + int slot; }; /* Attribute @@ -47,114 +47,116 @@ struct VoxelAttribute { * Supported types: Float, Color, Vector, Normal, Point */ class Attribute { -public: - ustring name; - AttributeStandard std; - - TypeDesc type; - vector<char> buffer; - AttributeElement element; - uint flags; /* enum AttributeFlag */ - - Attribute() {} - ~Attribute(); - void set(ustring name, TypeDesc type, AttributeElement element); - void resize(Mesh *mesh, AttributePrimitive prim, bool reserve_only); - void resize(size_t num_elements); - - size_t data_sizeof() const; - size_t element_size(Mesh *mesh, AttributePrimitive prim) const; - size_t buffer_size(Mesh *mesh, AttributePrimitive prim) const; - - char *data() - { - return (buffer.size())? &buffer[0]: NULL; - } - float2 *data_float2() - { - assert(data_sizeof() == sizeof(float2)); - return (float2*)data(); - } - float3 *data_float3() - { - assert(data_sizeof() == sizeof(float3)); - return (float3*)data(); - } - float4 *data_float4() - { - assert(data_sizeof() == sizeof(float4)); - return (float4*)data(); - } - float *data_float() - { - assert(data_sizeof() == sizeof(float)); - return (float*)data(); - } - uchar4 *data_uchar4() - { - assert(data_sizeof() == sizeof(uchar4)); - return (uchar4*)data(); - } - Transform *data_transform() - { - assert(data_sizeof() == sizeof(Transform)); - return (Transform*)data(); - } - VoxelAttribute *data_voxel() - { - assert(data_sizeof() == sizeof(VoxelAttribute)); - return ( VoxelAttribute*)data(); - } - - const char *data() const - { - return (buffer.size())? &buffer[0]: NULL; - } - const float2 *data_float2() const - { - assert(data_sizeof() == sizeof(float2)); - return (const float2*)data(); - } - const float3 *data_float3() const - { - assert(data_sizeof() == sizeof(float3)); - return (const float3*)data(); - } - const float4 *data_float4() const - { - assert(data_sizeof() == sizeof(float4)); - return (const float4*)data(); - } - const float *data_float() const - { - assert(data_sizeof() == sizeof(float)); - return (const float*)data(); - } - const Transform *data_transform() const - { - assert(data_sizeof() == sizeof(Transform)); - return (const Transform*)data(); - } - const VoxelAttribute *data_voxel() const - { - assert(data_sizeof() == sizeof(VoxelAttribute)); - return (const VoxelAttribute*)data(); - } - - void zero_data(void* dst); - void add_with_weight(void* dst, void* src, float weight); - - void add(const float& f); - void add(const float2& f); - void add(const float3& f); - void add(const uchar4& f); - void add(const Transform& f); - void add(const VoxelAttribute& f); - void add(const char *data); - - static bool same_storage(TypeDesc a, TypeDesc b); - static const char *standard_name(AttributeStandard std); - static AttributeStandard name_standard(const char *name); + public: + ustring name; + AttributeStandard std; + + TypeDesc type; + vector<char> buffer; + AttributeElement element; + uint flags; /* enum AttributeFlag */ + + Attribute() + { + } + ~Attribute(); + void set(ustring name, TypeDesc type, AttributeElement element); + void resize(Mesh *mesh, AttributePrimitive prim, bool reserve_only); + void resize(size_t num_elements); + + size_t data_sizeof() const; + size_t element_size(Mesh *mesh, AttributePrimitive prim) const; + size_t buffer_size(Mesh *mesh, AttributePrimitive prim) const; + + char *data() + { + return (buffer.size()) ? &buffer[0] : NULL; + } + float2 *data_float2() + { + assert(data_sizeof() == sizeof(float2)); + return (float2 *)data(); + } + float3 *data_float3() + { + assert(data_sizeof() == sizeof(float3)); + return (float3 *)data(); + } + float4 *data_float4() + { + assert(data_sizeof() == sizeof(float4)); + return (float4 *)data(); + } + float *data_float() + { + assert(data_sizeof() == sizeof(float)); + return (float *)data(); + } + uchar4 *data_uchar4() + { + assert(data_sizeof() == sizeof(uchar4)); + return (uchar4 *)data(); + } + Transform *data_transform() + { + assert(data_sizeof() == sizeof(Transform)); + return (Transform *)data(); + } + VoxelAttribute *data_voxel() + { + assert(data_sizeof() == sizeof(VoxelAttribute)); + return (VoxelAttribute *)data(); + } + + const char *data() const + { + return (buffer.size()) ? &buffer[0] : NULL; + } + const float2 *data_float2() const + { + assert(data_sizeof() == sizeof(float2)); + return (const float2 *)data(); + } + const float3 *data_float3() const + { + assert(data_sizeof() == sizeof(float3)); + return (const float3 *)data(); + } + const float4 *data_float4() const + { + assert(data_sizeof() == sizeof(float4)); + return (const float4 *)data(); + } + const float *data_float() const + { + assert(data_sizeof() == sizeof(float)); + return (const float *)data(); + } + const Transform *data_transform() const + { + assert(data_sizeof() == sizeof(Transform)); + return (const Transform *)data(); + } + const VoxelAttribute *data_voxel() const + { + assert(data_sizeof() == sizeof(VoxelAttribute)); + return (const VoxelAttribute *)data(); + } + + void zero_data(void *dst); + void add_with_weight(void *dst, void *src, float weight); + + void add(const float &f); + void add(const float2 &f); + void add(const float3 &f); + void add(const uchar4 &f); + void add(const Transform &f); + void add(const VoxelAttribute &f); + void add(const char *data); + + static bool same_storage(TypeDesc a, TypeDesc b); + static const char *standard_name(AttributeStandard std); + static AttributeStandard name_standard(const char *name); }; /* Attribute Set @@ -162,29 +164,29 @@ public: * Set of attributes on a mesh. */ class AttributeSet { -public: - Mesh *triangle_mesh; - Mesh *curve_mesh; - Mesh *subd_mesh; - list<Attribute> attributes; + public: + Mesh *triangle_mesh; + Mesh *curve_mesh; + Mesh *subd_mesh; + list<Attribute> attributes; - AttributeSet(); - ~AttributeSet(); + AttributeSet(); + ~AttributeSet(); - Attribute *add(ustring name, TypeDesc type, AttributeElement element); - Attribute *find(ustring name) const; - void remove(ustring name); + Attribute *add(ustring name, TypeDesc type, AttributeElement element); + Attribute *find(ustring name) const; + void remove(ustring name); - Attribute *add(AttributeStandard std, ustring name = ustring()); - Attribute *find(AttributeStandard std) const; - void remove(AttributeStandard std); + Attribute *add(AttributeStandard std, ustring name = ustring()); + Attribute *find(AttributeStandard std) const; + void remove(AttributeStandard std); - Attribute *find(AttributeRequest& req); + Attribute *find(AttributeRequest &req); - void remove(Attribute *attribute); + void remove(Attribute *attribute); - void resize(bool reserve_only = false); - void clear(bool preserve_voxel_data = false); + void resize(bool reserve_only = false); + void clear(bool preserve_voxel_data = false); }; /* AttributeRequest @@ -194,16 +196,16 @@ public: * The attribute is found either by name or by standard attribute type. */ class AttributeRequest { -public: - ustring name; - AttributeStandard std; + public: + ustring name; + AttributeStandard std; - /* temporary variables used by MeshManager */ - TypeDesc triangle_type, curve_type, subd_type; - AttributeDescriptor triangle_desc, curve_desc, subd_desc; + /* temporary variables used by MeshManager */ + TypeDesc triangle_type, curve_type, subd_type; + AttributeDescriptor triangle_desc, curve_desc, subd_desc; - explicit AttributeRequest(ustring name_); - explicit AttributeRequest(AttributeStandard std); + explicit AttributeRequest(ustring name_); + explicit AttributeRequest(AttributeStandard std); }; /* AttributeRequestSet @@ -211,26 +213,26 @@ public: * Set of attributes requested by a shader. */ class AttributeRequestSet { -public: - vector<AttributeRequest> requests; + public: + vector<AttributeRequest> requests; - AttributeRequestSet(); - ~AttributeRequestSet(); + AttributeRequestSet(); + ~AttributeRequestSet(); - void add(ustring name); - void add(AttributeStandard std); - void add(AttributeRequestSet& reqs); - void add_standard(ustring name); + void add(ustring name); + void add(AttributeStandard std); + void add(AttributeRequestSet &reqs); + void add_standard(ustring name); - bool find(ustring name); - bool find(AttributeStandard std); + bool find(ustring name); + bool find(AttributeStandard std); - size_t size(); - void clear(); + size_t size(); + void clear(); - bool modified(const AttributeRequestSet& other); + bool modified(const AttributeRequestSet &other); }; CCL_NAMESPACE_END -#endif /* __ATTRIBUTE_H__ */ +#endif /* __ATTRIBUTE_H__ */ |