blob: 475e5d938abeac230d915459c6dc03a42785fb9c [file] [log] [blame] [edit]
/*
* Copyright 2022 Rive
*/
#ifndef BicubicPatch_DEFINED
#define BicubicPatch_DEFINED
#include "rive/math/vec2d.hpp"
#include "rive/factory.hpp"
#include <vector>
namespace rivegm
{
struct BicubicPatch
{
// These are order 4x4, row-major, relative to the
// uvBounds that is passed to mesh()
//
// [ 0] [ 1] [ 2] [ 3]
// [ 4] [ 5] [ 6] [ 7]
// [ 8] [ 9] [10] [11]
// [12] [13] [14] [15]
//
rive::Vec2D m_Pts[16];
rive::Vec2D eval(float u, float v) const;
void evalWeights(float u, float v, float weights[16]) const;
struct Mesh
{
rive::rcp<rive::RenderBuffer> pts; // float pairs
rive::rcp<rive::RenderBuffer> uvs; // float pairs
rive::rcp<rive::RenderBuffer> indices; // uint16_t
};
Mesh mesh(rive::Factory*, const rive::AABB* uvBounds = nullptr) const;
struct Rec
{
std::vector<rive::Vec2D> pts;
std::vector<rive::Vec2D> uvs;
std::vector<uint16_t> indices;
};
Rec buffers(const rive::AABB* uvBounds = nullptr) const;
};
} // namespace rivegm
#endif