using System ;
using System.Collections.Generic ;
using System.Runtime.InteropServices ;
using System.Text ;


namespace DxLibDLL
{


	public static partial class DX
	{


	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct POINT
		{

			public int x ;

			public int y ;

			public POINT( int x , int y )
			{
				this.x = x ;
				this.y = y ;
			}
		}


	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct SIZE
		{

			public int cx ;

			public int cy ;

			public SIZE( int cx , int cy )
			{
				this.cx = cx ;
				this.cy = cy ;
			}
		}


	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct RECT
		{

			public int left ;

			public int top ;

			public int right ;

			public int bottom ;

			public int x
			{
				get { return this.left ; }
			}

			public int y
			{
				get { return this.top ; }
			}

			public int cx
			{
				get { return this.right - this.left ; }
			}

			public int cy
			{
				get { return this.bottom - this.top ; }
			}

			public RECT( int left , int top , int right , int bottom )
			{
				this.left = left ;
				this.top = top ;
				this.right = right ;
				this.bottom = bottom ;
			}

			public RECT( POINT leftTop , POINT rightBottom )
			{
				this.left = leftTop.x ;
				this.top = leftTop.y ;
				this.right = rightBottom.x ;
				this.bottom = rightBottom.y ;
			}

			public RECT( POINT point , SIZE size )
			{
				this.left = point.x ;
				this.top = point.y ;
				this.right = size.cx ;
				this.bottom = size.cy ;
			}
		}


		/// <summary> ＩＭＥ入力文字列の描画に必要な情報の内の文節情報 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct IMEINPUTCLAUSEDATA
		{

			/// <summary> 何バイト目から </summary>
			public int Position ;

			/// <summary> 何バイトか </summary>
			public int Length ;
		}


		/// <summary> ＩＭＥ入力文字列の描画に必要な情報 </summary>
		public struct IMEINPUTDATA
		{

			/// <summary> 入力中の文字列 </summary>
			public string InputString ;

			/// <summary> カーソルの入力文字列中の位置(バイト単位) </summary>
			public int CursorPosition ;

			/// <summary> 文節情報 </summary>
			public IMEINPUTCLAUSEDATA[] ClauseData ;

			/// <summary> 選択中の分節( -1 の場合はどの文節にも属していない( 末尾にカーソルがある ) ) </summary>
			public int SelectClause ;

			/// <summary> 変換候補文字列リスト( 例：ｎ番目の候補を描画する場合  DrawString( 0 , 0 , data.CandidateList[ n ] , GetColor(255 ,255 ,255) ); ) </summary>
			public string[] CandidateList ;

			/// <summary> 選択中の変換候補 </summary>
			public int SelectCandidate ;
		}


		/// <summary> 画面モード情報データ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct DISPLAYMODEDATA
		{

			/// <summary> 水平解像度 </summary>
			public int Width ;

			/// <summary> 垂直解像度 </summary>
			public int Height ;

			/// <summary> 色ビット深度 </summary>
			public int ColorBitDepth ;

			/// <summary> リフレッシュレート( -1 の場合は規定値 ) </summary>
			public int RefreshRate ;
		}


		/// <summary> タイムデータ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct DATEDATA
		{

			/// <summary> 年 </summary>
			public int Year ;

			/// <summary> 月 </summary>
			public int Mon ;

			/// <summary> 日 </summary>
			public int Day ;

			/// <summary> 時間 </summary>
			public int Hour ;

			/// <summary> 分 </summary>
			public int Min ;

			/// <summary> 秒 </summary>
			public int Sec ;
		}


		/// <summary> ファイル情報構造体 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct FILEINFO
		{

			/// <summary> オブジェクト名 </summary>
			[ MarshalAs( UnmanagedType.ByValTStr , SizeConst = 260 ) ]
			public string Name ;

			/// <summary> ディレクトリかどうか( TRUE:ディレクトリ  FALSE:ファイル ) </summary>
			public bool DirFlag ;

			/// <summary> サイズ </summary>
			public long Size ;

			/// <summary> 作成時刻 </summary>
			public DATEDATA CreationTime ;

			/// <summary> 最終更新時刻 </summary>
			public DATEDATA LastWriteTime ;
		}


