53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			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
 |