--- nono/vm/planevram.h 2026/04/29 17:05:18 1.1.1.2 +++ nono/vm/planevram.h 2026/04/29 17:05:25 1.1.1.3 @@ -21,7 +21,7 @@ class PlaneVRAMDevice : public IODevice public: PlaneVRAMDevice(int width_, int height_); - virtual ~PlaneVRAMDevice() override; + ~PlaneVRAMDevice() override; void ResetHard(bool poweron) override; @@ -38,7 +38,7 @@ class PlaneVRAMDevice : public IODevice void ClearDirty(); // 画面を合成する - bool Render(BitmapRGB& dst, const ModifyInfo& modify); + bool Render(BitmapRGBX& dst, const ModifyInfo& modify); // 合成ビットマップを取得する const BitmapI8& GetComposite() const { return composite; } @@ -53,8 +53,8 @@ class PlaneVRAMDevice : public IODevice // 垂直 VRAM から BitmapI8 バッファを作成する void RenderVRAMToComposite(const ModifyInfo& modify); - // BitmapI8 バッファから BitmapRGB を作成する。 - void RenderCompositeToRGB(BitmapRGB& dst, const ModifyInfo& modify); + // BitmapI8 バッファから BitmapRGBX を作成する。 + void RenderCompositeToRGBX(BitmapRGBX& dst, const ModifyInfo& modify); // X 方向にはみ出したときに対応する仮想画面の Y 座標を返す。 virtual int GetWrapY(int) const = 0; @@ -84,6 +84,15 @@ class PlaneVRAMDevice : public IODevice // スクロール int xscroll {}; int yscroll {}; + + private: + void RenderI8toRGBX_gen(BitmapRGBX& dst, const BitmapI8& view, + const std::vector& view_mod); +#if defined(HAVE_AVX2) + void RenderI8toRGBX_avx2(BitmapRGBX& dst, const BitmapI8& view, + const std::vector& view_mod); + bool enable_avx2 {}; +#endif }; static inline PlaneVRAMDevice *GetPlaneVRAMDevice() {