
Ладно, уговорили, оставлю для себя

Сделал ещё пару примеров c gif и OpenGL. https://yadi.sk/d/PHCWrenFzyj5N
OpenGL пока не понятно как работает. Предпологаю что после того как все буферы прочитаны включаются тормоза

Ещё не совпадает формат пиксела (пока не знаю как задать) нужно чтиво изучать. Нужен формат RGB32.
Скрин gl делаю так
Add(ChildForm,11060184,427,427)
{
}
BEGIN_SDK
Add(EditMulti,1695709,21,21)
{
WorkCount=1
Width=216
Height=186
link(doWork1,13762685:doLoad,[(63,27)(63,62)])
}
Add(MainForm,4755660,84,133)
{
Left=35
Top=105
Width=879
Height=628
}
Add(Image,13762685,84,56)
{
Width=863
Height=590
Align=5
Color=0
ViewStyle=4
}
END_SDK
Add(InlineCode,6989511,357,427)
{
WorkPoints=#5:doScr|
EventPoints=#5:onScr|
DataPoints=#3:glw|3:glh|6:Bitmap|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|36:uses kol,windows,Share,Debug,OpenGL;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|9: glw,|27: glh,Bitmap: THI_Event;|22: onScr: THI_Event;|47: procedure doScr(var dt: TData; idx: word);|5: end;|0:|14:implementation|0:|54:procedure THiAsmClass.doScr(var dt: TData; idx: word);|4:var |19: bmp: KOL.PBitmap;|17: sw,sh: integer;|5:begin|29: sw := ToIntegerEvent(glw); |28: sh := ToIntegerEvent(glh);|39: bmp := NewDIBBitmap(sw, sh, pf32bit);|2: |39: //glPixelStorei(GL_PACK_ALIGNMENT,4);|40: //glPixelStorei(GL_PACK_ROW_LENGTH,0);|39: //glPixelStorei(GL_PACK_SKIP_ROWS,0);|41: //glPixelStorei(GL_PACK_SKIP_PIXELS,0);|2: |44: //glPixelStorei( GL_PACK_SWAP_BYTES, 1 ); |48: //glPixelStorei( GL_UNPACK_SWAP_BYTES, 1 ); |27: //glReadBuffer(GL_FRONT);|74: glReadPixels(0,0,sw,sh,GL_RGBA,GL_UNSIGNED_BYTE, bmp.Scanline[sh-1]); |26: _hi_onEvent(onScr, bmp);|11: bmp.Free;|4:end;|0:|4:end.|
link(onScr,11060184:doWork1,[])
link(glw,1267152:Var,[])
link(glh,14359778:Var,[])
}
Add(LineBreak,13642248,49,189)
{
Caption="h"
Type=1
Primary=[14359778,315,189]
}
Add(LineBreak,7011873,56,168)
{
Caption="w"
Type=1
Primary=[1267152,301,231]
}