all important components are rewired and can be used

This commit is contained in:
Hartmut Seichter 2023-07-01 16:07:28 +02:00
parent 296d3add7b
commit 14343e7fd0
5 changed files with 70 additions and 37 deletions

View file

@ -67,12 +67,15 @@ template <typename Scalar, typename Derived> struct MatrixBase {
return derived();
}
static constexpr Derived zero() noexcept {
static constexpr Derived
all(const std::convertible_to<Scalar> auto& v) noexcept {
Derived d;
d.fill(0);
d.fill(v);
return d;
}
static constexpr Derived zero() noexcept { return Derived::all(Scalar{0}); }
constexpr Scalar squared_norm() const { return dot(*this, *this); }
constexpr Scalar norm() const { return std::sqrt(squared_norm()); }

View file

@ -51,20 +51,19 @@ struct Shader final {
void use() const;
Shader& set_uniform_at_location(int location,
float v); //!< sets a float in a shader
Shader&
set_uniform_at_location(int location,
uint32_t v); //!< sets a 32bit unsigned in a shader
const Shader&
set_uniform_at_location(int location,
int32_t v) const; //!< sets a 32bit signed in a shader
float v) const; //!< sets a float in a shader
const Shader& set_uniform_at_location(
int location,
uint32_t v) const; //!< sets a 32bit unsigned in a shader
const Shader& set_uniform_at_location(
int location,
int32_t v) const; //!< sets a 32bit signed in a shader
const Shader&
set_uniform_at_location(int location,
const Vector2<float>& v) const; //!< sets a 2D float vector
const Shader& set_uniform_at_location(
int location,
const Vector2<float>& v) const; //!< sets a 2D float vector
/**
* @brief retrieves the position of a uniform
* @param name of the uniform
@ -91,8 +90,8 @@ struct Shader final {
}
using uniform_t =
std::variant<bool, int, float,
double ,Vector2<float>/*vector3f,vector4f,matrix4x4f*/>;
std::variant<bool, int, float, double,
Vector2<float> /*vector3f,vector4f,matrix4x4f*/>;
using uniform_entry_t = std::tuple<std::string, uniform_t, int>;
using uniform_cache_t = std::vector<uniform_entry_t>;

View file

@ -23,8 +23,8 @@
#ifndef PARADISO_SPRITE_HPP
#define PARADISO_SPRITE_HPP
#include <paradiso/globals.hpp>
#include <paradiso/bitmap.hpp>
#include <paradiso/globals.hpp>
#include <paradiso/matrix.hpp>
#include <paradiso/vector.hpp>
@ -32,13 +32,15 @@ namespace paradiso {
/**
* @brief simple sprite handler
*/
*/
struct Sprite final {
using ChangeCountType = std::uint64_t;
Bitmap bitmap{}; //!< associated bitmap
Bitmap bitmap{}; //!< associated bitmap
Vector2<float> pivot{Vector2<float>::zero()}; //!< center point
Vector2<float> scale{Vector2<float>::all(1)}; //!< scale
float rotation{0.0f}; //!< rotation
// 0 3 | y
// +------+ | ^
@ -49,17 +51,20 @@ struct Sprite final {
std::array<std::uint32_t, 6> indices{0, 1, 2, 0, 2, 3}; //!< topology
std::array<Vector3<float>, 4> vertices{ //!< geometry
std::array<Vector3<float>, 4> vertices{
//!< geometry
Vector3<float>::make(-1.0f, +1.0f, 0.0f),
Vector3<float>::make(-1.0f, -1.0f, 0.0f),
Vector3<float>::make(+1.0f, -1.0f, 0.0f),
Vector3<float>::make(+1.0f, +1.0f, 0.0f)};
std::array<Vector3<float>, 4> normals{ //!< normals
std::array<Vector3<float>, 4> normals{
//!< normals
Vector3<float>::z_axis(), Vector3<float>::z_axis(),
Vector3<float>::z_axis(), Vector3<float>::z_axis()};
std::array<Vector2<float>, 4> texture_coordinates{ //!< UV coordinates
std::array<Vector2<float>, 4> texture_coordinates{
//!< UV coordinates
Vector2<float>::make(0.0f, 0.0f), Vector2<float>::make(1.0f, 0.0f),
Vector2<float>::make(1.0f, 1.0f), Vector2<float>::make(0.0f, 1.0f)};

View file

@ -199,12 +199,12 @@ Shader::~Shader() {}
bool Shader::ready() const { return impl_->is_valid(); }
Shader& Shader::set_uniform_at_location(int location, float v) {
const Shader& Shader::set_uniform_at_location(int location, float v) const {
impl_->bind(location, v);
return *this;
}
Shader& Shader::set_uniform_at_location(int location, uint32_t v) {
const Shader& Shader::set_uniform_at_location(int location, uint32_t v) const {
impl_->bind(location, v);
return *this;
}
@ -214,8 +214,8 @@ const Shader& Shader::set_uniform_at_location(int location, int32_t v) const {
return *this;
}
const Shader &Shader::set_uniform_at_location(int location, Vector2<float> const &v) const
{
const Shader& Shader::set_uniform_at_location(int location,
Vector2<float> const& v) const {
impl_->bind(location, v);
return *this;
}