Okno Opengl w Panelu

Odpowiedz Nowy wątek
Kochzg
2007-01-19 13:23
Kochzg
0

Mam taki problem. Łapie TPanel i chcę wyswietlić tam grafikę OpenGl. Jednak po uruchomieniu nic mi nie wyswietla. Dopiero gdy przesunę formę poza ekran lub powieksze na cały ekran to pojawia się. Probowałem z zdarzeniami OnPaint, OnResize, OnShow i nic. Oto moje wypociny moze ktos podpowie mi gdzie popełniam bład:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Opengl,
  ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure Draw;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  DC:HDC;
implementation

{$R *.DFM}

procedure setupPixelFormat();
const
   pfd:TPIXELFORMATDESCRIPTOR = (
        nSize:sizeof(TPIXELFORMATDESCRIPTOR);   // size
        nVersion:1;         // version
        dwFlags:PFD_SUPPORT_OPENGL or PFD_DRAW_TO_WINDOW or
                PFD_DOUBLEBUFFER;   // support double-buffering
        iPixelType:PFD_TYPE_RGBA;   // color type
        cColorBits:24;          // preferred color depth
        cRedBits:0; cRedShift:0;    // color bits (ignored)
        cGreenBits:0;  cGreenShift:0;
        cBlueBits:0; cBlueShift:0;
        cAlphaBits:0;  cAlphaShift:0;   // no alpha buffer
        cAccumBits: 0;
        cAccumRedBits: 0;       // no accumulation buffer,
        cAccumGreenBits: 0;         // accum bits (ignored)
        cAccumBlueBits: 0;
        cAccumAlphaBits: 0;
        cDepthBits:16;          // depth buffer
        cStencilBits:0;         // no stencil buffer
        cAuxBuffers:0;          // no auxiliary buffers
        iLayerType:PFD_MAIN_PLANE;      // main layer
   bReserved: 0;
   dwLayerMask: 0;
   dwVisibleMask: 0;
   dwDamageMask: 0;                    // no layer, visible, damage masks
   );
var pixelFormat:integer;
begin
   pixelFormat := ChoosePixelFormat(DC, @pfd);
   if (pixelFormat = 0) then    
        exit;
   if (SetPixelFormat(DC, pixelFormat, @pfd) <> TRUE) then
        exit;
end;

procedure GLInit;
begin
   // set viewing projection
   glMatrixMode(GL_PROJECTION);
   glFrustum(-0.1, 0.1, -0.1, 0.1, 0.3, 25.0);
   glMatrixMode(GL_MODELVIEW);
   glEnable(GL_DEPTH_TEST);
end;

procedure TForm1.Draw;
const S=1.0; D=5.0;
begin
   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
   glLoadIdentity;
   glTranslatef(0.0, 0.0, -12.0);
   glBegin(GL_TRIANGLES);
   glVertex3f( -S, 0, D); glVertex3f(S, 0, D); glVertex3f(0, S, D);
   glEnd;
   SwapBuffers(wglGetCurrentDC);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  Draw;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
    RC:HGLRC;
    i:integer;
begin
   DC:=GetDC(Panel1.Handle);
   SetupPixelFormat();
   RC:=wglCreateContext(DC);
   wglMakeCurrent(DC, RC);
   GLInit;
end;

end.

Zdrówka
Kochzg

Pozostało 580 znaków

2007-01-23 11:07

Rejestracja: 14 lat temu

Ostatnio: 10 lat temu

0

http://www.sulaco.co.za//opengl/formstemplate1.5.zip sciagnij to i przeanalizuj tam juz jest rsowanie pod opengl w panelu

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0