		/// <summary> 行列構造体 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct MATRIX
		{

			public float m_11 ;

			public float m_12 ;

			public float m_13 ;

			public float m_14 ;

			public float m_21 ;

			public float m_22 ;

			public float m_23 ;

			public float m_24 ;

			public float m_31 ;

			public float m_32 ;

			public float m_33 ;

			public float m_34 ;

			public float m_41 ;

			public float m_42 ;

			public float m_43 ;

			public float m_44 ;

			public MATRIX( float m_11 , float m_12 , float m_13 , float m_14 , float m_21 , float m_22 , float m_23 , float m_24 , float m_31 , float m_32 , float m_33 , float m_34 , float m_41 , float m_42 , float m_43 , float m_44 )
			{
				this.m_11 = m_11 ;
				this.m_12 = m_12 ;
				this.m_13 = m_13 ;
				this.m_14 = m_14 ;
				this.m_21 = m_21 ;
				this.m_22 = m_22 ;
				this.m_23 = m_23 ;
				this.m_24 = m_24 ;
				this.m_31 = m_31 ;
				this.m_32 = m_32 ;
				this.m_33 = m_33 ;
				this.m_34 = m_34 ;
				this.m_41 = m_41 ;
				this.m_42 = m_42 ;
				this.m_43 = m_43 ;
				this.m_44 = m_44 ;
			}
		}


		/// <summary> ベクトルデータ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VECTOR
		{

			public float x ;

			public float y ;

			public float z ;

			public VECTOR( float x , float y , float z )
			{
				this.x = x ;
				this.y = y ;
				this.z = z ;
			}
		}


		/// <summary> FLOAT2個データ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct UV
		{

			public float u ;

			public float v ;

			public UV( float u , float v )
			{
				this.u = u ;
				this.v = v ;
			}
		}


		/// <summary> float 型のカラー値 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct COLOR_F
		{

			public float r ;

			public float g ;

			public float b ;

			public float a ;

			public COLOR_F( float r , float g , float b , float a )
			{
				this.r = r ;
				this.g = g ;
				this.b = b ;
				this.a = a ;
			}
		}


		/// <summary> unsigned char 型のカラー値 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct COLOR_U8
		{

			public byte b ;

			public byte g ;

			public byte r ;

			public byte a ;

			public static readonly COLOR_U8 Empty = new COLOR_U8( 0x00 , 0x00 , 0x00 , 0x00 ) ;

			public COLOR_U8( int argb )
			{
				this.b = ( byte )( ( argb >> 0 ) & 0xFF ) ;
				this.g = ( byte )( ( argb >> 8 ) & 0xFF ) ;
				this.r = ( byte )( ( argb >> 16 ) & 0xFF ) ;
				this.a = ( byte )( ( argb >> 24 ) & 0xFF ) ;
			}

			public COLOR_U8( int r , int g , int b )
			{
				this.b = ( byte )( b ) ;
				this.g = ( byte )( g ) ;
				this.r = ( byte )( r ) ;
				this.a = 0 ;
			}

			public COLOR_U8( int r , int g , int b , int a )
			{
				this.b = ( byte )( b ) ;
				this.g = ( byte )( g ) ;
				this.r = ( byte )( r ) ;
				this.a = ( byte )( a ) ;
			}

			public int ToInt()
			{
				return ( ( int )( this.a ) << 24 ) | ( ( int )( this.r ) << 16 ) | ( ( int )( this.g ) << 8 ) | ( ( int )( this.b ) << 0 ) ;
			}
		}


		/// <summary> FLOAT4個データ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct FLOAT4
		{

			public float x ;

			public float y ;

			public float z ;

			public float w ;

			public FLOAT4( float x , float y , float z , float w )
			{
				this.x = x ;
				this.y = y ;
				this.z = z ;
				this.w = w ;
			}
		}


