Skip to content

Commit

Permalink
Tighten the type constraints on ConstantBuffer API
Browse files Browse the repository at this point in the history
  • Loading branch information
mogemimi committed Oct 2, 2020
1 parent 15b3d00 commit da40b97
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions include/Pomdog/Graphics/ConstantBuffer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

#include "Pomdog/Basic/Export.hpp"
#include "Pomdog/Graphics/BufferUsage.hpp"
#include "Pomdog/Graphics/detail/EffectBinaryParameter.hpp"
#include "Pomdog/Graphics/detail/ForwardDeclarations.hpp"
#include <cstddef>
#include <memory>
Expand Down Expand Up @@ -49,9 +48,11 @@ class POMDOG_EXPORT ConstantBuffer final {
{
static_assert(std::is_trivially_copyable_v<T>, "You can only use plain-old-data types.");
static_assert(std::is_standard_layout_v<T>, "You can only use plain-old-data types.");
static_assert(!std::is_pointer<T>::value, "T is not pointer.");
static_assert(!std::is_fundamental_v<T>);
T result;
Detail::EffectBinaryParameter::Get<T>(*this, result);
return std::move(result);
this->GetValue(sizeof(result), static_cast<void*>(&result));
return result;
}

void GetValue(std::size_t sizeInBytes, void* result) const;
Expand All @@ -62,7 +63,9 @@ class POMDOG_EXPORT ConstantBuffer final {
{
static_assert(std::is_trivially_copyable_v<T>, "You can only use plain-old-data types.");
static_assert(std::is_standard_layout_v<T>, "You can only use plain-old-data types.");
Detail::EffectBinaryParameter::Set(*this, value);
static_assert(!std::is_pointer<T>::value, "T is not pointer.");
static_assert(!std::is_fundamental_v<T>);
this->SetValue(static_cast<const void*>(&value), sizeof(value));
}

/// Sets constant buffer data.
Expand All @@ -71,7 +74,9 @@ class POMDOG_EXPORT ConstantBuffer final {
{
static_assert(std::is_trivially_copyable_v<T>, "You can only use plain-old-data types.");
static_assert(std::is_standard_layout_v<T>, "You can only use plain-old-data types.");
Detail::EffectBinaryParameter::Set(*this, data, count);
static_assert(!std::is_pointer<T>::value, "T is not pointer.");
static_assert(!std::is_same_v<T, bool>);
this->SetValue(static_cast<const void*>(data), sizeof(T) * count);
}

/// Sets constant buffer data.
Expand Down

0 comments on commit da40b97

Please sign in to comment.