ホーム › Graphics.DirectDraw › DDSURFACEDESC
DDSURFACEDESC
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | 構造体サイズ(バイト数)。呼び出し前に設定する。 |
| dwFlags | DWORD | 4 | +4 | +4 | 有効なフィールドを示すDDSD_系フラグの組み合わせ。 |
| dwHeight | DWORD | 4 | +8 | +8 | サーフェスの高さ(ピクセル)を示す。 |
| dwWidth | DWORD | 4 | +12 | +12 | サーフェスの幅(ピクセル)を示す。 |
| Anonymous1 | _Anonymous1_e__Union | 4 | +16 | +16 | ピッチ(行バイト数)またはリンクサイズを保持する共用体。 |
| dwBackBufferCount | DWORD | 4 | +20 | +20 | フリップチェーンのバックバッファ数を示す。 |
| Anonymous2 | _Anonymous2_e__Union | 4 | +24 | +24 | メモリ数やミップマップ数/リフレッシュレート等を保持する共用体。 |
| dwAlphaBitDepth | DWORD | 4 | +28 | +28 | アルファチャネルのビット深度を示す。 |
| dwReserved | DWORD | 4 | +32 | +32 | 予約フィールド。0とする。 |
| lpSurface | void* | 8/4 | +40 | +36 | サーフェスメモリ先頭へのポインタ。Lock時に有効。 |
| ddckCKDestOverlay | DDCOLORKEY | 8 | +48 | +40 | 転送先オーバーレイ用カラーキー(DDCOLORKEY)。 |
| ddckCKDestBlt | DDCOLORKEY | 8 | +56 | +48 | 転送先Blt用カラーキー(DDCOLORKEY)。 |
| ddckCKSrcOverlay | DDCOLORKEY | 8 | +64 | +56 | 転送元オーバーレイ用カラーキー(DDCOLORKEY)。 |
| ddckCKSrcBlt | DDCOLORKEY | 8 | +72 | +64 | 転送元Blt用カラーキー(DDCOLORKEY)。 |
| ddpfPixelFormat | DDPIXELFORMAT | 40/32 | +80 | +72 | サーフェスのピクセル形式(DDPIXELFORMAT)。 |
| ddsCaps | DDSCAPS | 4 | +120 | +104 | サーフェスの能力/種別(DDSCAPS)。 |
共用体: _Anonymous1_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| lPitch | INT | 4 | +0 | +0 |
| dwLinearSize | DWORD | 4 | +0 | +0 |
共用体: _Anonymous2_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 |
|---|---|---|---|---|
| dwMipMapCount | DWORD | 4 | +0 | +0 |
| dwZBufferBitDepth | DWORD | 4 | +0 | +0 |
| dwRefreshRate | DWORD | 4 | +0 | +0 |
各言語での定義
#include <windows.h>
// DDCOLORKEY (x64 8 / x86 8 バイト)
typedef struct DDCOLORKEY {
DWORD dwColorSpaceLowValue;
DWORD dwColorSpaceHighValue;
} DDCOLORKEY;
// DDPIXELFORMAT (x64 40 / x86 32 バイト)
typedef struct DDPIXELFORMAT {
DWORD dwSize;
DWORD dwFlags;
DWORD dwFourCC;
_Anonymous1_e__Union Anonymous1;
_Anonymous2_e__Union Anonymous2;
_Anonymous3_e__Union Anonymous3;
_Anonymous4_e__Union Anonymous4;
_Anonymous5_e__Union Anonymous5;
} DDPIXELFORMAT;
// DDSCAPS (x64 4 / x86 4 バイト)
typedef struct DDSCAPS {
DWORD dwCaps;
} DDSCAPS;
// DDSURFACEDESC (x64 128 / x86 108 バイト)
typedef struct DDSURFACEDESC {
DWORD dwSize;
DWORD dwFlags;
DWORD dwHeight;
DWORD dwWidth;
_Anonymous1_e__Union Anonymous1;
DWORD dwBackBufferCount;
_Anonymous2_e__Union Anonymous2;
DWORD dwAlphaBitDepth;
DWORD dwReserved;
void* lpSurface;
DDCOLORKEY ddckCKDestOverlay;
DDCOLORKEY ddckCKDestBlt;
DDCOLORKEY ddckCKSrcOverlay;
DDCOLORKEY ddckCKSrcBlt;
DDPIXELFORMAT ddpfPixelFormat;
DDSCAPS ddsCaps;
} DDSURFACEDESC;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDCOLORKEY
{
public uint dwColorSpaceLowValue;
public uint dwColorSpaceHighValue;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDPIXELFORMAT
{
public uint dwSize;
public uint dwFlags;
public uint dwFourCC;
public _Anonymous1_e__Union Anonymous1;
public _Anonymous2_e__Union Anonymous2;
public _Anonymous3_e__Union Anonymous3;
public _Anonymous4_e__Union Anonymous4;
public _Anonymous5_e__Union Anonymous5;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDSCAPS
{
public uint dwCaps;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDSURFACEDESC
{
public uint dwSize;
public uint dwFlags;
public uint dwHeight;
public uint dwWidth;
public _Anonymous1_e__Union Anonymous1;
public uint dwBackBufferCount;
public _Anonymous2_e__Union Anonymous2;
public uint dwAlphaBitDepth;
public uint dwReserved;
public IntPtr lpSurface;
public DDCOLORKEY ddckCKDestOverlay;
public DDCOLORKEY ddckCKDestBlt;
public DDCOLORKEY ddckCKSrcOverlay;
public DDCOLORKEY ddckCKSrcBlt;
public DDPIXELFORMAT ddpfPixelFormat;
public DDSCAPS ddsCaps;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDCOLORKEY
Public dwColorSpaceLowValue As UInteger
Public dwColorSpaceHighValue As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDPIXELFORMAT
Public dwSize As UInteger
Public dwFlags As UInteger
Public dwFourCC As UInteger
Public Anonymous1 As _Anonymous1_e__Union
Public Anonymous2 As _Anonymous2_e__Union
Public Anonymous3 As _Anonymous3_e__Union
Public Anonymous4 As _Anonymous4_e__Union
Public Anonymous5 As _Anonymous5_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDSCAPS
Public dwCaps As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDSURFACEDESC
Public dwSize As UInteger
Public dwFlags As UInteger
Public dwHeight As UInteger
Public dwWidth As UInteger
Public Anonymous1 As _Anonymous1_e__Union
Public dwBackBufferCount As UInteger
Public Anonymous2 As _Anonymous2_e__Union
Public dwAlphaBitDepth As UInteger
Public dwReserved As UInteger
Public lpSurface As IntPtr
Public ddckCKDestOverlay As DDCOLORKEY
Public ddckCKDestBlt As DDCOLORKEY
Public ddckCKSrcOverlay As DDCOLORKEY
Public ddckCKSrcBlt As DDCOLORKEY
Public ddpfPixelFormat As DDPIXELFORMAT
Public ddsCaps As DDSCAPS
End Structureimport ctypes
from ctypes import wintypes
class DDCOLORKEY(ctypes.Structure):
_fields_ = [
("dwColorSpaceLowValue", wintypes.DWORD),
("dwColorSpaceHighValue", wintypes.DWORD),
]
class DDPIXELFORMAT(ctypes.Structure):
_fields_ = [
("dwSize", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("dwFourCC", wintypes.DWORD),
("Anonymous1", _Anonymous1_e__Union),
("Anonymous2", _Anonymous2_e__Union),
("Anonymous3", _Anonymous3_e__Union),
("Anonymous4", _Anonymous4_e__Union),
("Anonymous5", _Anonymous5_e__Union),
]
class DDSCAPS(ctypes.Structure):
_fields_ = [
("dwCaps", wintypes.DWORD),
]
class DDSURFACEDESC(ctypes.Structure):
_fields_ = [
("dwSize", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("dwHeight", wintypes.DWORD),
("dwWidth", wintypes.DWORD),
("Anonymous1", _Anonymous1_e__Union),
("dwBackBufferCount", wintypes.DWORD),
("Anonymous2", _Anonymous2_e__Union),
("dwAlphaBitDepth", wintypes.DWORD),
("dwReserved", wintypes.DWORD),
("lpSurface", ctypes.c_void_p),
("ddckCKDestOverlay", DDCOLORKEY),
("ddckCKDestBlt", DDCOLORKEY),
("ddckCKSrcOverlay", DDCOLORKEY),
("ddckCKSrcBlt", DDCOLORKEY),
("ddpfPixelFormat", DDPIXELFORMAT),
("ddsCaps", DDSCAPS),
]#[repr(C)]
pub struct DDCOLORKEY {
pub dwColorSpaceLowValue: u32,
pub dwColorSpaceHighValue: u32,
}
#[repr(C)]
pub struct DDPIXELFORMAT {
pub dwSize: u32,
pub dwFlags: u32,
pub dwFourCC: u32,
pub Anonymous1: _Anonymous1_e__Union,
pub Anonymous2: _Anonymous2_e__Union,
pub Anonymous3: _Anonymous3_e__Union,
pub Anonymous4: _Anonymous4_e__Union,
pub Anonymous5: _Anonymous5_e__Union,
}
#[repr(C)]
pub struct DDSCAPS {
pub dwCaps: u32,
}
#[repr(C)]
pub struct DDSURFACEDESC {
pub dwSize: u32,
pub dwFlags: u32,
pub dwHeight: u32,
pub dwWidth: u32,
pub Anonymous1: _Anonymous1_e__Union,
pub dwBackBufferCount: u32,
pub Anonymous2: _Anonymous2_e__Union,
pub dwAlphaBitDepth: u32,
pub dwReserved: u32,
pub lpSurface: *mut core::ffi::c_void,
pub ddckCKDestOverlay: DDCOLORKEY,
pub ddckCKDestBlt: DDCOLORKEY,
pub ddckCKSrcOverlay: DDCOLORKEY,
pub ddckCKSrcBlt: DDCOLORKEY,
pub ddpfPixelFormat: DDPIXELFORMAT,
pub ddsCaps: DDSCAPS,
}import "golang.org/x/sys/windows"
type DDCOLORKEY struct {
dwColorSpaceLowValue uint32
dwColorSpaceHighValue uint32
}
type DDPIXELFORMAT struct {
dwSize uint32
dwFlags uint32
dwFourCC uint32
Anonymous1 _Anonymous1_e__Union
Anonymous2 _Anonymous2_e__Union
Anonymous3 _Anonymous3_e__Union
Anonymous4 _Anonymous4_e__Union
Anonymous5 _Anonymous5_e__Union
}
type DDSCAPS struct {
dwCaps uint32
}
type DDSURFACEDESC struct {
dwSize uint32
dwFlags uint32
dwHeight uint32
dwWidth uint32
Anonymous1 _Anonymous1_e__Union
dwBackBufferCount uint32
Anonymous2 _Anonymous2_e__Union
dwAlphaBitDepth uint32
dwReserved uint32
lpSurface uintptr
ddckCKDestOverlay DDCOLORKEY
ddckCKDestBlt DDCOLORKEY
ddckCKSrcOverlay DDCOLORKEY
ddckCKSrcBlt DDCOLORKEY
ddpfPixelFormat DDPIXELFORMAT
ddsCaps DDSCAPS
}type
DDCOLORKEY = record
dwColorSpaceLowValue: DWORD;
dwColorSpaceHighValue: DWORD;
end;
DDPIXELFORMAT = record
dwSize: DWORD;
dwFlags: DWORD;
dwFourCC: DWORD;
Anonymous1: _Anonymous1_e__Union;
Anonymous2: _Anonymous2_e__Union;
Anonymous3: _Anonymous3_e__Union;
Anonymous4: _Anonymous4_e__Union;
Anonymous5: _Anonymous5_e__Union;
end;
DDSCAPS = record
dwCaps: DWORD;
end;
DDSURFACEDESC = record
dwSize: DWORD;
dwFlags: DWORD;
dwHeight: DWORD;
dwWidth: DWORD;
Anonymous1: _Anonymous1_e__Union;
dwBackBufferCount: DWORD;
Anonymous2: _Anonymous2_e__Union;
dwAlphaBitDepth: DWORD;
dwReserved: DWORD;
lpSurface: Pointer;
ddckCKDestOverlay: DDCOLORKEY;
ddckCKDestBlt: DDCOLORKEY;
ddckCKSrcOverlay: DDCOLORKEY;
ddckCKSrcBlt: DDCOLORKEY;
ddpfPixelFormat: DDPIXELFORMAT;
ddsCaps: DDSCAPS;
end;const DDCOLORKEY = extern struct {
dwColorSpaceLowValue: u32,
dwColorSpaceHighValue: u32,
};
const DDPIXELFORMAT = extern struct {
dwSize: u32,
dwFlags: u32,
dwFourCC: u32,
Anonymous1: _Anonymous1_e__Union,
Anonymous2: _Anonymous2_e__Union,
Anonymous3: _Anonymous3_e__Union,
Anonymous4: _Anonymous4_e__Union,
Anonymous5: _Anonymous5_e__Union,
};
const DDSCAPS = extern struct {
dwCaps: u32,
};
const DDSURFACEDESC = extern struct {
dwSize: u32,
dwFlags: u32,
dwHeight: u32,
dwWidth: u32,
Anonymous1: _Anonymous1_e__Union,
dwBackBufferCount: u32,
Anonymous2: _Anonymous2_e__Union,
dwAlphaBitDepth: u32,
dwReserved: u32,
lpSurface: ?*anyopaque,
ddckCKDestOverlay: DDCOLORKEY,
ddckCKDestBlt: DDCOLORKEY,
ddckCKSrcOverlay: DDCOLORKEY,
ddckCKSrcBlt: DDCOLORKEY,
ddpfPixelFormat: DDPIXELFORMAT,
ddsCaps: DDSCAPS,
};type
DDCOLORKEY {.bycopy.} = object
dwColorSpaceLowValue: uint32
dwColorSpaceHighValue: uint32
DDPIXELFORMAT {.bycopy.} = object
dwSize: uint32
dwFlags: uint32
dwFourCC: uint32
Anonymous1: _Anonymous1_e__Union
Anonymous2: _Anonymous2_e__Union
Anonymous3: _Anonymous3_e__Union
Anonymous4: _Anonymous4_e__Union
Anonymous5: _Anonymous5_e__Union
DDSCAPS {.bycopy.} = object
dwCaps: uint32
DDSURFACEDESC {.bycopy.} = object
dwSize: uint32
dwFlags: uint32
dwHeight: uint32
dwWidth: uint32
Anonymous1: _Anonymous1_e__Union
dwBackBufferCount: uint32
Anonymous2: _Anonymous2_e__Union
dwAlphaBitDepth: uint32
dwReserved: uint32
lpSurface: pointer
ddckCKDestOverlay: DDCOLORKEY
ddckCKDestBlt: DDCOLORKEY
ddckCKSrcOverlay: DDCOLORKEY
ddckCKSrcBlt: DDCOLORKEY
ddpfPixelFormat: DDPIXELFORMAT
ddsCaps: DDSCAPSstruct DDCOLORKEY
{
uint dwColorSpaceLowValue;
uint dwColorSpaceHighValue;
}
struct DDPIXELFORMAT
{
uint dwSize;
uint dwFlags;
uint dwFourCC;
_Anonymous1_e__Union Anonymous1;
_Anonymous2_e__Union Anonymous2;
_Anonymous3_e__Union Anonymous3;
_Anonymous4_e__Union Anonymous4;
_Anonymous5_e__Union Anonymous5;
}
struct DDSCAPS
{
uint dwCaps;
}
struct DDSURFACEDESC
{
uint dwSize;
uint dwFlags;
uint dwHeight;
uint dwWidth;
_Anonymous1_e__Union Anonymous1;
uint dwBackBufferCount;
_Anonymous2_e__Union Anonymous2;
uint dwAlphaBitDepth;
uint dwReserved;
void* lpSurface;
DDCOLORKEY ddckCKDestOverlay;
DDCOLORKEY ddckCKDestBlt;
DDCOLORKEY ddckCKSrcOverlay;
DDCOLORKEY ddckCKSrcBlt;
DDPIXELFORMAT ddpfPixelFormat;
DDSCAPS ddsCaps;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DDSURFACEDESC サイズ: 108 バイト(x86)
dim st, 27 ; 4byte整数×27(構造体サイズ 108 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwHeight : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwWidth : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+16, 4byte) varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; dwBackBufferCount : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Anonymous2 : _Anonymous2_e__Union (+24, 4byte) varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; dwAlphaBitDepth : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwReserved : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; lpSurface : void* (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ddckCKDestOverlay : DDCOLORKEY (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; ddckCKDestBlt : DDCOLORKEY (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; ddckCKSrcOverlay : DDCOLORKEY (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; ddckCKSrcBlt : DDCOLORKEY (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; ddpfPixelFormat : DDPIXELFORMAT (+72, 32byte) varptr(st)+72 を基点に操作(32byte:入れ子/配列)
; ddsCaps : DDSCAPS (+104, 4byte) varptr(st)+104 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDSURFACEDESC サイズ: 128 バイト(x64)
dim st, 32 ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwHeight : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwWidth : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+16, 4byte) varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; dwBackBufferCount : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Anonymous2 : _Anonymous2_e__Union (+24, 4byte) varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; dwAlphaBitDepth : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwReserved : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; lpSurface : void* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; ddckCKDestOverlay : DDCOLORKEY (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; ddckCKDestBlt : DDCOLORKEY (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; ddckCKSrcOverlay : DDCOLORKEY (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; ddckCKSrcBlt : DDCOLORKEY (+72, 8byte) varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; ddpfPixelFormat : DDPIXELFORMAT (+80, 40byte) varptr(st)+80 を基点に操作(40byte:入れ子/配列)
; ddsCaps : DDSCAPS (+120, 4byte) varptr(st)+120 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DDCOLORKEY
#field int dwColorSpaceLowValue
#field int dwColorSpaceHighValue
#endstruct
#defstruct global DDPIXELFORMAT
#field int dwSize
#field int dwFlags
#field int dwFourCC
#field byte Anonymous1 4
#field byte Anonymous2 4
#field byte Anonymous3 8
#field byte Anonymous4 4
#field byte Anonymous5 4
#endstruct
#defstruct global DDSCAPS
#field int dwCaps
#endstruct
#defstruct global DDSURFACEDESC
#field int dwSize
#field int dwFlags
#field int dwHeight
#field int dwWidth
#field byte Anonymous1 4
#field int dwBackBufferCount
#field byte Anonymous2 4
#field int dwAlphaBitDepth
#field int dwReserved
#field intptr lpSurface
#field DDCOLORKEY ddckCKDestOverlay
#field DDCOLORKEY ddckCKDestBlt
#field DDCOLORKEY ddckCKSrcOverlay
#field DDCOLORKEY ddckCKSrcBlt
#field DDPIXELFORMAT ddpfPixelFormat
#field DDSCAPS ddsCaps
#endstruct
stdim st, DDSURFACEDESC ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。