OpenGLを使ってTImeggeへ描画しようとしていますが、うまくいきません。
TButton(Button1)を押すことで描画が実行されるようにしていますが、
全体が白く初期化されてしまい、描画が実行されていないように見えます。
どこがおかしいか教えていただけませんでしょうか?
procedure TForm1.Button1Click(Sender: TObject);
var
mhrc:hglrc;
ipixelformat:integer;
pfd:tpixelformatdescriptor;
begin
with pfd do
begin
nSize:=sizeof(pfd);
nVersion:=1;
dwFlags:=PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL;
iPixelType:=PFD_TYPE_RGBA;
cColorBits:=32;
cRedBits:=0;
cRedShift:=0;
cGreenBits:=0;
cGreenShift:=0;
cBlueBits:=0;
cBlueShift:=0;
cAlphaBits:=0;
cAlphaShift:=0;
cAccumBits:=0;
cAccumRedBits:=0;
cAccumGreenBits:=0;
cAccumBlueBits:=0;
cAccumAlphaBits:=0;
cDepthBits:=32;
cStencilBits:=0;
cAuxBuffers:=0;
iLayerType:=PFD_MAIN_PLANE;
bReserved:=0;
dwLayerMask:=0;
dwVisibleMask:=0;
dwDamageMask:=0;
end;
ipixelformat:=choosepixelformat(image1.canvas.handle,@pfd);
setpixelformat(image1.canvas.Handle,ipixelformat,@pfd);
mhrc:=wglcreatecontext(image1.canvas.handle);
wglmakecurrent(image1.canvas.handle,mhrc);
glclearcolor(0,0,0,0);
glclear(GL_COLOR_BUFFER_BIT);
glcolor3f(1,0,0);
glbegin(gl_lines);
glvertex2f(0.25,0.25);
glvertex2f(0.75,0.75);
glend();
glflush();
wglmakecurrent(0,0);
wgldeletecontext(mhrc);
end;
WinControlではない TImageへの描画はあきらめて、Panel上に描画したら?
ありがとうございます。
Tpanelへ描画することでうまくいきました。
ところでこのTpanelから描画結果を書き出す方法を探しています。
ご存知でしたらご教授いただけませんでしょうか?
勘助:「親方様、それには何としても WinAPIとBitmapの助けを借りねばなりません」
晴信:「手を貸してくれるなら如何なる希も叶えて進ぜよう」
勘助:「そのつもりで既に手は打ってございます」
晴信:「流石抜かりはないのぅ、して、そのWinAPIとは如何なる者じゃ」
勘助:「BitBltと申す者にて」
晴信:「して、その方法や如何に」
勘助:「そやつに保存させたし'でばいすこんてきすと'、'縦横の丈'など渡し、Bitmapにこぴーさせまする」
晴信:「その後は如何に」
勘助:「後は焼くなど煮るなど如何様にも…」
晴信:「わしは蒸すのがいいのぉ」
勘助:「では然様に手筈を整えまする、四ばしお待ちを」
晴信:「急げ、五ばしは待てぬぞ」
風鈴加算 様
ありがとうございます。
Bitbltで解決いたしました。
ツイート | ![]() |