DDBLTBATCH
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lprDest | RECT* | 8/4 | +0 | +0 | bitblt の転送先を定義する RECT 構造体のアドレスです。 |
| lpDDSSrc | IDirectDrawSurface* | 8/4 | +8 | +4 | bitblt のソースとなる DirectDrawSurface オブジェクトのアドレスです。 |
| lprSrc | RECT* | 8/4 | +16 | +8 | bitblt のソース矩形を定義する RECT 構造体のアドレスです。 |
| dwFlags | DWORD | 4 | +24 | +12 | 省略可能な制御フラグです。次の値が定義されています。 DDBLT_ALPHADESTこの bitblt のアルファチャネルとして、ピクセル形式内のアルファ情報、または転送先サーフェスにアタッチされているアルファチャネルサーフェスを使用します。 DDBLT_ALPHADESTCONSTOVERRIDEこの bitblt の転送先サーフェスのアルファチャネルとして、DDBLTFX 構造体の dwAlphaDestConst メンバーを使用します。 DDBLT_ALPHADESTNEGアルファ値が大きくなるほど、転送先サーフェスの透明度が高くなります (0 が不透明)。 DDBLT_ALPHADESTSURFACEOVERRIDEこの bitblt の転送先サーフェスのアルファチャネルとして、DDBLTFX 構造体の lpDDSAlphaDest メンバーを使用します。 DDBLT_ALPHAEDGEBLENDカラーキーの色に隣接する画像の縁のアルファチャネルとして、DDBLTFX 構造体の dwAlphaEdgeBlend メンバーを使用します。 DDBLT_ALPHASRCこの bitblt のアルファチャネルとして、ピクセル形式内のアルファ情報、またはソースサーフェスにアタッチされているアルファチャネルサーフェスを使用します。 DDBLT_ALPHASRCCONSTOVERRIDEこの bitblt のソースのアルファチャネルとして、DDBLTFX 構造体の dwAlphaSrcConst メンバーを使用します。 DDBLT_ALPHASRCNEGアルファ値が大きくなるほど、ソースサーフェスの透明度が高くなります (0 が不透明)。 DDBLT_ALPHASRCSURFACEOVERRIDEこの bitblt のアルファチャネルのソースとして、DDBLTFX 構造体の lpDDSAlphaSrc メンバーを使用します。 DDBLT_ASYNCこの bitblt を、受け取った順に先入れ先出し (FIFO) ハードウェアを介して非同期に実行します。FIFO ハードウェアに空きがない場合、この呼び出しは失敗します。 DDBLT_COLORFILL転送先サーフェス上の転送先矩形を塗りつぶす RGB カラーとして、DDBLTFX 構造体の dwFillColor メンバーを使用します。 DDBLT_DDFXこの bitblt で使用する効果を指定するために、DDBLTFX 構造体の dwDDFX メンバーを使用します。 DDBLT_DDROPSWin32 API に含まれないラスターオペレーション (ROPS) を指定するために、DDBLTFX 構造体の dwDDROP メンバーを使用します。 DDBLT_KEYDEST転送先サーフェスに関連付けられているカラーキーを使用します。 DDBLT_KEYDESTOVERRIDE転送先サーフェスのカラーキーとして、DDBLTFX 構造体の ddckDestColorkey メンバーを使用します。 DDBLT_KEYSRCソースサーフェスに関連付けられているカラーキーを使用します。 DDBLT_KEYSRCOVERRIDEソースサーフェスのカラーキーとして、DDBLTFX 構造体の ddckSrcColorkey メンバーを使用します。 DDBLT_ROPこの bitblt の ROP として、DDBLTFX 構造体の dwROP メンバーを使用します。これらの ROP は Win32 API で定義されているものと同じです。 DDBLT_ROTATIONANGLEサーフェスの回転角度 (1/100 度単位で指定) として、DDBLTFX 構造体の dwRotationAngle メンバーを使用します。 DDBLT_ZBUFFERソースサーフェスと転送先サーフェスにアタッチされている z バッファーを使用し、DDBLTFX 構造体の dwZBufferOpCode メンバーを z バッファーのオペコードとして、z バッファーを使用する bitblt を実行します。 DDBLT_ZBUFFERDESTCONSTOVERRIDEDDBLTFX 構造体の dwZDestConst メンバーと dwZBufferOpCode メンバーを、それぞれ転送先の z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。 DDBLT_ZBUFFERDESTOVERRIDEDDBLTFX 構造体の lpDDSZBufferDest メンバーと dwZBufferOpCode メンバーを、それぞれ転送先の z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。 DDBLT_ZBUFFERSRCCONSTOVERRIDEDDBLTFX 構造体の dwZSrcConst メンバーと dwZBufferOpCode メンバーを、それぞれソースの z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。 DDBLT_ZBUFFERSRCOVERRIDEDDBLTFX 構造体の lpDDSZBufferSrc メンバーと dwZBufferOpCode メンバーを、それぞれソースの z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。 |
| lpDDBltFx | DDBLTFX* | 8/4 | +32 | +16 | 追加の bitblt 効果を指定する DDBLTFX 構造体のアドレスです。 |
公式ドキュメント
DDBLTBATCH 構造体は、ビットブロック転送 (bitblt) 操作を IDirectDrawSurface7::BltBatch メソッドに渡します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// DDBLTBATCH (x64 40 / x86 20 バイト)
typedef struct DDBLTBATCH {
RECT* lprDest;
IDirectDrawSurface* lpDDSSrc;
RECT* lprSrc;
DWORD dwFlags;
DDBLTFX* lpDDBltFx;
} DDBLTBATCH;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DDBLTBATCH
{
public IntPtr lprDest;
public IntPtr lpDDSSrc;
public IntPtr lprSrc;
public uint dwFlags;
public IntPtr lpDDBltFx;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DDBLTBATCH
Public lprDest As IntPtr
Public lpDDSSrc As IntPtr
Public lprSrc As IntPtr
Public dwFlags As UInteger
Public lpDDBltFx As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class DDBLTBATCH(ctypes.Structure):
_fields_ = [
("lprDest", ctypes.c_void_p),
("lpDDSSrc", ctypes.c_void_p),
("lprSrc", ctypes.c_void_p),
("dwFlags", wintypes.DWORD),
("lpDDBltFx", ctypes.c_void_p),
]#[repr(C)]
pub struct DDBLTBATCH {
pub lprDest: *mut core::ffi::c_void,
pub lpDDSSrc: *mut core::ffi::c_void,
pub lprSrc: *mut core::ffi::c_void,
pub dwFlags: u32,
pub lpDDBltFx: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type DDBLTBATCH struct {
lprDest uintptr
lpDDSSrc uintptr
lprSrc uintptr
dwFlags uint32
lpDDBltFx uintptr
}type
DDBLTBATCH = record
lprDest: Pointer;
lpDDSSrc: Pointer;
lprSrc: Pointer;
dwFlags: DWORD;
lpDDBltFx: Pointer;
end;const DDBLTBATCH = extern struct {
lprDest: ?*anyopaque,
lpDDSSrc: ?*anyopaque,
lprSrc: ?*anyopaque,
dwFlags: u32,
lpDDBltFx: ?*anyopaque,
};type
DDBLTBATCH {.bycopy.} = object
lprDest: pointer
lpDDSSrc: pointer
lprSrc: pointer
dwFlags: uint32
lpDDBltFx: pointerstruct DDBLTBATCH
{
void* lprDest;
void* lpDDSSrc;
void* lprSrc;
uint dwFlags;
void* lpDDBltFx;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DDBLTBATCH サイズ: 20 バイト(x86)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; lprDest : RECT* (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; lpDDSSrc : IDirectDrawSurface* (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; lprSrc : RECT* (+8, 4byte) varptr(st)+8 を基点に操作(4byte:入れ子/配列)
; dwFlags : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; lpDDBltFx : DDBLTFX* (+16, 4byte) varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DDBLTBATCH サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; lprDest : RECT* (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; lpDDSSrc : IDirectDrawSurface* (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; lprSrc : RECT* (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; dwFlags : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; lpDDBltFx : DDBLTFX* (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DDBLTBATCH
#field intptr lprDest
#field intptr lpDDSSrc
#field intptr lprSrc
#field int dwFlags
#field intptr lpDDBltFx
#endstruct
stdim st, DDBLTBATCH ; NSTRUCT 変数を確保
st->dwFlags = 100
mes "dwFlags=" + st->dwFlags