読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

アルファブレンド周り実装

アルファブレンド周りを実装しました。こんな感じで使えます。

#include <pstade/oven/algorithm.hpp>
#include <ngy313/process.hpp>
#include <ngy313/window.hpp>
#include <ngy313/graphic.hpp>
#include <ngy313/box.hpp>
#include <ngy313/colored.hpp>
#include <ngy313/moved.hpp>
#include <ngy313/blend.hpp>

int main() {
  ngy313::set_window_caption("試験窓");
  ngy313::window_resize(640, 480);
  ngy313::window_show();
  pstade::oven::for_each(ngy313::process_message(), ngy313::main_loop([]() {
    {
      const ngy313::scoped_render render;
      if (render.succeeded()) {
        ngy313::clear_screen(ngy313::kBlack);
        const ngy313::box box(0.f, 0.f, 120.f, 120.f);
        // 加算合成
        ngy313::draw(box | ngy313::moved(20.f, 20.f) | ngy313::colored(0xFFFF0000));
        ngy313::draw(box | ngy313::moved(80.f, 80.f) | ngy313::add_blend | ngy313::colored(0xFF0000FF));
        // 減算合成
        ngy313::draw(box | ngy313::moved(240.f, 20.f) | ngy313::colored(0xFFFF0000));
        ngy313::draw(box | ngy313::moved(300.f, 80.f) | ngy313::sub_blend | ngy313::colored(0xFFFF0000));
        // 乗算合成
        ngy313::draw(box | ngy313::moved(460.f, 20.f) | ngy313::colored(0xFF800080));
        ngy313::draw(box | ngy313::moved(520.f, 80.f) | ngy313::mul_blend | ngy313::colored(0xFFFFFF00));
        // 乗算合成2
        ngy313::draw(box | ngy313::moved(20.f, 240.f) | ngy313::colored(0xFF800080));
        ngy313::draw(box | ngy313::moved(80.f, 300.f) | ngy313::mul2_blend | ngy313::colored(0xFFFFFF00));
        // リバース
        ngy313::draw(box | ngy313::moved(240.f, 240.f) | ngy313::colored(0xFFFFFFFF));
        ngy313::draw(box | ngy313::moved(300.f, 300.f) | ngy313::reverse_blend | ngy313::colored(0xFF0000FF));
      }
    }
    ngy313::present();
  }));
  return 0;
}