		/// <summary> INT4個データ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct INT4
		{

			public int x ;

			public int y ;

			public int z ;

			public int w ;

			public INT4( int x , int y , int z , int w )
			{
				this.x = x ;
				this.y = y ;
				this.z = z ;
				this.w = w ;
			}
		}


		/// <summary> ２Ｄ描画用頂点構造体(テクスチャ無し) </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VERTEX_NOTEX_2D
		{

			public VECTOR pos ;

			public float rhw ;

			public COLOR_U8 color ;
		}


		/// <summary> ２Ｄ描画に使用する頂点データ型(DrawPrimitive2D用) </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VERTEX2D
		{

			public VECTOR pos ;

			public float rhw ;

			public COLOR_U8 dif ;

			public float u ;

			public float v ;
		}


		/// <summary> ２Ｄ描画に使用する頂点データ型(DrawPrimitive2DToShader用) </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VERTEX2DSHADER
		{

			public VECTOR pos ;

			public float rhw ;

			public COLOR_U8 dif ;

			public COLOR_U8 spc ;

			public float u ;

			public float v ;

			public float su ;

			public float sv ;
		}


		/// <summary> ２Ｄ描画に使用する頂点データ型(公開用) </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VERTEX
		{

			public float x ;

			public float y ;

			public float u ;

			public float v ;

			public byte b ;

			public byte g ;

			public byte r ;

			public byte a ;
		}


		/// <summary> ３Ｄ描画に使用する頂点データ型( 旧バージョンのもの ) </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VERTEX_3D
		{

			public VECTOR pos ;

			public byte b ;

			public byte g ;

			public byte r ;

			public byte a ;

			public float u ;

			public float v ;
		}


		/// <summary> ３Ｄ描画に使用する頂点データ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VERTEX3D
		{

			public VECTOR pos ;

			public VECTOR norm ;

			public COLOR_U8 dif ;

			public COLOR_U8 spc ;

			public float u ;

			public float v ;

			public float su ;

			public float sv ;
		}


		/// <summary> ３Ｄ描画に使用する頂点データ型( DrawPrimitive3DToShader用 )
		/// 注意…メンバ変数に追加があるかもしれませんので、宣言時の初期化( VERTEX3DSHADER Vertex = { 0.0f , 0.0f , ... というようなもの )はしない方が良いです </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct VERTEX3DSHADER
		{

			public VECTOR pos ;

			public VECTOR norm ;

			public COLOR_U8 dif ;

			public COLOR_U8 spc ;

			public float u ;

			public float v ;

			public float su ;

			public float sv ;
		}


		/// <summary> ライトパラメータ </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct LIGHTPARAM
		{

			/// <summary> ライトのタイプ( DX_LIGHTTYPE_D3DLIGHT_POINT 等 ) </summary>
			public DX_LIGHTTYPE LightType ;

			/// <summary> ディフューズカラー </summary>
			public COLOR_F Diffuse ;

			/// <summary> スペキュラカラー </summary>
			public COLOR_F Specular ;

			/// <summary> アンビエント色 </summary>
			public COLOR_F Ambient ;

			/// <summary> 位置 </summary>
			public VECTOR Position ;

			/// <summary> 方向 </summary>
			public VECTOR Direction ;

			/// <summary> 有効距離 </summary>
			public float Range ;

			/// <summary> フォールオフ 1.0f にしておくのが好ましい </summary>
			public float Falloff ;

			/// <summary> 距離による減衰係数０ </summary>
			public float Attenuation0 ;

			/// <summary> 距離による減衰係数１ </summary>
			public float Attenuation1 ;

			/// <summary> 距離による減衰係数２ </summary>
			public float Attenuation2 ;

			/// <summary> スポットライトの内部コーンの照明角度( ラジアン ) </summary>
			public float Theta ;

			/// <summary> スポットライトの外部コーンの照明角度 </summary>
			public float Phi ;
		}


