Make(delphi) ver(4.04 build 185) Add(MainForm,15261923,98,14) { Left=20 Top=105 Width=500 Height=400 Caption="ScreenshotOGl" BorderStyle=0 Position=1 Point(MouseX) Point(MouseY) Point(onResize) Point(Handle) Point(Width) Point(Height) Point(SizeHeader) link(onCreate,16299401:doEvent1,[(152,34)(152,97)]) link(onResize,16131419:doWork1,[(235,41)]) } Add(GL_Main,12986311,252,91) { link(onInit,12198675:doInit,[]) link(onViewPort,3410847:doPerspective,[(292,104)(292,139)]) link(Handle,15261923:Handle,[(258,62)(118,62)]) } Add(Timer,9506849,196,182) { Interval=10 Enable=1 link(onTimer,1049454:doEvent1,[]) } Add(GL_GTools,771925,308,182) { Point(doClear) Point(doPushMatrix) Point(doPopMatrix) } Add(Hub,1049454,245,182) { OutCount=5 link(onEvent1,771925:doClear,[]) link(onEvent2,771925:doPushMatrix,[]) link(onEvent3,10714674:doWork1,[(283,202)(283,279)]) link(onEvent4,771925:doPopMatrix,[(296,209)(296,202)]) link(onEvent5,12986311:doFlip,[(271,216)(271,172)(234,172)(234,111)]) } Add(Hub,16299401,196,91) { OutCount=3 link(onEvent1,12986311:doInit,[]) link(onEvent2,16131419:doWork2,[]) link(onEvent3,9506849:doTimer,[(228,111)(228,171)(184,171)(184,188)]) } Add(GL_GluTools,12198675,308,91) { link(onInit,14751453:doColor,[]) } Add(GL_Light,14989894,518,91) { } Add(GL_Options,1101264,392,91) { link(onEvent,5851269:doEnabled,[]) } Add(GL_Options,5851269,434,91) { Flag=1 link(onEvent,5809249:doEnabled,[]) } Add(GL_Options,5809249,476,91) { Flag=2 link(onEvent,14989894:doEnabled,[]) } Add(MultiElement,10714674,308,273) { link(onEvent1,2701277:doSet,[]) link(Data1,12851961:Var,[]) link(Data2,5316328:Var,[]) } BEGIN_SDK Add(EditMulti,4359962,3,3) { EventCount=1 WorkCount=1 DataCount=2 Width=223 Height=109 link(doWork1,3276760:doRotate,[(19,9)(19,55)]) } Add(GL_Rotate,3276760,35,49) { Y=1 link(onRotate,8079493:doRotate,[]) link(Angle,4359962:Data1,[(62,15)(9,15)]) } Add(GL_Rotate,8079493,112,49) { X=1 link(onRotate,4359962:onEvent1,[(189,55)(189,9)]) link(Angle,4359962:Data2,[(139,8)(16,8)]) } END_SDK Add(GL_Perspective,3410847,308,133) { Aspect=1.25 Fovy=20 } Add(HubEx,16131419,231,98) { link(onEvent,12986311:doViewPort,[]) } Add(LineBreak,4337637,98,70) { Caption="x" Type=1 link(Data,15261923:MouseX,[]) Primary=[12851961,210,154] } Add(LineBreak,7144927,105,91) { Caption="y" Type=1 link(Data,15261923:MouseY,[]) Primary=[5316328,210,154] } Add(InlineCode,4105013,119,126) { WorkPoints=#11:RenderToBMP| EventPoints=#8:onRender| DataPoints=#6:Height|5:Width|0:| Code=#15:unit HiAsmUnit;|0:|9:interface|0:|36:uses Windows,Share,Debug,OpenGL,Kol;|0:|3:var|16: x,y: integer;|0:|4:type|30: THiAsmClass = class(TDebug)|0:|10: private|0:|9: public|22: onRender:THI_Event;|19: Width:THI_Event;|20: Height:THI_Event;|0:|50:procedure RenderToBMP(var Data:TData; index:word);|0:|4:end;|0:|14:implementation|0:|24:procedure ScreenshotOGl;|3:var|15: Bmp:PBitmap;|17: i, j: integer;|28: screenshot:array of byte;|11: r:TRect;|5:begin|3: |24: Bmp:= NewBitmap(x,y);|32: setlength(screenshot, x*y*4);|69: glReadPixels(-1, -1, x, y, GL_RGBA, GL_UNSIGNED_byte, screenshot);|28: Bmp.PixelFormat:=pf24bit;|21: for i:=0 to y-1 do|21: for j:=0 to x-1 do|60: Bmp.Canvas.Pixels[j, i]:=rgb(screenshot[(i*x + j)*4 + 0],|60: screenshot[(i*x + j)*4 + 1],|61: screenshot[(i*x + j)*4 + 2]);|28: Bmp.RotateRightTrueColor;|28: Bmp.RotateRightTrueColor;|22: Bmp.FlipHorizontal;|36: Bmp.SaveToFile('screenshot.bmp');|12: Bmp.Free;|21: screenshot := nil;|4:end;|0:|62:procedure THiAsmClass.RenderToBMP(var Data:TData; index:word);|0:|5:begin|37: x := ReadInteger(Data, Height, 0);|36: y := ReadInteger(Data, Width, 0);|17: ScreenshotOGl;|25: _hi_OnEvent(onRender);|4:end;|0:|4:end.| link(onRender,12783478:doStop,[(165,132)(165,171)(51,171)(51,139)]) link(Height,15261923:Width,[]) link(Width,15261923:Height,[]) } Add(Button,8315153,14,126) { Left=5 Top=35 Width=110 Caption="screenshot" link(onClick,12783478:doStart,[]) } Add(GL_Teapot,9924571,392,273) { Size=0.5 } Add(GL_Color,14751453,350,91) { Color=27607 link(onColor,1101264:doEnabled,[]) } Add(GL_Material,2701277,350,273) { Specular=12632256 Shininess=30 link(onSet,9924571:doDraw,[]) } Add(TimeCounter,12783478,63,126) { link(onStart,4105013:RenderToBMP,[]) link(onStop,2363738:doText,[(111,139)(111,188)]) } Add(Label,2363738,126,182) { Left=15 Top=15 Width=4 Height=4 Color=8421504 Font=[MS Sans Serif,10,0,16777215,1] Caption="" }