|
- program SimpleLoadFromFile;
-
- {$mode objfpc}{$H+}
-
- uses
- {$IFDEF UNIX}{$IFDEF UseCThreads}
- cthreads,
- {$ENDIF}{$ENDIF}
- Classes, Windows, SysUtils, dglOpenGL, glBitmap, Helper;
-
- var
- oglWindow: TOpenGLWindow;
- running: Boolean = true;
- tex: TglBitmap2D;
- data: TglBitmapData;
-
- function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
- begin
- case Msg of
- WM_DESTROY: begin
- running := false;
- end;
- end;
- result := DefWindowProc(hWnd, Msg, wParam, lParam);
- end;
-
- procedure RenderLoop;
- begin
- tex.Bind();
- glColor4f(1, 1, 1, 1);
- glBegin(GL_QUADS);
- glTexCoord2f(0, 0); glVertex2f(100, 100);
- glTexCoord2f(1, 0); glVertex2f(700, 100);
- glTexCoord2f(1, 1); glVertex2f(700, 500);
- glTexCoord2f(0, 1); glVertex2f(100, 500);
- glEnd;
- tex.Unbind();
- end;
-
- begin
- oglWindow := CreateOpenGLWindow('SimpleLoadFromFile', 800, 600, @WindowProc);
- try
- tex := TglBitmap2D.Create; // create texture object
- data := TglBitmapData.Create; // create texture data object
- try
- data.LoadFromFile( // load texture data from file
- ExtractFilePath(ApplicationName) +
- '../textures/BMP_24_RGB8.bmp');
- if not data.FormatDescriptor.HasOpenGLSupport then // check if format is supported by OpenGL
- data.ConvertTo(data.FormatDescriptor.OpenGLFormat); // if not then convert
- tex.UploadData(data); // upload data to video card
- finally
- FreeAndNil(data); // after upload is done, the data object could be freed to save memory
- end;
-
- while running and ProgressMesages do begin
- RenderLoop;
- SwapBuffers(oglWindow.DC);
- end;
- finally
- FreeAndNil(tex);
- DestroyOpenGLWindow(oglWindow);
- end;
- end.
|