Let's up this pretty old thread about warp3d.
Right now i tryed to write somethink warp3d based for AROS, and there is an interesting point: Aros not have ScrollVPort() or ChangeScreenBuffer() (ie. aros not have system friendly double-buffering, at moment only on at all - dunno). But i still in interest to avoid flikiring here and so on.
So, main idea which i talk about was by Alan (wazp3d author), it's make a 'window double-buffer' (about someone asked in this thread before). Ie, you create a window on screen (public, on your own), and after make a new buffer with copy of bitmap. Like this:
InitRastPort( &bufferrastport );
ScreenBits = GetBitMapAttr( window->WScreen->RastPort.BitMap, BMA_DEPTH );
flags = BMF_DISPLAYABLE|BMF_MINPLANES;
bufferrastport.BitMap = AllocBitMap(large,high,ScreenBits, flags, window->RPort->BitMap);
if(bufferrastport.BitMap==NULL)
{printf("No Bitmap\n");goto panic; }
After create a context, which pointed to copy of our bitmap (i.e. our buffer to which we will draw for first).
context = W3D_CreateContextTags(&Error,
W3D_CC_BITMAP,(ULONG)bufferrastport.BitMap,
W3D_CC_YOFFSET,0,
W3D_CC_DRIVERTYPE,W3D_DRIVER_BEST,
W3D_CC_INDIRECT,TRUE,
W3D_CC_DOUBLEHEIGHT,FALSE, //DoubleHeightON,
W3D_CC_FAST,TRUE,
TAG_DONE);
And next just draw somethink by warp3d, and after it's done, you just copy this bitmap-buffer content to the your window, like by this way:
BltBitMapRastPort(bufferrastport.BitMap,0,0,window->RPort,0,0,large,high,0xC0);
So.. it works, but it's not so fast of course if compire it with screen double-buffering.
Maybe someone have any other idea of how can be done double-buffering by fast way ?