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

LAYERPLANEDESCRIPTOR

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

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

フィールド

フィールドサイズx64x86説明
nSizeWORD2+0+0このデータ構造体のサイズを指定します。この値には sizeof(LAYERPLANEDESCRIPTOR) を設定します。
nVersionWORD2+2+2このデータ構造体のバージョンを指定します。この値には 1 を設定します。
dwFlagsDWORD4+4+4

レイヤープレーンのプロパティを指定するビットフラグの集合です。これらのプロパティは一般に排他的ではなく、注記のある場合を除き、ビットフラグの任意の組み合わせを設定できます。次のビットフラグ定数が定義されています。

意味
LPD_SUPPORT_OPENGL レイヤープレーンは OpenGL による描画をサポートします。
LPD_SUPPORT_GDI レイヤープレーンは GDI による描画をサポートします。現在の OpenGL の実装ではこのフラグはサポートされていません。
LPD_DOUBLEBUFFER レイヤープレーンはダブルバッファーです。メインプレーンがシングルバッファーであってもレイヤープレーンをダブルバッファーにすることができ、その逆も可能です。
LPD_STEREO レイヤープレーンはステレオスコピックです。メインプレーンがモノスコピックであってもレイヤープレーンをステレオスコピックにすることができ、その逆も可能です。
LPD_SWAP_EXCHANGE ダブルバッファーのレイヤープレーンでは、カラーバッファーのスワップによってフロントバッファーとバックバッファーの内容が交換されます。スワップ後、バックバッファーにはスワップ前のフロントバッファーの内容が格納されます。このフラグはヒントにすぎず、ドライバーによっては提供されない場合があります。
LPD_SWAP_COPY ダブルバッファーのレイヤープレーンでは、カラーバッファーのスワップによってバックバッファーの内容がフロントバッファーにコピーされます。スワップはバックバッファーの内容に影響しません。このフラグはヒントにすぎず、ドライバーによっては提供されない場合があります。
LPD_TRANSPARENT この構造体の crTransparent メンバーに、下位のレイヤーをこのレイヤー越しに表示させる透明色または透明インデックス値が格納されます。番号が最も小さいアンダーレイレイヤーを除くすべてのレイヤープレーンは、透明色または透明インデックスを持ちます。
LPD_SHARE_DEPTH レイヤープレーンはメインプレーンと深度バッファーを共有します。
LPD_SHARE_STENCIL レイヤープレーンはメインプレーンとステンシルバッファーを共有します。
LPD_SHARE_ACCUM レイヤープレーンはメインプレーンと集積バッファーを共有します。
iPixelTypeBYTE1+8+8

ピクセルデータの種類を指定します。次の種類が定義されています。

意味
LPD_TYPE_RGBA RGBA ピクセルです。各ピクセルは赤、緑、青、アルファの 4 つの成分を持ちます。
LPD_TYPE_COLORINDEX カラーインデックスピクセルです。各ピクセルはカラーインデックス値を使用します。
cColorBitsBYTE1+9+9各カラーバッファー内のカラービットプレーンの数を指定します。RGBA ピクセル型の場合はアルファビットプレーンを除いたカラーバッファーのサイズであり、カラーインデックスピクセルの場合はカラーインデックスバッファーのサイズです。
cRedBitsBYTE1+10+10各 RGBA カラーバッファー内の赤のビットプレーンの数を指定します。
cRedShiftBYTE1+11+11各 RGBA カラーバッファー内の赤のビットプレーンのシフト数を指定します。
cGreenBitsBYTE1+12+12各 RGBA カラーバッファー内の緑のビットプレーンの数を指定します。
cGreenShiftBYTE1+13+13各 RGBA カラーバッファー内の緑のビットプレーンのシフト数を指定します。
cBlueBitsBYTE1+14+14各 RGBA カラーバッファー内の青のビットプレーンの数を指定します。
cBlueShiftBYTE1+15+15各 RGBA カラーバッファー内の青のビットプレーンのシフト数を指定します。
cAlphaBitsBYTE1+16+16各 RGBA カラーバッファー内のアルファビットプレーンの数を指定します。アルファビットプレーンはサポートされていません。
cAlphaShiftBYTE1+17+17各 RGBA カラーバッファー内のアルファビットプレーンのシフト数を指定します。アルファビットプレーンはサポートされていません。
cAccumBitsBYTE1+18+18集積バッファー内のビットプレーンの総数を指定します。
cAccumRedBitsBYTE1+19+19集積バッファー内の赤のビットプレーンの数を指定します。
cAccumGreenBitsBYTE1+20+20集積バッファー内の緑のビットプレーンの数を指定します。
cAccumBlueBitsBYTE1+21+21集積バッファー内の青のビットプレーンの数を指定します。
cAccumAlphaBitsBYTE1+22+22集積バッファー内のアルファビットプレーンの数を指定します。
cDepthBitsBYTE1+23+23深度 (z 軸) バッファーの深度を指定します。
cStencilBitsBYTE1+24+24ステンシルバッファーの深度を指定します。
cAuxBuffersBYTE1+25+25補助バッファーの数を指定します。補助バッファーはサポートされていません。
iLayerPlaneBYTE1+26+26オーバーレイ/アンダーレイのプレーン番号。正でオーバーレイ、負でアンダーレイ。
bReservedBYTE1+27+27使用されません。0 でなければなりません。
crTransparentCOLORREF4+28+28

LPD_TRANSPARENT フラグが設定されている場合に、透明色または透明インデックス値を指定します。通常、この値は 0 です。

- iLayerType

レイヤープレーンの番号を指定します。iLayerType の正の値はオーバーレイプレーンを示し、1 はメインプレーンの上の最初のオーバーレイプレーン、2 は最初のオーバーレイプレーンの上の 2 番目のオーバーレイプレーン、というように続きます。負の値はアンダーレイプレーンを示し、1 はメインプレーンの下の最初のアンダーレイプレーン、2 は最初のアンダーレイプレーンの下の 2 番目のアンダーレイプレーン、というように続きます。オーバーレイプレーンとアンダーレイプレーンの数は、PIXELFORMATDESCRIPTOR 構造体の bReserved メンバーで示されます。

公式ドキュメント

LAYERPLANEDESCRIPTOR 構造体は、描画サーフェスのピクセル形式を記述します。

解説(Remarks)

上記のとおり、現在の実装では一部のレイヤープレーンのプロパティがサポートされていない点にご注意ください。ここでいう実装とは、Microsoft GDI による OpenGL のソフトウェア実装です。OpenGL の一部を拡張しているハードウェアメーカーでは、汎用実装ではサポートされないレイヤープレーンのプロパティをサポートしている場合があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// LAYERPLANEDESCRIPTOR  (x64 32 / x86 32 バイト)
typedef struct LAYERPLANEDESCRIPTOR {
    WORD nSize;
    WORD nVersion;
    DWORD dwFlags;
    BYTE iPixelType;
    BYTE cColorBits;
    BYTE cRedBits;
    BYTE cRedShift;
    BYTE cGreenBits;
    BYTE cGreenShift;
    BYTE cBlueBits;
    BYTE cBlueShift;
    BYTE cAlphaBits;
    BYTE cAlphaShift;
    BYTE cAccumBits;
    BYTE cAccumRedBits;
    BYTE cAccumGreenBits;
    BYTE cAccumBlueBits;
    BYTE cAccumAlphaBits;
    BYTE cDepthBits;
    BYTE cStencilBits;
    BYTE cAuxBuffers;
    BYTE iLayerPlane;
    BYTE bReserved;
    COLORREF crTransparent;
} LAYERPLANEDESCRIPTOR;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LAYERPLANEDESCRIPTOR
{
    public ushort nSize;
    public ushort nVersion;
    public uint dwFlags;
    public byte iPixelType;
    public byte cColorBits;
    public byte cRedBits;
    public byte cRedShift;
    public byte cGreenBits;
    public byte cGreenShift;
    public byte cBlueBits;
    public byte cBlueShift;
    public byte cAlphaBits;
    public byte cAlphaShift;
    public byte cAccumBits;
    public byte cAccumRedBits;
    public byte cAccumGreenBits;
    public byte cAccumBlueBits;
    public byte cAccumAlphaBits;
    public byte cDepthBits;
    public byte cStencilBits;
    public byte cAuxBuffers;
    public byte iLayerPlane;
    public byte bReserved;
    public uint crTransparent;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LAYERPLANEDESCRIPTOR
    Public nSize As UShort
    Public nVersion As UShort
    Public dwFlags As UInteger
    Public iPixelType As Byte
    Public cColorBits As Byte
    Public cRedBits As Byte
    Public cRedShift As Byte
    Public cGreenBits As Byte
    Public cGreenShift As Byte
    Public cBlueBits As Byte
    Public cBlueShift As Byte
    Public cAlphaBits As Byte
    Public cAlphaShift As Byte
    Public cAccumBits As Byte
    Public cAccumRedBits As Byte
    Public cAccumGreenBits As Byte
    Public cAccumBlueBits As Byte
    Public cAccumAlphaBits As Byte
    Public cDepthBits As Byte
    Public cStencilBits As Byte
    Public cAuxBuffers As Byte
    Public iLayerPlane As Byte
    Public bReserved As Byte
    Public crTransparent As UInteger
End Structure
import ctypes
from ctypes import wintypes

class LAYERPLANEDESCRIPTOR(ctypes.Structure):
    _fields_ = [
        ("nSize", ctypes.c_ushort),
        ("nVersion", ctypes.c_ushort),
        ("dwFlags", wintypes.DWORD),
        ("iPixelType", ctypes.c_ubyte),
        ("cColorBits", ctypes.c_ubyte),
        ("cRedBits", ctypes.c_ubyte),
        ("cRedShift", ctypes.c_ubyte),
        ("cGreenBits", ctypes.c_ubyte),
        ("cGreenShift", ctypes.c_ubyte),
        ("cBlueBits", ctypes.c_ubyte),
        ("cBlueShift", ctypes.c_ubyte),
        ("cAlphaBits", ctypes.c_ubyte),
        ("cAlphaShift", ctypes.c_ubyte),
        ("cAccumBits", ctypes.c_ubyte),
        ("cAccumRedBits", ctypes.c_ubyte),
        ("cAccumGreenBits", ctypes.c_ubyte),
        ("cAccumBlueBits", ctypes.c_ubyte),
        ("cAccumAlphaBits", ctypes.c_ubyte),
        ("cDepthBits", ctypes.c_ubyte),
        ("cStencilBits", ctypes.c_ubyte),
        ("cAuxBuffers", ctypes.c_ubyte),
        ("iLayerPlane", ctypes.c_ubyte),
        ("bReserved", ctypes.c_ubyte),
        ("crTransparent", wintypes.DWORD),
    ]
#[repr(C)]
pub struct LAYERPLANEDESCRIPTOR {
    pub nSize: u16,
    pub nVersion: u16,
    pub dwFlags: u32,
    pub iPixelType: u8,
    pub cColorBits: u8,
    pub cRedBits: u8,
    pub cRedShift: u8,
    pub cGreenBits: u8,
    pub cGreenShift: u8,
    pub cBlueBits: u8,
    pub cBlueShift: u8,
    pub cAlphaBits: u8,
    pub cAlphaShift: u8,
    pub cAccumBits: u8,
    pub cAccumRedBits: u8,
    pub cAccumGreenBits: u8,
    pub cAccumBlueBits: u8,
    pub cAccumAlphaBits: u8,
    pub cDepthBits: u8,
    pub cStencilBits: u8,
    pub cAuxBuffers: u8,
    pub iLayerPlane: u8,
    pub bReserved: u8,
    pub crTransparent: u32,
}
import "golang.org/x/sys/windows"

type LAYERPLANEDESCRIPTOR struct {
	nSize uint16
	nVersion uint16
	dwFlags uint32
	iPixelType byte
	cColorBits byte
	cRedBits byte
	cRedShift byte
	cGreenBits byte
	cGreenShift byte
	cBlueBits byte
	cBlueShift byte
	cAlphaBits byte
	cAlphaShift byte
	cAccumBits byte
	cAccumRedBits byte
	cAccumGreenBits byte
	cAccumBlueBits byte
	cAccumAlphaBits byte
	cDepthBits byte
	cStencilBits byte
	cAuxBuffers byte
	iLayerPlane byte
	bReserved byte
	crTransparent uint32
}
type
  LAYERPLANEDESCRIPTOR = record
    nSize: Word;
    nVersion: Word;
    dwFlags: DWORD;
    iPixelType: Byte;
    cColorBits: Byte;
    cRedBits: Byte;
    cRedShift: Byte;
    cGreenBits: Byte;
    cGreenShift: Byte;
    cBlueBits: Byte;
    cBlueShift: Byte;
    cAlphaBits: Byte;
    cAlphaShift: Byte;
    cAccumBits: Byte;
    cAccumRedBits: Byte;
    cAccumGreenBits: Byte;
    cAccumBlueBits: Byte;
    cAccumAlphaBits: Byte;
    cDepthBits: Byte;
    cStencilBits: Byte;
    cAuxBuffers: Byte;
    iLayerPlane: Byte;
    bReserved: Byte;
    crTransparent: DWORD;
  end;
const LAYERPLANEDESCRIPTOR = extern struct {
    nSize: u16,
    nVersion: u16,
    dwFlags: u32,
    iPixelType: u8,
    cColorBits: u8,
    cRedBits: u8,
    cRedShift: u8,
    cGreenBits: u8,
    cGreenShift: u8,
    cBlueBits: u8,
    cBlueShift: u8,
    cAlphaBits: u8,
    cAlphaShift: u8,
    cAccumBits: u8,
    cAccumRedBits: u8,
    cAccumGreenBits: u8,
    cAccumBlueBits: u8,
    cAccumAlphaBits: u8,
    cDepthBits: u8,
    cStencilBits: u8,
    cAuxBuffers: u8,
    iLayerPlane: u8,
    bReserved: u8,
    crTransparent: u32,
};
type
  LAYERPLANEDESCRIPTOR {.bycopy.} = object
    nSize: uint16
    nVersion: uint16
    dwFlags: uint32
    iPixelType: uint8
    cColorBits: uint8
    cRedBits: uint8
    cRedShift: uint8
    cGreenBits: uint8
    cGreenShift: uint8
    cBlueBits: uint8
    cBlueShift: uint8
    cAlphaBits: uint8
    cAlphaShift: uint8
    cAccumBits: uint8
    cAccumRedBits: uint8
    cAccumGreenBits: uint8
    cAccumBlueBits: uint8
    cAccumAlphaBits: uint8
    cDepthBits: uint8
    cStencilBits: uint8
    cAuxBuffers: uint8
    iLayerPlane: uint8
    bReserved: uint8
    crTransparent: uint32
struct LAYERPLANEDESCRIPTOR
{
    ushort nSize;
    ushort nVersion;
    uint dwFlags;
    ubyte iPixelType;
    ubyte cColorBits;
    ubyte cRedBits;
    ubyte cRedShift;
    ubyte cGreenBits;
    ubyte cGreenShift;
    ubyte cBlueBits;
    ubyte cBlueShift;
    ubyte cAlphaBits;
    ubyte cAlphaShift;
    ubyte cAccumBits;
    ubyte cAccumRedBits;
    ubyte cAccumGreenBits;
    ubyte cAccumBlueBits;
    ubyte cAccumAlphaBits;
    ubyte cDepthBits;
    ubyte cStencilBits;
    ubyte cAuxBuffers;
    ubyte iLayerPlane;
    ubyte bReserved;
    uint crTransparent;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; LAYERPLANEDESCRIPTOR サイズ: 32 バイト(x64)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; nSize : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; nVersion : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; dwFlags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; iPixelType : BYTE (+8, 1byte)  poke st,8,値  /  値 = peek(st,8)
; cColorBits : BYTE (+9, 1byte)  poke st,9,値  /  値 = peek(st,9)
; cRedBits : BYTE (+10, 1byte)  poke st,10,値  /  値 = peek(st,10)
; cRedShift : BYTE (+11, 1byte)  poke st,11,値  /  値 = peek(st,11)
; cGreenBits : BYTE (+12, 1byte)  poke st,12,値  /  値 = peek(st,12)
; cGreenShift : BYTE (+13, 1byte)  poke st,13,値  /  値 = peek(st,13)
; cBlueBits : BYTE (+14, 1byte)  poke st,14,値  /  値 = peek(st,14)
; cBlueShift : BYTE (+15, 1byte)  poke st,15,値  /  値 = peek(st,15)
; cAlphaBits : BYTE (+16, 1byte)  poke st,16,値  /  値 = peek(st,16)
; cAlphaShift : BYTE (+17, 1byte)  poke st,17,値  /  値 = peek(st,17)
; cAccumBits : BYTE (+18, 1byte)  poke st,18,値  /  値 = peek(st,18)
; cAccumRedBits : BYTE (+19, 1byte)  poke st,19,値  /  値 = peek(st,19)
; cAccumGreenBits : BYTE (+20, 1byte)  poke st,20,値  /  値 = peek(st,20)
; cAccumBlueBits : BYTE (+21, 1byte)  poke st,21,値  /  値 = peek(st,21)
; cAccumAlphaBits : BYTE (+22, 1byte)  poke st,22,値  /  値 = peek(st,22)
; cDepthBits : BYTE (+23, 1byte)  poke st,23,値  /  値 = peek(st,23)
; cStencilBits : BYTE (+24, 1byte)  poke st,24,値  /  値 = peek(st,24)
; cAuxBuffers : BYTE (+25, 1byte)  poke st,25,値  /  値 = peek(st,25)
; iLayerPlane : BYTE (+26, 1byte)  poke st,26,値  /  値 = peek(st,26)
; bReserved : BYTE (+27, 1byte)  poke st,27,値  /  値 = peek(st,27)
; crTransparent : COLORREF (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global LAYERPLANEDESCRIPTOR
    #field short nSize
    #field short nVersion
    #field int dwFlags
    #field byte iPixelType
    #field byte cColorBits
    #field byte cRedBits
    #field byte cRedShift
    #field byte cGreenBits
    #field byte cGreenShift
    #field byte cBlueBits
    #field byte cBlueShift
    #field byte cAlphaBits
    #field byte cAlphaShift
    #field byte cAccumBits
    #field byte cAccumRedBits
    #field byte cAccumGreenBits
    #field byte cAccumBlueBits
    #field byte cAccumAlphaBits
    #field byte cDepthBits
    #field byte cStencilBits
    #field byte cAuxBuffers
    #field byte iLayerPlane
    #field byte bReserved
    #field int crTransparent
#endstruct

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