15#include <vsg/core/Allocator.h>
16#include <vsg/core/Object.h>
17#include <vsg/core/compare.h>
18#include <vsg/core/type_name.h>
19#include <vsg/vk/vulkan.h>
32 bool operator==(
const ModifiedCount& rhs)
const {
return count == rhs.count; }
33 bool operator!=(
const ModifiedCount& rhs)
const {
return count != rhs.count; }
35 void operator++() { ++count; }
56 enum DataVariance : uint8_t
59 STATIC_DATA_UNREF_AFTER_TRANSFER = 1,
61 DYNAMIC_DATA_TRANSFER_AFTER_RECORD = 3
68 using iterator_category = std::forward_iterator_tag;
69 using difference_type = std::ptrdiff_t;
78 if constexpr (std::is_const<value_type>::value)
79 ptr =
reinterpret_cast<value_type*
>(
reinterpret_cast<const uint8_t*
>(ptr) + stride);
81 ptr =
reinterpret_cast<value_type*
>(
reinterpret_cast<uint8_t*
>(ptr) + stride);
103 value_type& operator*() {
return *
reinterpret_cast<value_type*
>(ptr); }
104 value_type* operator->() {
return reinterpret_cast<value_type*
>(ptr); }
109 class VSG_DECLSPEC Data :
public Object
115 struct VSG_DECLSPEC Properties
117 Properties() =
default;
118 Properties(
const Properties& rhs) =
default;
119 explicit Properties(VkFormat in_format) :
122 VkFormat format = VK_FORMAT_UNDEFINED;
124 uint8_t maxNumMipmaps = 0;
125 uint8_t blockWidth = 1;
126 uint8_t blockHeight = 1;
127 uint8_t blockDepth = 1;
128 uint8_t origin = TOP_LEFT;
133 int compare(
const Properties& rhs)
const;
134 Properties& operator=(
const Properties& rhs);
140 Object(data, copyop), properties(data.properties) {}
142 explicit Data(Properties layout) :
143 properties(layout) {}
145 Data(Properties layout, uint32_t min_stride) :
148 if (properties.stride < min_stride) properties.stride = min_stride;
152 static void*
operator new(
size_t count);
153 static void operator delete(
void* ptr);
155 size_t sizeofObject() const noexcept
override {
return sizeof(Data); }
156 bool is_compatible(
const std::type_info& type)
const noexcept override {
return typeid(
Data) == type || Object::is_compatible(type); }
158 int compare(
const Object& rhs_object)
const override;
160 void read(
Input& input)
override;
161 void write(
Output& output)
const override;
166 bool dynamic()
const {
return properties.dataVariance >= DYNAMIC_DATA; }
168 virtual size_t valueSize()
const = 0;
169 virtual size_t valueCount()
const = 0;
171 virtual bool dataAvailable()
const = 0;
172 virtual size_t dataSize()
const = 0;
174 virtual void* dataPointer() = 0;
175 virtual const void* dataPointer()
const = 0;
177 virtual void* dataPointer(
size_t index) = 0;
178 virtual const void* dataPointer(
size_t index)
const = 0;
180 virtual void* dataRelease() = 0;
182 virtual uint32_t dimensions()
const = 0;
184 virtual uint32_t width()
const = 0;
185 virtual uint32_t height()
const = 0;
186 virtual uint32_t depth()
const = 0;
188 bool contiguous()
const {
return valueSize() == properties.stride; }
190 uint32_t stride()
const {
return properties.stride ? properties.stride :
static_cast<uint32_t
>(valueSize()); }
192 using MipmapOffsets = std::vector<size_t>;
193 MipmapOffsets computeMipmapOffsets()
const;
194 static size_t computeValueCountIncludingMipmaps(
size_t w,
size_t h,
size_t d, uint32_t maxNumMipmaps);
202 if (_modifiedCount != mc)
217 ModifiedCount _modifiedCount;
241 using DataList = std::vector<ref_ptr<Data>>;
Properties properties
properties of the data such as format, origin, stride, dataVariance etc.
Definition Data.h:164
Properties Layout
deprecated: provided for backwards compatibility, use Properties instead.
Definition Data.h:222
bool differentModifiedCount(const ModifiedCount &mc) const
return true if Data's ModifiedCount is different from the specified ModifiedCount
Definition Data.h:212
Layout getLayout() const
deprecated: use data->properties
Definition Data.h:236
Layout & getLayout()
deprecated: use data->properties
Definition Data.h:234
void setLayout(Layout layout)
deprecated: use data->properties = properties instead.
Definition Data.h:225
void dirty()
increment the ModifiedCount to signify the data has been modified
Definition Data.h:197
bool getModifiedCount(ModifiedCount &mc) const
get the Data's ModifiedCount and return true if this changes the specified ModifiedCount
Definition Data.h:200
int compare(const Object &rhs_object) const override
compare two objects, return -1 if this object is less than rhs, return 0 if it's equal,...
DataVariance dataVariance
-1 signifies undefined VkImageViewType, if value >=0 then value should be treated as valid VkImageVie...
Definition Data.h:130
AllocatorType allocatorType
hint as to how the data values may change during the lifetime of the vsg::Data.
Definition Data.h:131
int8_t imageViewType
Hint for setting up texture coordinates, bit 0 x/width axis, bit 1 y/height axis, bit 2 z/depth axis....
Definition Data.h:129
ModifiedCount provides a count value to keep track of modifications to data.
Definition Data.h:29