#pragma once

#include "VertexFormats.h"

namespace FDK
{
	// マネージからでもアンマネージからでも呼び出す部分として、アンマネージで共通化。
	// 内部で CDirect3DNative::GetDirect3Device9Ex() を使うので、デバイスをロックしてから呼び出すこと。
	private class DrawTexture abstract sealed
	{
	public:
		static HRESULT t3D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, D3DMATRIX* pMatrix, LPRECT prc画像内の描画領域 );
		static HRESULT t3D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, D3DMATRIX* pMatrix );

		static HRESULT t2D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, float f拡大縮小倍率X, float f拡大縮小倍率Y, int x, int y, float depth, LPRECT prc画像内の描画領域 );
		static HRESULT t2D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, float f拡大縮小倍率X, float f拡大縮小倍率Y, int x, int y, LPRECT prc画像内の描画領域 );
		static HRESULT t2D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, float f拡大縮小倍率X, float f拡大縮小倍率Y, int x, int y );
		static HRESULT t2D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, float f拡大縮小倍率X, float f拡大縮小倍率Y, POINT pt, float depth, LPRECT prc画像内の描画領域 );
		static HRESULT t2D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, float f拡大縮小倍率X, float f拡大縮小倍率Y, POINT pt, LPRECT prc画像内の描画領域 );
		static HRESULT t2D描画( IDirect3DDevice9Ex *pDevice, IDirect3DTexture9* pTexture, int n透明度0to255, bool b加算合成, float f拡大縮小倍率X, float f拡大縮小倍率Y, POINT pt );

//	internal:
		static float f物理縮小倍率;		// FDK::CDirect3DNative 以外からはアクセスしないこと！！

	protected:
		static STPositionColoredVertexies pPositionColoredVertexies[ 4 ];
		static STTransformedColoredTextureVertexies pTransformedColoredTexturedVertexies[ 4 ];

		static HRESULT tレンダリングステートの設定( IDirect3DDevice9Ex *pDevice, bool b加算合成 );
	};
}
