OpenGL:如何限制图像组件?

Joh*_*ner 2 delphi opengl

我正在忙着使用Delphi(pascal)攀登OpenGL的学习曲线; 我正在使用优秀的文本,但书中的每个例子都会使用整个表格.我想在from上放置一个图像组件,然后绘制它.我尝试将Device上下文句柄(GDC)分配给图像控件画布的句柄,而不是表单的句柄,但是在调用ChoosePixelFormat时会返回错误.

所以,如果有人知道如何实现这一点,我会很感激任何建议.

在此先感谢您的帮助.

jrDoner

And*_*and 5

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