OpenGL i lazarus proźba o wyjaśnienie.

1

Szukałem szukałem i nie mogłem znaleźć. Proszę czy mógłby ktoś z bardziej doświadczonych forumowiczów wytłumaczyć mi linijka po linijce jak działa ten kod albo podał linki do materiałów wyjaśniających? Bo nawet nie wiem co w google wpisać :(

unit U_OpenGLNauka;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  OpenGLContext;

type

  { TForm1 }

  TForm1 = class(TForm)
    OpenGLControl1: TOpenGLControl;
    procedure FormCreate(Sender: TObject);
    procedure OpenGLControl1Paint(Sender: TObject);
    procedure OpenGLControl1Resize(Sender: TObject);
    procedure OnAppIdle(Sender: TObject; var Done: Boolean);
  private
    { private declarations }
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{$R *.lfm}

procedure TForm1.OnAppIdle(Sender: TObject; var Done: Boolean);
begin
  Done:=false;
  OpenGLControl1.Invalidate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if Sender=nil then ;

  OpenGLControl1:=TOpenGLControl.Create(Self);
  with OpenGLControl1 do begin
    Name:='OpenGLControl1';
    Align:=alClient;
    Parent:=Self;
    OnPaint:=@OpenGLControl1Paint;
    OnResize:=@OpenGLControl1Resize;
    AutoResizeViewport:=true;
  end;

  Application.AddOnIdleHandler(@OnAppIdle);
end;

procedure TForm1.OpenGLControl1Paint(Sender: TObject);
begin
  // Procedury OpenGL do rysowania które już ogarniam więc ich tutaj nie wpisałem.
end;

procedure TForm1.OpenGLControl1Resize(Sender: TObject);
begin
  if Sender=nil then ;
  if OpenGLControl1.Height <= 0 then exit;
end;

end.

Co wiem i co potrzebuje wiedzieć:

  1. Procedura OpenGLControl1Resize ma za zadanie utrzymać rozmiar okna do rysowania taki sam jak rozmiar całego okna aplikacji ale nie rozumiem instrukcji.
  2. Procedura FormCreate chyba przejmuje uchwyt okna?
  3. Nie mam zielonego pojęcia co robi i po co jest procedura OnAppIdle.
0

Bo nawet nie wiem co w google wpisać

Lazarus opengl tutorial się przyda. Opisuje b.dobrze podstawy, sam z niego czerpię wiedzę.

  1. Procedura OpenGLControl1Resize ma za zadanie utrzymać rozmiar okna do rysowania taki sam jak rozmiar całego okna aplikacji ale nie rozumiem instrukcji.

To robi tyle co to:

procedure DoNothing;assembler;
asm
  nop
end;
  1. Procedura FormCreate chyba przejmuje uchwyt okna?

Chyba tworzy kontrolkę opengl?

  1. Nie mam zielonego pojęcia co robi i po co jest procedura OnAppIdle.

Wydaje mi się że odrysowuje opengl.

0

Czyli OpenGLControl1Resize mogę się pozbyć i nic się nie stanie? I jeszcze bym chciał się dowiedzieć co znaczą funkcje OpenGLControl1.Invalidate, Application.AddOnIdleHandler(@OnAppIdle) i if Sender=nil then ; Tylko nie mogę tutoriala otworzyć bo chyba coś z wiki lazarusa szfankuje :/

0
babubabu napisał(a):

co znaczą funkcje OpenGLControl1.Invalidate
Każe przerysować kontrolkę: http://docwiki.embarcadero.com/Libraries/en/Vcl.Controls.TControl.Invalidate

babubabu napisał(a):

Application.AddOnIdleHandler(@OnAppIdle)
Podpina pod Application.OnIdle metodę OnAppIdle: http://docwiki.embarcadero.com/Libraries/en/Vcl.Forms.TApplication.OnIdle

babubabu napisał(a):

if Sender=nil then ;
Jeżeli Sender=nil to nie rób nic, z resztą w przeciwnym wypadku też nie rób nic.

0

O i teraz rozumiem działanie kodu :) Dzięki

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