ホーム › Graphics.DirectDraw › DDOPTSURFACEDESC
DDOPTSURFACEDESC
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | 構造体サイズ(バイト数)。呼び出し前に設定する。 |
| dwFlags | DWORD | 4 | +4 | +4 | 有効なフィールドを示すフラグの組み合わせ。 |
| ddSCaps | DDSCAPS2 | 16 | +8 | +8 | 最適化サーフェスの能力(DDSCAPS2)を示す。 |
| ddOSCaps | DDOSCAPS | 4 | +24 | +24 | 最適化サーフェス固有の能力(DDOSCAPS)を示す。 |
| guid | GUID | 16 | +28 | +28 | 最適化形式を識別するGUID。 |
| dwCompressionRatio | DWORD | 4 | +44 | +44 | 最適化による圧縮率を示す。 |
各言語での定義
#include <windows.h>
// DDSCAPS2 (x64 16 / x86 16 バイト)
typedef struct DDSCAPS2 {
DWORD dwCaps;
DWORD dwCaps2;
DWORD dwCaps3;
_Anonymous_e__Union Anonymous;
} DDSCAPS2;
// DDOSCAPS (x64 4 / x86 4 バイト)
typedef struct DDOSCAPS {
DWORD dwCaps;
} DDOSCAPS;
// DDOPTSURFACEDESC (x64 48 / x86 48 バイト)
typedef struct DDOPTSURFACEDESC {
DWORD dwSize;
DWORD dwFlags;
DDSCAPS2 ddSCaps;
DDOSCAPS ddOSCaps;
GUID guid;
DWORD dwCompressionRatio;
} DDOPTSURFACEDESC;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDSCAPS2
{
public uint dwCaps;
public uint dwCaps2;
public uint dwCaps3;
public _Anonymous_e__Union Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDOSCAPS
{
public uint dwCaps;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDOPTSURFACEDESC
{
public uint dwSize;
public uint dwFlags;
public DDSCAPS2 ddSCaps;
public DDOSCAPS ddOSCaps;
public Guid guid;
public uint dwCompressionRatio;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDSCAPS2
Public dwCaps As UInteger
Public dwCaps2 As UInteger
Public dwCaps3 As UInteger
Public Anonymous As _Anonymous_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDOSCAPS
Public dwCaps As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDOPTSURFACEDESC
Public dwSize As UInteger
Public dwFlags As UInteger
Public ddSCaps As DDSCAPS2
Public ddOSCaps As DDOSCAPS
Public guid As Guid
Public dwCompressionRatio As UInteger
End Structureimport ctypes
from ctypes import wintypes
class DDSCAPS2(ctypes.Structure):
_fields_ = [
("dwCaps", wintypes.DWORD),
("dwCaps2", wintypes.DWORD),
("dwCaps3", wintypes.DWORD),
("Anonymous", _Anonymous_e__Union),
]
class DDOSCAPS(ctypes.Structure):
_fields_ = [
("dwCaps", wintypes.DWORD),
]
class DDOPTSURFACEDESC(ctypes.Structure):
_fields_ = [
("dwSize", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("ddSCaps", DDSCAPS2),
("ddOSCaps", DDOSCAPS),
("guid", GUID),
("dwCompressionRatio", wintypes.DWORD),
]#[repr(C)]
pub struct DDSCAPS2 {
pub dwCaps: u32,
pub dwCaps2: u32,
pub dwCaps3: u32,
pub Anonymous: _Anonymous_e__Union,
}
#[repr(C)]
pub struct DDOSCAPS {
pub dwCaps: u32,
}
#[repr(C)]
pub struct DDOPTSURFACEDESC {
pub dwSize: u32,
pub dwFlags: u32,
pub ddSCaps: DDSCAPS2,
pub ddOSCaps: DDOSCAPS,
pub guid: GUID,
pub dwCompressionRatio: u32,
}import "golang.org/x/sys/windows"
type DDSCAPS2 struct {
dwCaps uint32
dwCaps2 uint32
dwCaps3 uint32
Anonymous _Anonymous_e__Union
}
type DDOSCAPS struct {
dwCaps uint32
}
type DDOPTSURFACEDESC struct {
dwSize uint32
dwFlags uint32
ddSCaps DDSCAPS2
ddOSCaps DDOSCAPS
guid windows.GUID
dwCompressionRatio uint32
}type
DDSCAPS2 = record
dwCaps: DWORD;
dwCaps2: DWORD;
dwCaps3: DWORD;
Anonymous: _Anonymous_e__Union;
end;
DDOSCAPS = record
dwCaps: DWORD;
end;
DDOPTSURFACEDESC = record
dwSize: DWORD;
dwFlags: DWORD;
ddSCaps: DDSCAPS2;
ddOSCaps: DDOSCAPS;
guid: TGUID;
dwCompressionRatio: DWORD;
end;const DDSCAPS2 = extern struct {
dwCaps: u32,
dwCaps2: u32,
dwCaps3: u32,
Anonymous: _Anonymous_e__Union,
};
const DDOSCAPS = extern struct {
dwCaps: u32,
};
const DDOPTSURFACEDESC = extern struct {
dwSize: u32,
dwFlags: u32,
ddSCaps: DDSCAPS2,
ddOSCaps: DDOSCAPS,
guid: GUID,
dwCompressionRatio: u32,
};type
DDSCAPS2 {.bycopy.} = object
dwCaps: uint32
dwCaps2: uint32
dwCaps3: uint32
Anonymous: _Anonymous_e__Union
DDOSCAPS {.bycopy.} = object
dwCaps: uint32
DDOPTSURFACEDESC {.bycopy.} = object
dwSize: uint32
dwFlags: uint32
ddSCaps: DDSCAPS2
ddOSCaps: DDOSCAPS
guid: GUID
dwCompressionRatio: uint32struct DDSCAPS2
{
uint dwCaps;
uint dwCaps2;
uint dwCaps3;
_Anonymous_e__Union Anonymous;
}
struct DDOSCAPS
{
uint dwCaps;
}
struct DDOPTSURFACEDESC
{
uint dwSize;
uint dwFlags;
DDSCAPS2 ddSCaps;
DDOSCAPS ddOSCaps;
GUID guid;
uint dwCompressionRatio;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDOPTSURFACEDESC サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; ddSCaps : DDSCAPS2 (+8, 16byte) varptr(st)+8 を基点に操作(16byte:入れ子/配列)
; ddOSCaps : DDOSCAPS (+24, 4byte) varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; guid : GUID (+28, 16byte) varptr(st)+28 を基点に操作(16byte:入れ子/配列)
; dwCompressionRatio : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DDSCAPS2
#field int dwCaps
#field int dwCaps2
#field int dwCaps3
#field byte Anonymous 4
#endstruct
#defstruct global DDOSCAPS
#field int dwCaps
#endstruct
#defstruct global GUID, pack=1
#field int Data1
#field short Data2
#field short Data3
#field byte Data4 8
#endstruct
#defstruct global DDOPTSURFACEDESC
#field int dwSize
#field int dwFlags
#field DDSCAPS2 ddSCaps
#field DDOSCAPS ddOSCaps
#field GUID guid
#field int dwCompressionRatio
#endstruct
stdim st, DDOPTSURFACEDESC ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize