blocky/playground/input_gradient.cc
2022-06-22 11:48:52 +09:00

53 lines
1.2 KiB
C++

#include "app.hh"
#include "input.hh"
#include <array>
#include <cstring>
#include <imgui.h>
namespace pg {
namespace {
class Gradient final : public App, public Input::Data {
public:
static inline TypeInfo kType = TypeInfo::Create<Gradient>("Input_Gradient");
Gradient() noexcept : Data("gradient") {
}
void Update() noexcept override {
const auto id = std::to_string(index())+" Input_Gradient | "+
std::to_string(reinterpret_cast<uintptr_t>(this));
if (ImGui::Begin(id.c_str())) {
ImGui::DragInt("w", &w_, 1, 1, 1024);
ImGui::DragInt("h", &h_, 1, 1, 1024);
ImGui::DragInt("dur", &dur_, 1, 1, 1024);
}
ImGui::End();
}
Frame Fetch(size_t n) noexcept override {
const auto w = static_cast<size_t>(w_);
const auto h = static_cast<size_t>(h_);
buf_.resize(w*h*4);
const auto f = static_cast<float>(n)/static_cast<float>(dur_);
std::memset(buf_.data(), static_cast<uint8_t>(f*UINT8_MAX), buf_.size());
return Frame {.w = w, .h = h, .rgba = buf_.data()};
}
size_t frames() noexcept override {
return static_cast<size_t>(dur_);
}
private:
int w_ = 100, h_ = 100;
int dur_ = 100;
std::vector<uint8_t> buf_;
};
}
} // namespace pg