// ---------------------------------------------------------------------------
//  M88 - PC88 emulator
//  Copyright (C) cisc 1998, 1999.
// ---------------------------------------------------------------------------
//	Direct2D による画面描画
// ---------------------------------------------------------------------------

#pragma once

// ---------------------------------------------------------------------------

#include <d2d1.h>
#include <d2d1helper.h>
#include "windraw.h"

class WinDrawD2D : public WinDrawSub
{
public:
	WinDrawD2D();
	~WinDrawD2D();

	bool Init(HWND hwnd, uint w, uint h, GUID*);
	bool Resize(uint width, uint height);
	bool Cleanup();
	void SetPalette(PALETTEENTRY* pal, int index, int nentries);
	void SetGUIMode(bool guimode);
	void DrawScreen(const RECT& rect, bool refresh);
	bool Lock(uint8** pimage, int* pbpl);
	bool Unlock();

private:
	bool CreateD2D(uint w, uint h);
	void ComputeDestRect(RECT& rect);	// 出力面に 8:5 で内接する矩形

	struct BI256		// BITMAPINFO
	{
		BITMAPINFOHEADER header;
		RGBQUAD colors[256];
	};

	bool	MakeBitmap();

	ID2D1Factory *m_D2DFact;
	ID2D1HwndRenderTarget *m_RenderTarget;
	ID2D1GdiInteropRenderTarget *m_GDIRT;

	bool	m_UpdatePal;
	bool	m_needclear;	// 次の描画で余白(レターボックス)を塗り直す
	HWND	m_hWnd;
	HWND	m_hCWnd;
	uint	m_width;		// 出力サイズ(子ウインドウのクライアントサイズ)
	uint	m_height;
	uint	m_nBitmapW;		// 転送元サイズ(640x400 固定)
	uint	m_nBitmapH;
	BYTE*	m_image; 	// 画像Bitmap
	BI256	m_bmpinfo;
	HBITMAP	m_hBitmap;
	int		bpl;
};
