как создавать openGL контекст на форме - в сети полно примеров. мне нужно только в конкретном виджете:
| Код | TgraphsFrm = class(TForm) pbGL: TPaintBox; var pbGL_dc : HDC; pbGL_hrc: HGLRC;
procedure TgraphsFrm.FormCreate(Sender: TObject); begin pbGL_dc := pbGL.Canvas.Handle; SetDCPixelFormat( pbGL_dc ); pbGL_hrc:=wglCreateContext( pbGL_dc ); wglMakeCurrent (pbGL_dc, pbGL_hrc); glClearColor (0, 0, 0, 1.0); glEnable(GL_DEPTH_TEST); glEnable(GL_COLOR_MATERIAL); glEnable(GL_NORMALIZE); end;
procedure TgraphsFrm.FormDestroy(Sender: TObject); begin wglMakeCurrent(0, 0); wglDeleteContext(pbGL_hrc); ReleaseDC (pbGL.Canvas.Handle, pbGL_dc); DeleteDC (pbGL_dc);
CleanForm; //bmp3D.Free; DisposeList(HistExternList); end;
procedure TgraphsFrm.SetDCPixelFormat(_hdc:HDC); var pfd : TPIXELFORMATDESCRIPTOR; nPixelFormat : Integer; begin FillChar(pfd, SizeOf(pfd), 0); pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; nPixelFormat := ChoosePixelFormat (_hdc, @pfd); SetPixelFormat (_hdc, nPixelFormat, @pfd); end;
procedure TgraphsFrm.pbGLPaint(Sender: TObject); begin glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); SwapBuffers(pbGL_dc); end;
procedure TgraphsFrm.FormResize(Sender: TObject); begin glMatrixMode(GL_PROJECTION); glLoadIdentity; glViewport(200, 0, pbGL.ClientWidth, pbGL.ClientHeight); gluPerspective(45.0, pbGL.ClientWidth / pbGL.ClientHeight, 100.0, 1000000.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity; InvalidateRect(pbGL.Canvas.Handle, nil, False); end;
|
Я в дельфи не силен - состряпал вот такую вот штуку - в отличие от примеров из сети используется хэндлер моего TPaintBox для получения контекста - pbGL.Canvas.Handle; Но почему-то это все не работает - цвет фона, который я установил черным - не меняется, а так и остается таким же серым как и вся остальная форма. |