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; }
39 using block64 = uint8_t[8];
42 using block128 = uint8_t[16];
50 enum DataVariance : uint8_t
53 STATIC_DATA_UNREF_AFTER_TRANSFER = 1,
55 DYNAMIC_DATA_TRANSFER_AFTER_RECORD = 3
62 using iterator_category = std::forward_iterator_tag;
63 using difference_type = std::ptrdiff_t;
72 if constexpr (std::is_const<value_type>::value)
73 ptr =
reinterpret_cast<value_type*
>(
reinterpret_cast<const uint8_t*
>(ptr) + stride);
75 ptr =
reinterpret_cast<value_type*
>(
reinterpret_cast<uint8_t*
>(ptr) + stride);
97 value_type& operator*() {
return *
reinterpret_cast<value_type*
>(ptr); }
98 value_type* operator->() {
return reinterpret_cast<value_type*
>(ptr); }
116 VkFormat format = VK_FORMAT_UNDEFINED;
118 uint8_t maxNumMipmaps = 0;
119 uint8_t blockWidth = 1;
120 uint8_t blockHeight = 1;
121 uint8_t blockDepth = 1;
122 uint8_t origin = TOP_LEFT;
123 int8_t imageViewType = -1;
124 DataVariance dataVariance = STATIC_DATA;
125 AllocatorType allocatorType = ALLOCATOR_TYPE_VSG_ALLOCATOR;
133 explicit Data(Properties layout) :
134 properties(layout) {}
136 Data(Properties layout, uint32_t min_stride) :
139 if (properties.stride < min_stride) properties.stride = min_stride;
143 static void*
operator new(std::size_t count);
144 static void operator delete(
void* ptr);
146 std::size_t sizeofObject() const noexcept
override {
return sizeof(
Data); }
147 bool is_compatible(
const std::type_info& type)
const noexcept
override {
return typeid(
Data) == type || Object::is_compatible(type); }
152 if (result != 0)
return result;
154 auto& rhs =
static_cast<decltype(*this)
>(rhs_object);
156 if ((result = properties.compare(rhs.properties)))
return result;
159 if (dataSize() < rhs.dataSize())
return -1;
160 if (dataSize() > rhs.dataSize())
return 1;
163 if (dataSize() == 0)
return 0;
166 return std::memcmp(dataPointer(), rhs.dataPointer(), dataSize());
169 void read(
Input& input)
override;
170 void write(
Output& output)
const override;
175 bool dynamic()
const {
return properties.
dataVariance >= DYNAMIC_DATA; }
177 virtual std::size_t valueSize()
const = 0;
178 virtual std::size_t valueCount()
const = 0;
180 virtual bool dataAvailable()
const = 0;
181 virtual std::size_t dataSize()
const = 0;
183 virtual void* dataPointer() = 0;
184 virtual const void* dataPointer()
const = 0;
186 virtual void* dataPointer(
size_t index) = 0;
187 virtual const void* dataPointer(
size_t index)
const = 0;
189 virtual void* dataRelease() = 0;
191 virtual std::uint32_t dimensions()
const = 0;
193 virtual std::uint32_t width()
const = 0;
194 virtual std::uint32_t height()
const = 0;
195 virtual std::uint32_t depth()
const = 0;
197 bool contiguous()
const {
return valueSize() == properties.stride; }
199 uint32_t stride()
const {
return properties.stride ? properties.stride :
static_cast<uint32_t
>(valueSize()); }
201 using MipmapOffsets = std::vector<std::size_t>;
202 MipmapOffsets computeMipmapOffsets()
const;
203 static std::size_t computeValueCountIncludingMipmaps(std::size_t w, std::size_t h, std::size_t d, uint32_t maxNumMipmaps);
211 if (_modifiedCount != mc)
226 ModifiedCount _modifiedCount;
236 VkFormat previous_format = properties.format;
237 uint32_t previous_stride = properties.stride;
239 if (properties.format == 0 && previous_format != 0) properties.format = previous_format;
240 if (properties.stride == 0 && previous_stride != 0) properties.stride = previous_stride;
250 using DataList = std::vector<ref_ptr<Data>>;
Properties properties
properties of the data such as format, origin, stride, dataVariance etc.
Definition: Data.h:173
bool differentModifiedCount(const ModifiedCount &mc) const
return true if Data's ModifiedCount is different than the specified ModifiedCount
Definition: Data.h:221
Layout getLayout() const
deprecated: use data->properties
Definition: Data.h:245
void setLayout(Layout layout)
deprecated: use data->properties = properties instead.
Definition: Data.h:234
void dirty()
increment the ModifiedCount to signify the data has been modified
Definition: Data.h:206
Layout & getLayout()
deprecated: use data->properties
Definition: Data.h:243
bool getModifiedCount(ModifiedCount &mc) const
get the Data's ModifiedCount and return true if this changes the specified ModifiedCount
Definition: Data.h:209
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,...
Definition: Data.h:149
virtual int compare(const Object &rhs) const
compare two objects, return -1 if this object is less than rhs, return 0 if it's equal,...
Definition: Object.h:77
DataVariance dataVariance
-1 signifies undefined VkImageViewType, if value >=0 then value should be treated as valid VkImageVie...
Definition: Data.h:124
ModifiedCount provides a count value to keep track of modifications to data.
Definition: Data.h:29