Einzelnen Beitrag anzeigen

Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#6

Re: Lazarus + OpenGL: LCL statt GLUT

  Alt 23. Feb 2010, 17:14
Ja, das ist klar.

Ich hatte mich gerade mal hingesetzt und wollte mein erstes OpenGL Programm kompilieren. Nun denn, ich ziehe ein TOpenGLControl auf das Formular und schreibe folgenden Code:

Delphi-Quellcode:
unit unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  OpenGLContext, GL, GLU;

type

  { TForm1 }

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

var
  Form1: TForm1;

implementation

{ TForm1 }

procedure TForm1.OpenGLControl1Paint(Sender: TObject);
begin
  glClearColor(1.0, 1.0, 1.0, 1.0);
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glEnable(GL_DEPTH_TEST);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();

  gluPerspective(60, Double(OpenGLControl1.Width) / OpenGLControl1.Height, 0.1, 100.0);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  glBegin(GL_TRIANGLES);
    glColor3f(1, 0, 0); glVertex3f(0, 1, 0);
    glColor3f(0, 1, 0); glVertex3f(-1, 0, 0);
    glColor3f(0, 0, 1); glVertex3f(1, 0, 0);
  glEnd();

  OpenGLControl1.SwapBuffers;
end;

procedure TForm1.OpenGLControl1Resize(Sender: TObject);
begin

end;

initialization
  {$I unit1.lrs}

end.
Abspeichern, compilieren (F9). Und freuen dass ein schönes Dreieck erscheint? Nein, Lazarus schickt mir das tolle Assemblerfenster mit dem Titel "Assembler", was sich dann schließt, danach drücke ich auf das Viereck ("Halt"). Und es kommt die Meldung, die auch schon im Zusammenhang mit startlazarus aufgetreten ist: AccessViolation. Cancel und Lazarus verabschiedet sich (schließt sich). "Normale" Projekte (ohne das TOpenGLControl) kann ich ganz normal compilieren. Woran könnte das liegen?

Hat jemand eine Idee?

EDIT: Da fällt mir ein, diese lustigen Assemblerfenster kenne ich. Und zwar habe ich schonmal mit einem StringGrid gespielt, bzw. dessen OnDrawCell-Event. Allerdings kam das da erst nach dem Schließen.
Jakob
  Mit Zitat antworten Zitat