Win32 API 日本語リファレンス
ホームGraphics.DirectDraw › DDCOMPBUFFERINFO

DDCOMPBUFFERINFO

構造体
サイズx64: 80 バイト / x86: 68 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0この構造体のサイズをバイト単位で示す。
dwNumCompBuffersDWORD4+4+4作成すべき圧縮バッファの個数。
dwWidthToCreateDWORD4+8+8作成するバッファの幅をピクセル単位で示す。
dwHeightToCreateDWORD4+12+12作成するバッファの高さをピクセル単位で示す。
dwBytesToAllocateDWORD4+16+16バッファ1個あたりに割り当てるバイト数。
ddCompCapsDDSCAPS216+20+20バッファの能力を示すDDSCAPS2。
ddPixelFormatDDPIXELFORMAT40/32+40+36バッファのピクセル形式を示すDDPIXELFORMAT。

各言語での定義

#include <windows.h>

// DDSCAPS2  (x64 16 / x86 16 バイト)
typedef struct DDSCAPS2 {
    DWORD dwCaps;
    DWORD dwCaps2;
    DWORD dwCaps3;
    _Anonymous_e__Union Anonymous;
} DDSCAPS2;

// 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;

// DDCOMPBUFFERINFO  (x64 80 / x86 68 バイト)
typedef struct DDCOMPBUFFERINFO {
    DWORD dwSize;
    DWORD dwNumCompBuffers;
    DWORD dwWidthToCreate;
    DWORD dwHeightToCreate;
    DWORD dwBytesToAllocate;
    DDSCAPS2 ddCompCaps;
    DDPIXELFORMAT ddPixelFormat;
} DDCOMPBUFFERINFO;
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 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 DDCOMPBUFFERINFO
{
    public uint dwSize;
    public uint dwNumCompBuffers;
    public uint dwWidthToCreate;
    public uint dwHeightToCreate;
    public uint dwBytesToAllocate;
    public DDSCAPS2 ddCompCaps;
    public DDPIXELFORMAT ddPixelFormat;
}
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 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 DDCOMPBUFFERINFO
    Public dwSize As UInteger
    Public dwNumCompBuffers As UInteger
    Public dwWidthToCreate As UInteger
    Public dwHeightToCreate As UInteger
    Public dwBytesToAllocate As UInteger
    Public ddCompCaps As DDSCAPS2
    Public ddPixelFormat As DDPIXELFORMAT
End Structure
import ctypes
from ctypes import wintypes

class DDSCAPS2(ctypes.Structure):
    _fields_ = [
        ("dwCaps", wintypes.DWORD),
        ("dwCaps2", wintypes.DWORD),
        ("dwCaps3", wintypes.DWORD),
        ("Anonymous", _Anonymous_e__Union),
    ]

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 DDCOMPBUFFERINFO(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("dwNumCompBuffers", wintypes.DWORD),
        ("dwWidthToCreate", wintypes.DWORD),
        ("dwHeightToCreate", wintypes.DWORD),
        ("dwBytesToAllocate", wintypes.DWORD),
        ("ddCompCaps", DDSCAPS2),
        ("ddPixelFormat", DDPIXELFORMAT),
    ]
#[repr(C)]
pub struct DDSCAPS2 {
    pub dwCaps: u32,
    pub dwCaps2: u32,
    pub dwCaps3: u32,
    pub Anonymous: _Anonymous_e__Union,
}

#[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 DDCOMPBUFFERINFO {
    pub dwSize: u32,
    pub dwNumCompBuffers: u32,
    pub dwWidthToCreate: u32,
    pub dwHeightToCreate: u32,
    pub dwBytesToAllocate: u32,
    pub ddCompCaps: DDSCAPS2,
    pub ddPixelFormat: DDPIXELFORMAT,
}
import "golang.org/x/sys/windows"

type DDSCAPS2 struct {
	dwCaps uint32
	dwCaps2 uint32
	dwCaps3 uint32
	Anonymous _Anonymous_e__Union
}

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 DDCOMPBUFFERINFO struct {
	dwSize uint32
	dwNumCompBuffers uint32
	dwWidthToCreate uint32
	dwHeightToCreate uint32
	dwBytesToAllocate uint32
	ddCompCaps DDSCAPS2
	ddPixelFormat DDPIXELFORMAT
}
type
  DDSCAPS2 = record
    dwCaps: DWORD;
    dwCaps2: DWORD;
    dwCaps3: DWORD;
    Anonymous: _Anonymous_e__Union;
  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;

  DDCOMPBUFFERINFO = record
    dwSize: DWORD;
    dwNumCompBuffers: DWORD;
    dwWidthToCreate: DWORD;
    dwHeightToCreate: DWORD;
    dwBytesToAllocate: DWORD;
    ddCompCaps: DDSCAPS2;
    ddPixelFormat: DDPIXELFORMAT;
  end;
const DDSCAPS2 = extern struct {
    dwCaps: u32,
    dwCaps2: u32,
    dwCaps3: u32,
    Anonymous: _Anonymous_e__Union,
};

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 DDCOMPBUFFERINFO = extern struct {
    dwSize: u32,
    dwNumCompBuffers: u32,
    dwWidthToCreate: u32,
    dwHeightToCreate: u32,
    dwBytesToAllocate: u32,
    ddCompCaps: DDSCAPS2,
    ddPixelFormat: DDPIXELFORMAT,
};
type
  DDSCAPS2 {.bycopy.} = object
    dwCaps: uint32
    dwCaps2: uint32
    dwCaps3: uint32
    Anonymous: _Anonymous_e__Union

  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

  DDCOMPBUFFERINFO {.bycopy.} = object
    dwSize: uint32
    dwNumCompBuffers: uint32
    dwWidthToCreate: uint32
    dwHeightToCreate: uint32
    dwBytesToAllocate: uint32
    ddCompCaps: DDSCAPS2
    ddPixelFormat: DDPIXELFORMAT
struct DDSCAPS2
{
    uint dwCaps;
    uint dwCaps2;
    uint dwCaps3;
    _Anonymous_e__Union Anonymous;
}

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 DDCOMPBUFFERINFO
{
    uint dwSize;
    uint dwNumCompBuffers;
    uint dwWidthToCreate;
    uint dwHeightToCreate;
    uint dwBytesToAllocate;
    DDSCAPS2 ddCompCaps;
    DDPIXELFORMAT ddPixelFormat;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DDCOMPBUFFERINFO サイズ: 68 バイト(x86)
dim st, 17    ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwNumCompBuffers : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwWidthToCreate : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwHeightToCreate : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwBytesToAllocate : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ddCompCaps : DDSCAPS2 (+20, 16byte)  varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; ddPixelFormat : DDPIXELFORMAT (+36, 32byte)  varptr(st)+36 を基点に操作(32byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDCOMPBUFFERINFO サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwNumCompBuffers : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwWidthToCreate : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwHeightToCreate : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwBytesToAllocate : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ddCompCaps : DDSCAPS2 (+20, 16byte)  varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; ddPixelFormat : DDPIXELFORMAT (+40, 40byte)  varptr(st)+40 を基点に操作(40byte:入れ子/配列)
; ※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 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 DDCOMPBUFFERINFO
    #field int dwSize
    #field int dwNumCompBuffers
    #field int dwWidthToCreate
    #field int dwHeightToCreate
    #field int dwBytesToAllocate
    #field DDSCAPS2 ddCompCaps
    #field DDPIXELFORMAT ddPixelFormat
#endstruct

stdim st, DDCOMPBUFFERINFO        ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize