[Gdal-dev] GDAL & OpenEV / MFC
Marek Brudka
mbrudka at aster.pl
Sun Jan 16 19:04:21 EST 2005
Hi Matrin,
User Chapman, Martin wrote:
>Drawing speed is relative to hardware resources and other things you may have going on in your code while you draw. So, there is no single answer to how much can GDI+ draw per second.
>
Certainly! I was interested in exemplary results for examplary
configuration to get an impression how fast GDI is. For rather cheap
Geforces and not very fresh PCs one may render more 1MLines per second
on 1280x1024 canvas. In general the number of triangles per second is a
lower bound (often equal to :-) ) of the number of lines per second.
>What you could say is that given the same environment and variables, GDI+ will out perform OpenGL for 2D rendering on Windows. Also, note that humans can only process graphics refresh rates of about 30 times per second, so drawing to the screen more times than that is useless.
>
I did not played with GDI (directly), hence I cannot compare it with
OpenGL. This is why it's interesting for me :-).
However we made some tests using higher level libraries (Qt painter),
which probably indirectly uses GDI (I'm not sure of that), and were very
disappointed with the performance. In general, we found that hardware
accelarated OpenGL 2D vector rendering is at least 10 times faster than
the using QtPainter functions. Certainly, the quality of graphic
accelerator is important, but currently avalaible boards are usually
optimized for 2D rendering.
If you compare **SOFTWARE** OpenGL with GDI, then your results are
probably true. However, if the results are for hardware accelarated
OpenGL and GDI, then they are at least curious, because OpenGL can
render graphic directly on hardware, not via GDI. I think, that one
should expect hardware accelarated OpenGL to be not worse than GDI,
because if GDI uses hardware acceleration (does it?), then sooner or
later does exactly the same what OpenGL, namely tells the accelarator to
render something. It is hard to render something faster in software than
in hardware, hence I doubt this result. Please also notice how graphics
is managed in Windows Longhorn..
However very it is crucial how OpenGL is employed, because bad
application of OpenGL usually results in poor performance.
> Where OpenGL really suffers though, is filling shapes. It has to tessellate each complex polygon before it can fill it and the gluTessellation functions are very slow.
>
OpenGL is as fast in filling triangles as possible and I doubt if GDI
can do it faster. Tessellation is not an OpenGL function but it is
provided by OpenGL Utility library. These two are distinct libraries!
Tessalation is usually done in software, not in hardware, hence one
cannot expect it to be extremly fast. In fact, the tessallation is
relatively slow, but excessive tessalation means, that software
architecture is probably bad. One should almost always avoid
tessalation. The best way to use it is to render an object once into
glLists, then use this lists as long as possible. Moreover, it is also
important what is tessallated. The performance is seriously impacted if
the shape tessallated is not convex and if it has inner rings. For a
plain convex, solid shapes the tessalation is really fast, because the
algorithm is very simple. In fact, for a plain convex polygons
tessallation is not necessary, OpenGL can most of the work in hardware.
Maps in GIS application are not usually rendered periodically but rather
asynchronously eg. map scale is changed, map contents is translated, few
features changed their position/shapes etc. For a translation or
sometimes scale changes, OpenGL provides excellent support, because
usually it is enough to change model or camera matrix and call glList to
obtain nicely rendered result.
OpenGL has excellent support for rasters. Obviously one has to convert
them into textures, in fact GDAL does it, but the results are then
impressive then. With a quite good accuracy, one may also employ
hardware accellaration do what GDALWarp is responsible for, namely to
reproject raster maps.
And the last, but not the least about OpenGL. This library is not for
rendering 3D graphics only! In your previous post in many places you
wrote that OpenGL is slow because
it renders in 3D. OpenGL HAS a bunch of 2D functions, though their
functionalities depend on capabilities of hardware accellaration.
I do not agree partially with you opinion about caching. For a mass
market software one cannot assume PC has a huge RAM, hence it should
rather render in immidiate mode without caching. But for specialized
markets, where hardware is more controlled one may force to use PC with
at least 512MB RAM. Please also notice, that in next the few years the
average PC will probably have >1 GB of RAM and GIS might consume 512
MRAM without any serious impact on performance. Well.., 512 MB for GIS
means, that the software is rather strange, because how detailed a map
has to be to use such huge memory? For a comparision, a raw 1024x1024
bitmap with 24bit color depth and 8bit alpha occupies only 4MB...
Why caching is so important? Because of what you say about the access to
GIS data. Our consideration on speed of rendering are really not
important when compared with the cost of access to GIS data. Here are
real bottlenecks eg mass storage or RDBM access. One has to use spatial
indeces and queries here, but usually it is not enough because RDBMS
servers are always too slow, and network bandwidth is always too low.
Caching can moderate such cost, but obviously requires some additional
RAM :-).
Nevertheless, I really appreciate your post and agree with many thesis,
in particular with that rendering is not as important as proper GIS data
management :-)
Best regards
Marek Brudka
More information about the Gdal-dev
mailing list