http://bugs.winehq.org/show_bug.cgi?id=8826
--- Comment #12 from Cody Hamilton codyh@ctzns.net 2009-03-03 02:47:27 --- After a bit more checking it's not so much a bug as it is a result of opengl point size limitations. The game sends point sizes per-vertex, which wine does not support as the only explicit way to change point sizes is with glPointSize(), which is global.
I managed to get somewhat proper smoke and fire effects by forcing point size to 64, then enabling GL_VERTEX_PROGRAM_POINT_SIZE and setting appropriate attenuation. This way, point size is always high when close, and falls off slowly.
There has to be a better way of doing this - my way butchers normal point processing and only works because sh3 scales them similar to this way anyway. Is there any other way to render these? Maybe convert to billboards?