gpt4 book ai didi

delphi - OpenGL:如何限制图像组件?

转载 作者:行者123 更新时间:2023-12-03 18:25:09 27 4
gpt4 key购买 nike

我正忙着使用 Delphi (pascal) 爬升 OpenGL 的学习曲线;我使用的是优秀的文本,但书中的每个示例都吸引了整个表单。我想在 from 上放置一个图像组件,然后绘制它。我尝试将设备上下文句柄 (GDC) 分配给图像控件 Canvas 的句柄,而不是表单的句柄,但是在调用 ChoosePixelFormat 时会返回错误。

因此,如果有人知道如何实现这一点,我将不胜感激任何建议。

提前感谢您的帮助。

小多纳

最佳答案

我总是使用以下代码为 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;

如您所知 (?),窗口句柄 (HWND) 和设备上下文 (DC) 之间存在巨大差异。每个窗口都有一个 HWND,每个可以绘制的窗口都有一个 HDC。给定一个表格, Handle是它的 HWND, Canvas.Handle是它的HDC。

要获取与窗口关联的 DC,您可以使用 GetDC(HWND) .

您必须在窗口上设置 OpenGL,即在 HWND 上。所以你不能在没有窗口句柄的控件上渲染 OpenGL,例如 TImage .使用 TPanelTWinControl 的其他后代.

关于delphi - OpenGL:如何限制图像组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3444217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com