X-Git-Url: https://git.delphigl.com/?p=LazOpenGLCore.git;a=blobdiff_plain;f=examples%2FGrabScreen%2FGrabScreen.lpr;fp=examples%2FGrabScreen%2FGrabScreen.lpr;h=c3b7b77574c258f20e4a20ec92925d0a5c13cc33;hp=0000000000000000000000000000000000000000;hb=1f9d3b8b9ce7d5e05f7af88c7ab0fd094609d9e5;hpb=5a2eeb45d528c5a2406b2ae5d73a4c711b2ea7dc diff --git a/examples/GrabScreen/GrabScreen.lpr b/examples/GrabScreen/GrabScreen.lpr new file mode 100644 index 0000000..c3b7b77 --- /dev/null +++ b/examples/GrabScreen/GrabScreen.lpr @@ -0,0 +1,58 @@ +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; + +function WindowProc(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; +var + tex: TglBitmap2D; +begin + case Msg of + WM_DESTROY: begin + running := false; + end; + + WM_KEYDOWN: begin + if wParam = VK_RETURN then begin + tex := TglBitmap2D.Create; // create empty texture + try + tex.GrabScreen(0, 0, 800, 600, tfRGB8ub3); // copy current framebuffer content to texture + tex.SaveToFile(ExtractFilePath(ApplicationName) + 'screen.bmp', ftBMP); // save texture to file + WriteLn('screen saved to screen.bmp'); + finally + FreeAndNil(tex); + end; + end; + end; + end; + result := DefWindowProc(hWnd, Msg, wParam, lParam); +end; + +procedure RenderLoop; +begin + glBegin(GL_TRIANGLES); + glColor4f(1, 0, 0, 1); glVertex2f(400, 100); + glColor4f(0, 1, 0, 1); glVertex2f(100, 500); + glColor4f(0, 0, 1, 1); glVertex2f(700, 500); + glEnd; +end; + +begin + oglWindow := CreateOpenGLWindow('GrapScreen (hit enter to grab screen)', 800, 600, @WindowProc); + while running and ProgressMesages do begin + RenderLoop; + SwapBuffers(oglWindow.DC); + end; + DestroyOpenGLWindow(oglWindow); +end. + +