我正在忙着使用Delphi(pascal)攀登OpenGL的学习曲线; 我正在使用优秀的文本,但书中的每个例子都会使用整个表格.我想在from上放置一个图像组件,然后绘制它.我尝试将Device上下文句柄(GDC)分配给图像控件画布的句柄,而不是表单的句柄,但是在调用ChoosePixelFormat时会返回错误.
所以,如果有人知道如何实现这一点,我会很感激任何建议.
在此先感谢您的帮助.
jrDoner
我总是使用以下代码为OpenGL输出设置窗口HWND:
procedure rglSetupGL(Handle: HWnd);
var
DC: HDC;
PixelFormat: integer;
const
PFD: TPixelFormatDescriptor = (
nSize: sizeOf(TPixelFormatDescriptor);
nVersion: 1;
dwFlags: PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or PFD_DOUBLEBUFFER;
iPixelType: PFD_TYPE_RGBA;
cColorBits: 24;
cRedBits: 0;
cRedShift: 0;
cGreenBits: 0;
cGreenShift: 0;
cBlueBits: 0;
cBlueShift: 0;
cAlphaBits: 24;
cAlphaShift: 0;
cAccumBits: 0;
cAccumRedBits: 0;
cAccumGreenBits: 0;
cAccumBlueBits: 0;
cAccumAlphaBits: 0;
cDepthBits: 16;
cStencilBits: 0;
cAuxBuffers: 0;
iLayerType: PFD_MAIN_PLANE;
bReserved: 0;
dwLayerMask: 0;
dwVisibleMask: 0;
dwDamageMask: 0);
begin
DC := GetDC(Handle);
PixelFormat := ChoosePixelFormat(DC, @PFD);
SetPixelFormat(DC, PixelFormat, @PFD);
RC := wglCreateContext(DC);
wglMakeCurrent(DC, RC);
end;
Run Code Online (Sandbox Code Playgroud)
正如你知道的(?),有一个巨大的窗口句柄(HWNDs)和设备上下文(DCS)之间的差异.每个窗口都有一个HWND,你可以绘制的每个窗口都有一个HDC.给定一个形式,Handle
是它的HWND,Canvas.Handle
是它的HDC.
要获得与窗口关联的DC,您可以使用GetDC(HWND)
.
您必须在窗口上设置OpenGL,即在HWND上.所以你不能在没有窗口句柄的控件上渲染OpenGL,比如a TImage
.使用一个TPanel
或一些其他的后代TWinControl
.
归档时间: |
|
查看次数: |
500 次 |
最近记录: |