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>
35 bool operator==(
const ModifiedCount& rhs)
const {
return count == rhs.count; }
36 bool operator!=(
const ModifiedCount& rhs)
const {
return count != rhs.count; }
38 void operator++() { ++count; }
59 enum DataVariance : uint8_t
62 STATIC_DATA_UNREF_AFTER_TRANSFER = 1,
64 DYNAMIC_DATA_TRANSFER_AFTER_RECORD = 3
71 using iterator_category = std::forward_iterator_tag;
72 using difference_type = std::ptrdiff_t;
81 if constexpr (std::is_const<value_type>::value)
82 ptr =
reinterpret_cast<value_type*
>(
reinterpret_cast<const uint8_t*
>(ptr) + stride);
84 ptr =
reinterpret_cast<value_type*
>(
reinterpret_cast<uint8_t*
>(ptr) + stride);
106 value_type& operator*() {
return *
reinterpret_cast<value_type*
>(ptr); }
107 value_type* operator->() {
return reinterpret_cast<value_type*
>(ptr); }
114 class VSG_DECLSPEC Data :
public Object
120 struct VSG_DECLSPEC Properties
122 Properties() =
default;
123 Properties(
const Properties& rhs) =
default;
124 explicit Properties(VkFormat in_format) :
127 VkFormat format = VK_FORMAT_UNDEFINED;
129 uint8_t mipLevels = 0;
130 uint8_t blockWidth = 1;
131 uint8_t blockHeight = 1;
132 uint8_t blockDepth = 1;
133 uint8_t origin = TOP_LEFT;
138 int compare(
const Properties& rhs)
const;
139 Properties& operator=(
const Properties& rhs);
145 Object(data, copyop), properties(data.properties) {}
147 explicit Data(Properties layout) :
148 properties(layout) {}
150 Data(Properties layout, uint32_t min_stride) :
153 if (properties.stride < min_stride) properties.stride = min_stride;
157 static void*
operator new(
size_t count);
158 static void operator delete(
void* ptr);
160 size_t sizeofObject() const noexcept
override {
return sizeof(Data); }
161 bool is_compatible(
const std::type_info& type)
const noexcept override {
return typeid(
Data) == type || Object::is_compatible(type); }
163 int compare(
const Object& rhs_object)
const override;
165 void read(
Input& input)
override;
166 void write(
Output& output)
const override;
171 bool dynamic()
const {
return properties.dataVariance >= DYNAMIC_DATA; }
173 virtual size_t valueSize()
const = 0;
174 virtual size_t valueCount()
const = 0;
176 virtual bool dataAvailable()
const = 0;
177 virtual size_t dataSize()
const = 0;
179 virtual void* dataPointer() = 0;
180 virtual const void* dataPointer()
const = 0;
182 virtual void* dataPointer(
size_t index) = 0;
183 virtual const void* dataPointer(
size_t index)
const = 0;
185 virtual void* dataRelease() = 0;
187 virtual uint32_t dimensions()
const = 0;
189 virtual uint32_t width()
const = 0;
190 virtual uint32_t height()
const = 0;
191 virtual uint32_t depth()
const = 0;
196 bool contiguous()
const {
return valueSize() ==
properties.stride; }
198 uint32_t stride()
const {
return properties.stride ? properties.stride :
static_cast<uint32_t
>(valueSize()); }
200 size_t computeValueCountIncludingMipmaps()
const;
208 if (_modifiedCount != mc)
229 void _copy(
const Data& rhs);
256 using DataList = std::vector<ref_ptr<Data>>;
Properties properties
properties of the data such as format, origin, stride, dataVariance etc.
Definition Data.h:169
Properties Layout
deprecated: provided for backwards compatibility, use Properties instead.
Definition Data.h:237
bool differentModifiedCount(const ModifiedCount &mc) const
return true if Data's ModifiedCount is different from the specified ModifiedCount
Definition Data.h:218
void setMipmapLayout(MipmapLayout *mipmapData)
set the MipmapLayout, only required when the data contains mipmaps that use block compressed formats ...
Layout getLayout() const
deprecated: use data->properties
Definition Data.h:251
Layout & getLayout()
deprecated: use data->properties
Definition Data.h:249
void setLayout(Layout layout)
deprecated: use data->properties = properties instead.
Definition Data.h:240
const MipmapLayout * getMipmapLayout() const
get the MipmapLayout if assigned.
void dirty()
increment the ModifiedCount to signify the data has been modified
Definition Data.h:203
std::tuple< uint32_t, uint32_t, uint32_t > pixelExtents() const
return the {width, height, depth} pixel extents of an image accounting for blockWidth and any mipmapD...
bool getModifiedCount(ModifiedCount &mc) const
get the Data's ModifiedCount and return true if this changes the specified ModifiedCount
Definition Data.h:206
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 MipmapLayout.h:24
DataVariance dataVariance
-1 signifies undefined VkImageViewType, if value >=0 then value should be treated as valid VkImageVie...
Definition Data.h:135
AllocatorType allocatorType
hint as to how the data values may change during the lifetime of the vsg::Data.
Definition Data.h:136
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:134
ModifiedCount provides a count value to keep track of modifications to data.
Definition Data.h:32