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

标签 delphi opengl

我正忙着使用 Delphi (pascal) 攀登 OpenGL 的学习曲线;我使用的是一篇优秀的文本,但书中的每个例子都引用了整个表格。我想在源上放置一个图像组件,然后绘制到该组件上。我尝试将设备上下文句柄 (GDC) 分配给图像控件 Canvas 的句柄,而不是窗体的句柄,但在调用 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;

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

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

您必须在窗口(即 HWND)上设置 OpenGL。因此,您无法在没有窗口句柄的控件(例如 TImage)上渲染 OpenGL。使用 TPanelTWinControl 的其他后代。

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

相关文章:

java - libGDX:如何渲染瓦片 map ?

delphi - Delphi 中的选项卡式文档界面

delphi - 在Delphi中切换模态形式

delphi - 如何解决Delphi错误: Incompatible types: 'PWideChar' and 'Pointer'

delphi - 在 OpenGL 渲染上下文之上叠加图形

c++ - 以纹理/纯色绘制透明孔

OpenGL alpha 值使纹理更白?

opengl - 在 OpenGL 中使用 Blender/SketchUp 模型

delphi - 在 Delphi 中通过 RJ12 发送信号

delphi - 如何改进在字典中加载和搜索的代码(Delphi)?