--- nono/vm/renderer.h 2026/04/29 17:05:10 1.1.1.7 +++ nono/vm/renderer.h 2026/04/29 17:05:17 1.1.1.9 @@ -10,9 +10,6 @@ #pragma once -// ブロックのヒット効率(?)を測定 -#define PERF_HIT - #include "thread.h" #include "bitmap.h" #include "monitor.h" @@ -21,25 +18,20 @@ #include #include -#if defined(PERF_HIT) -#include "fixedqueue.h" -#endif +class PlaneVRAMDevice; +class Syncer; // 更新情報交換用構造体 struct ModifyInfo { - std::array bits {}; + std::array bits {}; uint32 n_dirty {}; -#if defined(PERF_HIT) - // 65536 = (2048px / 32bit) * 1024px - std::array dirty_word {}; -#endif // パレットを変更した場合とスクロールした場合のように // composite に変更によらず bitmap を更新する場合は true。 bool invalidate2 {}; - void Fill(uint16 v) { + void Fill(uint8 v) { std::fill(bits.begin(), bits.end(), v); if (v) { n_dirty = bits.size(); @@ -60,13 +52,11 @@ class Renderer : public ThreadDevice static const uint REQ_REND_POWEROFF = 0x02; // 電源オフ時の描画指示 static const uint REQ_REND_NORMAL = 0x04; // 通常の描画指示 - static const int BLKX = 128; // 1ブロックの幅 [pixel] - static const int BLKY = 16; // 1ブロックの高さ [pixel] - public: Renderer(); virtual ~Renderer() override; + bool Init() override; void ResetHard(bool poweron) override; void PowerOff() override; @@ -146,11 +136,8 @@ class Renderer : public ThreadDevice uint64 total_mod_blocks {}; // 総更新ブロック数 uint64 total_invalidate2 {}; // ステージ2の全画面更新回数 -#if defined(PERF_HIT) - FixedQueue hitrate_ma {}; - uint64 hitrate_total_word {}; - uint64 hitrate_total_block {}; -#endif + PlaneVRAMDevice *planevram {}; + Syncer *syncer {}; Monitor monitor { this }; @@ -182,10 +169,22 @@ class LunaRenderer : public Renderer LunaRenderer(); virtual ~LunaRenderer() override; - // 合成ビットマップを取得 - const BitmapI8& GetComposite() const; + bool RenderMain() override; +}; + +// +// NEWS レンダラ +// +class NewsRenderer : public Renderer +{ + using inherited = Renderer; + public: + NewsRenderer(); + virtual ~NewsRenderer() override; bool RenderMain() override; }; -extern Renderer *gRenderer; +static inline Renderer *GetRenderer() { + return Object::GetObject(OBJ_RENDERER); +}