		/// <summary> マテリアルパラメータ </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct MATERIALPARAM
		{

			/// <summary> ディフューズカラー </summary>
			public COLOR_F Diffuse ;

			/// <summary> アンビエントカラー </summary>
			public COLOR_F Ambient ;

			/// <summary> スペキュラカラー </summary>
			public COLOR_F Specular ;

			/// <summary> エミッシブカラー </summary>
			public COLOR_F Emissive ;

			/// <summary> スペキュラハイライトの鮮明度 </summary>
			public float Power ;
		}


		/// <summary> ラインヒットチェック結果格納用構造体 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct HITRESULT_LINE
		{

			/// <summary> 当たったかどうか( 1:当たった  0:当たらなかった ) </summary>
			public bool HitFlag ;

			/// <summary> 当たった座標 </summary>
			public VECTOR Position ;
		}


		/// <summary> コリジョン結果代入用ポリゴン </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct MV1_COLL_RESULT_POLY
		{

			/// <summary> ( MV1CollCheck_Line でのみ有効 )ヒットフラグ( 1:ヒットした  0:ヒットしなかった ) </summary>
			public bool HitFlag ;

			/// <summary> ( MV1CollCheck_Line でのみ有効 )ヒット座標 </summary>
			public VECTOR HitPosition ;

			/// <summary> 当たったポリゴンが含まれるフレームの番号 </summary>
			public int FrameIndex ;

			/// <summary> 当たったポリゴンの番号 </summary>
			public int PolygonIndex ;

			/// <summary> 当たったポリゴンが使用しているマテリアルの番号 </summary>
			public int MaterialIndex ;

			/// <summary> 当たったポリゴンを形成する三点の座標 </summary>
			public VECTOR Position_1 ;

			/// <summary> 当たったポリゴンを形成する三点の座標 </summary>
			public VECTOR Position_2 ;

			/// <summary> 当たったポリゴンを形成する三点の座標 </summary>
			public VECTOR Position_3 ;

			/// <summary> 当たったポリゴンの法線 </summary>
			public VECTOR Normal ;
		}


		/// <summary> 参照用頂点構造体 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct MV1_REF_VERTEX
		{

			/// <summary> 位置 </summary>
			public VECTOR Position ;

			/// <summary> 法線 </summary>
			public VECTOR Normal ;

			/// <summary> テクスチャ座標 </summary>
			public UV TexCoord_1 ;

			/// <summary> テクスチャ座標 </summary>
			public UV TexCoord_2 ;

			/// <summary> ディフューズカラー </summary>
			public COLOR_U8 DiffuseColor ;

			/// <summary> スペキュラカラー </summary>
			public COLOR_U8 SpecularColor ;
		}


		/// <summary> 参照用ポリゴン構造体 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct MV1_REF_POLYGON
		{

			/// <summary> このポリゴンが属しているフレーム </summary>
			public int FrameIndex ;

			/// <summary> 使用しているマテリアル </summary>
			public int MaterialIndex ;

			/// <summary> VIndex が指すインデックスの参照先( 1:フレーム  0:モデル全体 ) </summary>
			public int VIndexTarget ;

			/// <summary> ３角形ポリゴンを成す参照頂点のインデックス </summary>
			public int VIndex_1 ;

			/// <summary> ３角形ポリゴンを成す参照頂点のインデックス </summary>
			public int VIndex_2 ;

			/// <summary> ３角形ポリゴンを成す参照頂点のインデックス </summary>
			public int VIndex_3 ;

			/// <summary> ポリゴンを成す頂点座標の最小値 </summary>
			public VECTOR MinPosition ;

			/// <summary> ポリゴンを成す頂点座標の最大値 </summary>
			public VECTOR MaxPosition ;
		}


		/// <summary> 参照用ポリゴンデータ構造体 </summary>
		public struct MV1_REF_POLYGONLIST
		{

