【发布时间】:2026-01-31 19:15:01
【问题描述】:
我正在制作一个应用程序,其中包含一堆小窗口和控件(2D 渲染),我想将每个窗口和控件渲染到它自己的位图上。这是到目前为止:
uses dglOpenGL;
...
var BMP: TBitmap;
DC, RC: HDC;
...
function TMainForm.Init: Boolean;
begin
Result := InitOpenGL;
if Result = True then
begin
BMP := TBitmap.Create;
BMP.PixelFormat := pf24bit;
BMP.Width := 1280;
BMP.Height := 1024;
DC := (BMP.Canvas.Handle);
RC := CreateRenderingContext(DC,
[opGDI, opDoubleBuffered], // tried changing, didn't help
24,
24,
0,
0,
0,
0);
ActivateRenderingContext(DC, RC);
glClearColor(0.27, 0.4, 0.7, 0.0); // light blue
glViewport(0, 0, 1280, 1024);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0, 1280, 0, 1024, -1, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
end;
end;
渲染过程:
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
// red quad
glColor3f(1, 0, 0);
glBegin(GL_QUADS);
glVertex2f(100, 100);
glVertex2f(1280-100, 100);
glVertex2f(1280-100, 1024-100);
glVertex2f(100, 1024-100);
glend;
// swap
SwapBuffers(DC);
但是没有输出。
如果我使用MainForm.Canvas.Draw(0, 0, BMP);,则会出现一个白色矩形。
我想在位图上进行渲染,因为我可以用位图做很多事情(绘制其他图像、绘制文本、模糊),但是如果有其他方法可以进行屏幕外渲染,那也没关系...
那么如何设置我的应用程序以进行离屏渲染?
【问题讨论】:
-
superset: *.com/questions/3191978/… ,大多数答案应该有效
标签: windows delphi opengl rendering delphi-7