NV_POINT_SPRITE, 40.71

NV_POINT_SPRITE is now supported on Geforce 2 cards(possibly others), unfortunately it’s REALLY slow and distance attenuation does not work. My app runs at a tenth of its normal speed.

This is a bit of a problem for me as I look for NV_POINT_SPRITE and use it if it’s there. So now my application runs very slow and without distance attenuation (on some cards)

I can probably get sround it by doing a quick benchmark and falling back to normal glpoints if point sprite is too slow. Can you think of a better solution?

I thought I should point it out as it might affect your apps to.

I know 40.71 is only beta.

Are you following the instructions form the spec to make sure you get hardware acceleration on non GF4 cards?

Here’s the relevant section from the spec:

In order to ensure that you get hardware acceleration on GeForce3,
make sure that:

1. The point sprite R mode is set to GL_ZERO.  (This is the default.)
2. Coordinate replacement is turned on for texture unit 3 and for no
   other texture units.  This is non-obvious; using texture unit zero
   will _not_ be accelerated.  Also, if coordinate replacement is off
   for _all_ texture units, that's also unaccelerated.

So, in the typical usage case where you just want a single texture on
some points, you should enable TEXTURE_2D on unit 3 but disable it on
unit zero.

The GeForce4 Ti platform supports point sprites as large as 8192, but
the spacing between sizes becomes larger as the size increases.  All
other platforms do not support point sprite sizes above 64.

[This message has been edited by jra101 (edited 09-27-2002).]

No I wasn’t, thanks, that’s probably it. I’m gonna try it now.

I would still expect distance attenuation to work in emulation mode though.

[This message has been edited by Adrian (edited 09-27-2002).]

The text from the extensions document also states.

This extension was first supported for GeForce4 Ti only in NVIDIA’s
Release 25 drivers. Future drivers will support this extension on
all GeForce products.

However, the extension is only hardware-accelerated on the GeForce3
and GeForce4 Ti platforms.

So the points I made in my original post stand.

So to summarize, the points I’m making are:

  1. It is no longer straightforward to decide when to use NV_POINT_SPRITE.
  2. Distance attenuation doesn’t appear to work in emulation mode.

I will change my code to use tex unit 3 but I don’t expect any performance change on Geforce 2 or earlier.

[This message has been edited by Adrian (edited 09-27-2002).]

i cant really see the use of the extension, surly u can do everything it does (+more eg rotating particles which 80% of particles are) with a vertexprogram (+ IIRC they came out before point_sprite)

Yes you can Zed, but;

a) NV_Point_sprite allows far less memory bandwidth to be used when specifying particles.

b) On gf2 and below vertex programs are emulated too, so using them to create sprites isn’t gonna be very fast if you chuck loads about. Although it’ll probably be faster than nv_point_sprite on gf2.

For into how to do billboards on the GPU; http://opengl.nutty.org/nvidia/index.html

Nutty

in software it shouldn’t mather, if the drivers are good, as we always assume on nvidia cards (insiders know the sarkasm i have in this statement, hehe )

in hw its, well, in hw… nutty stated the features yet:
1/4th of the bandwith
simpler rastericer possibly even
linear memory access for the textures guaranted (dunno if they can like that boost up the performance of the textureaccesses a bit…)
simplicity. they are damn easy…