			/// <summary> 頂点座標の最小値 </summary>
			public VECTOR MinPosition ;

			/// <summary> 頂点座標の最大値 </summary>
			public VECTOR MaxPosition ;

			/// <summary> 参照用ポリゴン配列 </summary>
			public MV1_REF_POLYGON[] Polygons ;

			/// <summary> 参照用頂点配列 </summary>
			public MV1_REF_VERTEX[] Vertexs ;
		}


		/// <summary> 座標データ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct POINTDATA
		{

			/// <summary> 座標 </summary>
			public int x ;

			/// <summary> 座標 </summary>
			public int y ;

			/// <summary> 色 </summary>
			public COLOR_U8 color ;

			/// <summary> パラメータ </summary>
			public int pal ;
		}


		/// <summary> ラインデータ型 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct LINEDATA
		{

			/// <summary> 座標 </summary>
			public int x1 ;

			/// <summary> 座標 </summary>
			public int y1 ;

			/// <summary> 座標 </summary>
			public int x2 ;

			/// <summary> 座標 </summary>
			public int y2 ;

			/// <summary> 色 </summary>
			public COLOR_U8 color ;

			/// <summary> パラメータ </summary>
			public int pal ;
		}


		/// <summary> イメージフォーマットデータ </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Sequential , CharSet = CharSet.Ansi ) ]
	#endif
		public struct IMAGEFORMATDESC
		{

			/// <summary> テクスチャか、フラグ( TRUE:テクスチャ  FALSE:標準サーフェス ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool TextureFlag ;

			/// <summary> αチャンネルはあるか、フラグ	( TRUE:ある  FALSE:ない ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool AlphaChFlag ;

			/// <summary> 描画可能か、フラグ( TRUE:可能  FALSE:不可能 ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool DrawValidFlag ;

			/// <summary> システムメモリ上に存在しているか、フラグ( TRUE:システムメモリ上  FALSE:ＶＲＡＭ上 )( 標準サーフェスの時のみ有効 ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool SystemMemFlag ;

			/// <summary> マネージドテクスチャを使用しないか、フラグ </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool NotManagedTextureFlag ;

			/// <summary> 基本フォーマット( DX_BASEIMAGE_FORMAT_NORMAL 等 ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public DX_BASEIMAGE_FORMAT BaseFormat ;

			/// <summary> ミップマップの数 </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public int MipMapCount ;

			/// <summary> αテストチャンネルはあるか、フラグ( TRUE:ある  FALSE:ない )( テクスチャの場合のみ有効 ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool AlphaTestFlag ;

			/// <summary> 色深度( テクスチャの場合のみ有効 ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public int ColorBitDepth ;

			/// <summary> ブレンド用画像か、フラグ </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool BlendGraphFlag ;

			/// <summary> パレットを使用しているか、フラグ( SystemMemFlag が TRUE の場合のみ有効 ) </summary>
			[ MarshalAs( UnmanagedType.U1 ) ]
			public bool UsePaletteFlag ;
		}


		/// <summary> WinSockets使用時のアドレス指定用構造体 </summary>
	#if UNICODE
		[ StructLayout( LayoutKind.Explicit , CharSet = CharSet.Unicode ) ]
	#else
		[ StructLayout( LayoutKind.Explicit , CharSet = CharSet.Ansi ) ]
	#endif
		public struct IPDATA
		{

			/// <summary> アドレス値 </summary>
			[ FieldOffset( 0 ) ]
			public byte d1 ;

			/// <summary> アドレス値 </summary>
			[ FieldOffset( 1 ) ]
			public byte d2 ;

			/// <summary> アドレス値 </summary>
			[ FieldOffset( 2 ) ]
			public byte d3 ;

			/// <summary> アドレス値 </summary>
			[ FieldOffset( 3 ) ]
			public byte d4 ;

			/// <summary> アドレス値 </summary>
			[ FieldOffset( 0 ) ]
			public int dall ;
		}
	}
}
