Skip to content
Snippets Groups Projects
Commit eaeef008 authored by Philip Trettner's avatar Philip Trettner
Browse files

Merge branch 'feature/set_data_initializer_list' into 'develop'

Add initializer list variants for setData(...)

See merge request !43
parents 5901a4d1 5c8b4f91
No related branches found
No related tags found
1 merge request!43Add initializer list variants for setData(...)
Showing with 90 additions and 0 deletions
......@@ -289,6 +289,12 @@ public:
}
setData(internalFormat#if $cubemap #, target#end if #, ${sizeParameterCall}, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data()#if $hasMipmaps #, mipmapLevel#end if #);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat#if $cubemap #, GLenum target#end if #, ${sizeParameter}, std::initializer_list<DataT> data#if $hasMipmaps #, int mipmapLevel = 0#end if #)
{
setData(internalFormat#if $cubemap #, target#end if #, ${sizeParameterCall}, cc::span<std::add_const_t<DataT>>(data.begin(), data.size())#if $hasMipmaps #, mipmapLevel#end if #);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -190,6 +190,12 @@ public:
}
setData(internalFormat, width, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data(), mipmapLevel);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, int width, std::initializer_list<DataT> data, int mipmapLevel = 0)
{
setData(internalFormat, width, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()), mipmapLevel);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -195,6 +195,12 @@ public:
}
setData(internalFormat, width, layers, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data(), mipmapLevel);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, int width, int layers, std::initializer_list<DataT> data, int mipmapLevel = 0)
{
setData(internalFormat, width, layers, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()), mipmapLevel);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -217,6 +217,12 @@ public:
}
setData(internalFormat, width, height, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data(), mipmapLevel);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, int width, int height, std::initializer_list<DataT> data, int mipmapLevel = 0)
{
setData(internalFormat, width, height, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()), mipmapLevel);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -220,6 +220,12 @@ public:
}
setData(internalFormat, width, height, layers, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data(), mipmapLevel);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, int width, int height, int layers, std::initializer_list<DataT> data, int mipmapLevel = 0)
{
setData(internalFormat, width, height, layers, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()), mipmapLevel);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -208,6 +208,12 @@ public:
}
setData(internalFormat, width, height, depth, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data(), mipmapLevel);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, int width, int height, int depth, std::initializer_list<DataT> data, int mipmapLevel = 0)
{
setData(internalFormat, width, height, depth, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()), mipmapLevel);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -102,6 +102,12 @@ public:
}
setData(internalFormat, size, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data());
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, int size, std::initializer_list<DataT> data)
{
setData(internalFormat, size, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()));
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -217,6 +217,12 @@ public:
}
setData(internalFormat, target, width, height, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data(), mipmapLevel);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, GLenum target, int width, int height, std::initializer_list<DataT> data, int mipmapLevel = 0)
{
setData(internalFormat, target, width, height, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()), mipmapLevel);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -220,6 +220,12 @@ public:
}
setData(internalFormat, target, width, height, layers, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data(), mipmapLevel);
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, GLenum target, int width, int height, int layers, std::initializer_list<DataT> data, int mipmapLevel = 0)
{
setData(internalFormat, target, width, height, layers, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()), mipmapLevel);
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -174,6 +174,12 @@ public:
}
setData(internalFormat, width, height, glTypeOf<DataT>::format, glTypeOf<DataT>::type, data_span.data());
}
/// same as above for initializer lists
template <class DataT>
void setData(GLenum internalFormat, int width, int height, std::initializer_list<DataT> data)
{
setData(internalFormat, width, height, cc::span<std::add_const_t<DataT>>(data.begin(), data.size()));
}
/// Same as above
/// Usage:
/// tg::vec3 texData[][] = { ... }
......
......@@ -74,6 +74,11 @@ public:
for (auto const& p : members)
addVerification(p.offset, p.name);
}
void addVerification(std::initializer_list<VerificationPair> members)
{
for (auto const& p : members)
addVerification(p.offset, p.name);
}
/// Binds this uniform buffer.
/// Unbinding is done when the returned object runs out of scope.
......
......@@ -37,6 +37,13 @@ struct BoundArrayBuffer
static_assert(std::is_trivially_copyable_v<DataT>, "data must be trivially copyable");
implSetData(sizeof(DataT) * data_span.size(), data_span.data(), sizeof(DataT), usage);
}
/// Same as above for initializer lists
template <class DataT>
void setData(std::initializer_list<DataT> data, GLenum usage = GL_STATIC_DRAW)
{
static_assert(std::is_trivially_copyable_v<DataT>, "data must be trivially copyable");
implSetData(sizeof(DataT) * data.size(), data.begin(), sizeof(DataT), usage);
}
private:
GLint previousBuffer; ///< previously bound buffer
......
......@@ -28,6 +28,12 @@ struct BoundShaderStorageBuffer
auto bytes = cc::as_byte_span(data);
setData(bytes.size(), bytes.data(), usage);
}
/// Same as above for initializer list
template <class DataT>
void setData(std::initializer_list<DataT> data, GLenum usage = GL_STATIC_DRAW)
{
setData(data.size() * sizeof(DataT), data.begin(), usage);
}
/// Ses a subportion of the buffer (does NOT allocate/enlarge memory!)
void setSubData(size_t offset, size_t size, const void* data);
/// vector-of-data version of setSubData
......@@ -37,6 +43,12 @@ struct BoundShaderStorageBuffer
auto bytes = cc::as_byte_span(data);
setSubData(offset, bytes.size(), bytes.data());
}
/// Same as above for initializer list
template <class DataT>
void setSubData(size_t offset, std::initializer_list<DataT> data)
{
setSubData(offset, data.size() * sizeof(DataT), data.begin());
}
/// Writes all buffer data into the given memory
/// Data is truncated to maxSize
void getData(void* destination, size_t maxSize = 0, bool warnOnTruncate = true);
......
......@@ -28,6 +28,12 @@ struct BoundUniformBuffer
auto bytes = cc::as_byte_span(data);
setData(bytes.size(), bytes.data(), usage);
}
/// same as above for initializer list
template <class DataT>
void setData(std::initializer_list<DataT> data, GLenum usage = GL_STATIC_DRAW)
{
setData(data.size() * sizeof(DataT), data.begin(), usage);
}
private:
GLint previousBuffer; ///< previously bound buffer
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment