ホーム › Graphics.OpenGL › PIXELFORMATDESCRIPTOR
PIXELFORMATDESCRIPTOR
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| nSize | WORD | 2 | +0 | +0 | このデータ構造のサイズを指定します。この値には sizeof(PIXELFORMATDESCRIPTOR) を設定してください。 | ||||||||||||||||||||||||||||||||||||||
| nVersion | WORD | 2 | +2 | +2 | このデータ構造のバージョンを指定します。この値には 1 を設定してください。 | ||||||||||||||||||||||||||||||||||||||
| dwFlags | PFD_FLAGS | 4 | +4 | +4 | ピクセルバッファーのプロパティを指定するビットフラグの集合です。これらのプロパティは一般に相互排他ではなく、注記のある例外を除いて、ビットフラグを任意に組み合わせて設定できます。次のビットフラグ定数が定義されています。
ChoosePixelFormat を呼び出すときには、次のビットフラグを指定できます。
glAddSwapHintRectWIN 拡張関数に伴い、PIXELFORMATDESCRIPTOR ピクセル形式構造体には 2 つの新しいフラグが追加されています。
| ||||||||||||||||||||||||||||||||||||||
| iPixelType | PFD_PIXEL_TYPE | 1 | +8 | +8 | ピクセルデータの種類を指定します。次の種類が定義されています。
| ||||||||||||||||||||||||||||||||||||||
| cColorBits | BYTE | 1 | +9 | +9 | 各カラーバッファー内のカラービットプレーンの数を指定します。RGBA ピクセル型の場合は、アルファビットプレーンを除いたカラーバッファーのサイズです。カラーインデックスピクセルの場合は、カラーインデックスバッファーのサイズです。 | ||||||||||||||||||||||||||||||||||||||
| cRedBits | BYTE | 1 | +10 | +10 | 各 RGBA カラーバッファー内の赤のビットプレーンの数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cRedShift | BYTE | 1 | +11 | +11 | 各 RGBA カラーバッファー内の赤のビットプレーンのシフト数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cGreenBits | BYTE | 1 | +12 | +12 | 各 RGBA カラーバッファー内の緑のビットプレーンの数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cGreenShift | BYTE | 1 | +13 | +13 | 各 RGBA カラーバッファー内の緑のビットプレーンのシフト数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cBlueBits | BYTE | 1 | +14 | +14 | 各 RGBA カラーバッファー内の青のビットプレーンの数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cBlueShift | BYTE | 1 | +15 | +15 | 各 RGBA カラーバッファー内の青のビットプレーンのシフト数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cAlphaBits | BYTE | 1 | +16 | +16 | 各 RGBA カラーバッファー内のアルファビットプレーンの数を指定します。アルファビットプレーンはサポートされていません。 | ||||||||||||||||||||||||||||||||||||||
| cAlphaShift | BYTE | 1 | +17 | +17 | 各 RGBA カラーバッファー内のアルファビットプレーンのシフト数を指定します。アルファビットプレーンはサポートされていません。 | ||||||||||||||||||||||||||||||||||||||
| cAccumBits | BYTE | 1 | +18 | +18 | アキュムレーションバッファー内のビットプレーンの総数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cAccumRedBits | BYTE | 1 | +19 | +19 | アキュムレーションバッファー内の赤のビットプレーンの数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cAccumGreenBits | BYTE | 1 | +20 | +20 | アキュムレーションバッファー内の緑のビットプレーンの数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cAccumBlueBits | BYTE | 1 | +21 | +21 | アキュムレーションバッファー内の青のビットプレーンの数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cAccumAlphaBits | BYTE | 1 | +22 | +22 | アキュムレーションバッファー内のアルファビットプレーンの数を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cDepthBits | BYTE | 1 | +23 | +23 | 深度 (z 軸) バッファーの深度を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cStencilBits | BYTE | 1 | +24 | +24 | ステンシルバッファーの深度を指定します。 | ||||||||||||||||||||||||||||||||||||||
| cAuxBuffers | BYTE | 1 | +25 | +25 | 補助バッファーの数を指定します。補助バッファーはサポートされていません。 | ||||||||||||||||||||||||||||||||||||||
| iLayerType | BYTE | 1 | +26 | +26 | 無視されます。以前の OpenGL の実装ではこのメンバーが使用されていましたが、現在は使用されていません。 | ||||||||||||||||||||||||||||||||||||||
| bReserved | BYTE | 1 | +27 | +27 | オーバーレイ面とアンダーレイ面の数を指定します。ビット 0 から 3 で最大 15 個のオーバーレイ面を、ビット 4 から 7 で最大 15 個のアンダーレイ面を指定します。 | ||||||||||||||||||||||||||||||||||||||
| dwLayerMask | DWORD | 4 | +28 | +28 | 無視されます。以前の OpenGL の実装ではこのメンバーが使用されていましたが、現在は使用されていません。 | ||||||||||||||||||||||||||||||||||||||
| dwVisibleMask | DWORD | 4 | +32 | +32 | アンダーレイ面の透明色または透明インデックスを指定します。ピクセル型が RGBA の場合、dwVisibleMask は透明色を表す RGB カラー値です。ピクセル型がカラーインデックスの場合は、透明インデックス値です。 | ||||||||||||||||||||||||||||||||||||||
| dwDamageMask | DWORD | 4 | +36 | +36 | 無視されます。以前の OpenGL の実装ではこのメンバーが使用されていましたが、現在は使用されていません。 |
公式ドキュメント
PIXELFORMATDESCRIPTOR 構造体は、描画サーフェスのピクセル形式を記述します。
解説(Remarks)
上記のとおり、現在の汎用実装ではサポートされていないピクセル形式のプロパティがある点に十分ご注意ください。汎用実装とは、Microsoft GDI による OpenGL のソフトウェア実装のことです。ハードウェアメーカーは OpenGL の一部を拡張することがあり、汎用実装ではサポートされないピクセル形式のプロパティをサポートする場合があります。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// PIXELFORMATDESCRIPTOR (x64 40 / x86 40 バイト)
typedef struct PIXELFORMATDESCRIPTOR {
WORD nSize;
WORD nVersion;
PFD_FLAGS dwFlags;
PFD_PIXEL_TYPE 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 iLayerType;
BYTE bReserved;
DWORD dwLayerMask;
DWORD dwVisibleMask;
DWORD dwDamageMask;
} PIXELFORMATDESCRIPTOR;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PIXELFORMATDESCRIPTOR
{
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 iLayerType;
public byte bReserved;
public uint dwLayerMask;
public uint dwVisibleMask;
public uint dwDamageMask;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PIXELFORMATDESCRIPTOR
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 iLayerType As Byte
Public bReserved As Byte
Public dwLayerMask As UInteger
Public dwVisibleMask As UInteger
Public dwDamageMask As UInteger
End Structureimport ctypes
from ctypes import wintypes
class PIXELFORMATDESCRIPTOR(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),
("iLayerType", ctypes.c_ubyte),
("bReserved", ctypes.c_ubyte),
("dwLayerMask", wintypes.DWORD),
("dwVisibleMask", wintypes.DWORD),
("dwDamageMask", wintypes.DWORD),
]#[repr(C)]
pub struct PIXELFORMATDESCRIPTOR {
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 iLayerType: u8,
pub bReserved: u8,
pub dwLayerMask: u32,
pub dwVisibleMask: u32,
pub dwDamageMask: u32,
}import "golang.org/x/sys/windows"
type PIXELFORMATDESCRIPTOR 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
iLayerType byte
bReserved byte
dwLayerMask uint32
dwVisibleMask uint32
dwDamageMask uint32
}type
PIXELFORMATDESCRIPTOR = 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;
iLayerType: Byte;
bReserved: Byte;
dwLayerMask: DWORD;
dwVisibleMask: DWORD;
dwDamageMask: DWORD;
end;const PIXELFORMATDESCRIPTOR = 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,
iLayerType: u8,
bReserved: u8,
dwLayerMask: u32,
dwVisibleMask: u32,
dwDamageMask: u32,
};type
PIXELFORMATDESCRIPTOR {.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
iLayerType: uint8
bReserved: uint8
dwLayerMask: uint32
dwVisibleMask: uint32
dwDamageMask: uint32struct PIXELFORMATDESCRIPTOR
{
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 iLayerType;
ubyte bReserved;
uint dwLayerMask;
uint dwVisibleMask;
uint dwDamageMask;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PIXELFORMATDESCRIPTOR サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; nSize : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; nVersion : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; dwFlags : PFD_FLAGS (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; iPixelType : PFD_PIXEL_TYPE (+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)
; iLayerType : BYTE (+26, 1byte) poke st,26,値 / 値 = peek(st,26)
; bReserved : BYTE (+27, 1byte) poke st,27,値 / 値 = peek(st,27)
; dwLayerMask : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; dwVisibleMask : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dwDamageMask : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PIXELFORMATDESCRIPTOR
#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 iLayerType
#field byte bReserved
#field int dwLayerMask
#field int dwVisibleMask
#field int dwDamageMask
#endstruct
stdim st, PIXELFORMATDESCRIPTOR ; NSTRUCT 変数を確保
st->nSize = 100
mes "nSize=" + st->nSize