few details:
-enabling ps and/or texcoord generation doesnt hurt… until you actually draw a sprite.
-restoring the texture matrix and pretty much all attributes opengl has to offer doesnt help.
-using point sprites with va or vbo in my case didnt generate correct tex coords (or none at all, hard to tell)
-using vertex pointer and color pointer (or other vertex attrib pointers) caused vpu to crash
personal result:
-ps support on ati is a bad joke that looks like it never was touched by qa
good news:
-according to a post on gamedev the texture warping will be fixed in cat 4.6 (any maybe some of the other problems if im really lucky)
until then i use this vertex program:
-normal is actually the sprite position
-texcoord is the x,y size for the sprite
-position are signs (-.5 | 5) that specify the corner
!!ARBvp1.0
PARAM ModProj[4] = {state.matrix.mvp};
TEMP pos, res;
MOV pos, vertex.normal;
MOV pos.w, 1;
DP4 res.x, ModProj[0], pos;
DP4 res.y, ModProj[1], pos;
DP4 res.z, ModProj[2], pos;
DP4 res.w, ModProj[3], pos;
MOV result.position, res;
MAD result.position.xy, vertex.position, vertex.texcoord[0], res;
ADD result.texcoord[0], vertex.position, {.5,.5,0,0};
MOV result.color, vertex.color;
END
to render:
glTexCoord2fv(Particles[i].Size);
glColor4fv(Particles[i].Col);
glNormal3fv(Particles[i].Pos);
glVertex2f(-.5f,-.5f);
glVertex2f(.5f,-.5f);
glVertex2f(.5f,.5f);
glVertex2f(-.5f,.5f);
only half the speed of point sprites (but allows for non square particles). basically its simply avoiding a lot of math by doing the work after the projection instead of fooling around with camera up and right vectors.