ボタンを一つ用意してクリックすると書くようにします。
procedure TForm1.Button1Click(Sender: TObject); var mhrc:hglrc; ipixelformat:integer; pfd:tpixelformatdescriptor;
上の3つの変数は必須です
begin
まずPFDという構造体に、どのようにOpenGLを使うかを設定します。
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);
この「レンダリングコンテキスト」を有効にすると、GLコマンドがそのウインドウに送られます。
wglmakecurrent(image1.canvas.handle,mhrc);
ここからは普通のOpenGLで書かれています。1本の線を書きます。
glclearcolor(0,1,0,0);
glclear(gl_color_buffer_bit);
glcolor3f(1,1,1);
glbegin(gl_lines);
glvertex2f(0.25,0.25);
glvertex2f(0.75,0.75);
glend();
glflush();
使い終わった「レンダリングコンテキスト」を開放します。
wglmakecurrent(0,0); wgldeletecontext(mhrc); end; end.