[gdal-dev] RE: progressive rendering
szekerest at gmail.com
Sat Aug 30 11:49:55 EDT 2008
Upon thinking about the issues I've been come up with previously, I
consider the following approach could be implemented easily either at
driver or at SWIG interface level. Requires a new class to be
implemented by the async IO supported drivers and a new additional
method should be added to the GDALDataset and GDALRasterBand.
The user could implement the async IO by using the following pseudo sequence:
GDALDataset *ds = GDALOpen( name, Access.GA_ReadOnly );
// create an IO context for the asynchronous operation
// the diver will initiate the transfer from the server and set:
ctx->status to IO_PENDING
// the diver will store the internal state of the transfer in the ctx object.
// GDALRasterBand may also implement the similar method by using the
GDALRasterIOContext *ctx = ds->CreateRasterIOContext(GF_Read, xOff,
yOff, xSize, ySize, buf_xSize, buf_ySize,
buf_dataType, bandCount, bandMap, pixelSpace, lineSpace, bandSpace);
while (ctx->status != IO_COMPLETE)
// Update the buffer with the next stage of data. The driver is allowed to
// modify the buffer within ReadNextBlock only.
// ReadNextBlock will wait until the next displayable stage will arrive.
// update the view by using ctx->xOff, ctx->yOff, ctx->xSize, ctx->ySize
// the user have pressed the cancel button in the user interface thread.
// the driver will close the transfer from the server
// The GDALRasterIOContext destructor will close the transfer if needed
More information about the gdal-dev