* removed native OpenGL support
[glBitmap.git] / examples / GrabScreen / GrabScreen.lpr
1 program SimpleLoadFromFile;
2
3 {$mode objfpc}{$H+}
4
5 uses
6   {$IFDEF UNIX}{$IFDEF UseCThreads}
7   cthreads,
8   {$ENDIF}{$ENDIF}
9   Classes, Windows, SysUtils, dglOpenGL, glBitmap, Helper;
10
11 var
12   oglWindow: TOpenGLWindow;
13   running: Boolean = true;
14
15 function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
16 var
17   tex: TglBitmap2D;
18 begin
19   case Msg of
20     WM_DESTROY: begin
21       running := false;
22     end;
23
24     WM_KEYDOWN: begin
25       if wParam = VK_RETURN then begin
26         tex := TglBitmap2D.Create;                                                // create empty texture
27         try
28           tex.GrabScreen(0, 0, 800, 600, tfRGB8ub3);                              // copy current framebuffer content to texture
29           tex.SaveToFile(ExtractFilePath(ApplicationName) + 'screen.bmp', ftBMP); // save texture to file
30           WriteLn('screen saved to screen.bmp');
31         finally
32           FreeAndNil(tex);
33         end;
34       end;
35     end;
36   end;
37   result := DefWindowProc(hWnd, Msg, wParam, lParam);
38 end;
39
40 procedure RenderLoop;
41 begin
42   glBegin(GL_TRIANGLES);
43     glColor4f(1, 0, 0, 1); glVertex2f(400, 100);
44     glColor4f(0, 1, 0, 1); glVertex2f(100, 500);
45     glColor4f(0, 0, 1, 1); glVertex2f(700, 500);
46   glEnd;
47 end;
48
49 begin
50   oglWindow := CreateOpenGLWindow('GrapScreen (hit enter to grab screen)', 800, 600, @WindowProc);
51   while running and ProgressMesages do begin
52     RenderLoop;
53     SwapBuffers(oglWindow.DC);
54   end;
55   DestroyOpenGLWindow(oglWindow);
56 end.
57
58