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

DDBLTBATCH

構造体
サイズx64: 40 バイト / x86: 20 バイト

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

フィールド

フィールドサイズx64x86説明
lprDestRECT*8/4+0+0bitblt の転送先を定義する RECT 構造体のアドレスです。
lpDDSSrcIDirectDrawSurface*8/4+8+4bitblt のソースとなる DirectDrawSurface オブジェクトのアドレスです。
lprSrcRECT*8/4+16+8bitblt のソース矩形を定義する RECT 構造体のアドレスです。
dwFlagsDWORD4+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_DDROPS

Win32 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_ZBUFFERDESTCONSTOVERRIDE

DDBLTFX 構造体の dwZDestConst メンバーと dwZBufferOpCode メンバーを、それぞれ転送先の z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。

DDBLT_ZBUFFERDESTOVERRIDE

DDBLTFX 構造体の lpDDSZBufferDest メンバーと dwZBufferOpCode メンバーを、それぞれ転送先の z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。

DDBLT_ZBUFFERSRCCONSTOVERRIDE

DDBLTFX 構造体の dwZSrcConst メンバーと dwZBufferOpCode メンバーを、それぞれソースの z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。

DDBLT_ZBUFFERSRCOVERRIDE

DDBLTFX 構造体の lpDDSZBufferSrc メンバーと dwZBufferOpCode メンバーを、それぞれソースの z バッファーおよび z バッファーのオペコードとして使用し、z バッファーを使用する bitblt を実行します。

lpDDBltFxDDBLTFX*8/4+32+16追加の bitblt 効果を指定する DDBLTFX 構造体のアドレスです。

公式ドキュメント

DDBLTBATCH 構造体は、ビットブロック転送 (bitblt) 操作を IDirectDrawSurface7::BltBatch メソッドに渡します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 Structure
import 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: pointer
struct 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