Ignore:
Timestamp:
Mar 20, 2011, 12:23:08 PM (13 years ago)
Author:
george
Message:
  • Added: OpenGL method to display bitmap as texture on top of 2D rectangle.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GraphicTest/UMainForm.pas

    r206 r211  
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
    99  ExtCtrls, StdCtrls, DateUtils, UPlatform, LCLType, IntfGraphics, fpImage,
    10   Math, GraphType, Contnrs, LclIntf, UFastBitmap, UDrawMethod;
     10  Math, GraphType, Contnrs, LclIntf, UFastBitmap, UDrawMethod, GL, OpenGLContext;
    1111
    1212const
     
    3434    TabSheet1: TTabSheet;
    3535    TabSheet2: TTabSheet;
     36    TabSheet3: TTabSheet;
    3637    Timer1: TTimer;
    3738    procedure ButtonBenchmarkClick(Sender: TObject);
     
    4344    procedure Timer1Timer(Sender: TObject);
    4445  private
     46    OpenGLControl1: TOpenGLControl;
     47    TextureId: GLuint;
     48    TextureData: Pointer;
     49    procedure OpenGLControl1Resize(Sender: TObject);
     50    procedure InitGL;
    4551  public
    4652    DrawMethods: TObjectList; // TObjectList<TDrawMethod>
     
    7985  Bitmap.SetSize(TFastBitmap(Scenes[0]).Size.X, TFastBitmap(Scenes[0]).Size.Y);
    8086
     87  OpenGLControl1 := TOpenGLControl.Create(Self);
     88  with OpenGLControl1 do begin
     89    Name := 'OpenGLControl1';
     90    Parent := TabSheet3;
     91    SetBounds(0, 0, 320, 240);
     92    InitGL;
     93    //OnPaint := OpenGLControl1Paint;
     94    OnResize := OpenGLControl1Resize;
     95  end;
     96  GetMem(TextureData, OpenGLControl1.Width * OpenGLControl1.Height * SizeOf(Integer));
     97
    8198  DrawMethods := TObjectList.Create;
    8299  ComboBox1.Clear;
     
    85102    NewDrawMethod.Bitmap := Image1.Picture.Bitmap;
    86103    NewDrawMethod.PaintBox := PaintBox1;
     104    NewDrawMethod.OpenGLBitmap := TextureData;
     105    NewDrawMethod.OpenGLControl := OpenGLControl1;
    87106    DrawMethods.Add(NewDrawMethod);
    88107    ComboBox1.Items.Add(NewDrawMethod.Caption);
    89108  end;
    90   ComboBox1.ItemIndex := 0;
     109  ComboBox1.ItemIndex := DrawMethods.Count - 1;
    91110end;
    92111
     
    148167procedure TMainForm.FormDestroy(Sender: TObject);
    149168begin
     169  FreeMem(TextureData, OpenGLControl1.Width * OpenGLControl1.Height);
    150170  DrawMethods.Free;
    151171  Scenes.Free;
     
    164184end;
    165185
     186procedure TMainForm.OpenGLControl1Resize(Sender: TObject);
     187begin
     188  glViewport(0, 0, OpenGLControl1.Width, OpenGLControl1.Height);
     189end;
     190
     191procedure TMainForm.InitGL;
     192begin
     193  glMatrixMode(GL_PROJECTION);
     194  glLoadIdentity;
     195  glOrtho(0, OpenGLControl1.Width, OpenGLControl1.Height, 0, 0, 1);
     196  glMatrixMode(GL_MODELVIEW);
     197  glLoadIdentity();
     198  glDisable(GL_DEPTH_TEST);
     199  glViewport(0, 0, OpenGLControl1.Width, OpenGLControl1.Height);
     200  //gluPerspective( 45.0, (GLfloat)(OpenGLControl1.Width)/(GLfloat)(OpenGLControl1.Height), 0.1f, 500.0 );
     201
     202    //glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
     203    //glTranslatef (0.0, 0.0,-3.0);
     204  //  glClearColor(0.0, 0.0, 0.0, 1.0);
     205
     206  glGenTextures(1, @TextureId);
     207  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
     208end;
     209
    166210end.
    167211
Note: See TracChangeset for help on using the changeset viewer.