LWJGL Forum

Programming => OpenGL => Topic started by: Rainer on September 25, 2008, 20:57:29

Title: ARB_point_sprite Howto?
Post by: Rainer on September 25, 2008, 20:57:29
Since i need some performant particles, i wanted to ask, if there is some simple example how to use ARB_point_sprite with lwjgl?
Has anybody done it already? ;)
Title: Re: ARB_point_sprite Howto?
Post by: Matthias on September 25, 2008, 21:32:12
Hi,

I used ARB_point_sprite in the past, but with newer ATI drivers they appear to be broken (or better - everything except point sprites is then broken). So now I moved to screen aligned quads - using the geometry shader if available.

Ciao Matthias
Title: Re: ARB_point_sprite Howto?
Post by: Rainer on September 26, 2008, 10:15:21
sounds strange, but i'd like to try it anyway :D
Title: Re: ARB_point_sprite Howto?
Post by: Rainer on September 29, 2008, 06:25:16
Just tested some C examples on my ATI, this definitly works.
Could someone give an example for lwjgl?
Title: Re: ARB_point_sprite Howto?
Post by: Rainer on September 29, 2008, 07:21:13
Ok, solved by trying...

Fore those having the same problem, here the code:

        float quadratic[] = {1.0f, 0.0f, 0.01f, 1};
        ByteBuffer temp = ByteBuffer.allocateDirect(16);
        temp.order(ByteOrder.nativeOrder());
        ARBPointParameters.glPointParameterARB(ARBPointParameters.GL_POINT_DISTANCE_ATTENUATION_ARB, (FloatBuffer) temp.asFloatBuffer().put(quadratic).flip());

        ARBPointParameters.glPointParameterfARB(ARBPointParameters.GL_POINT_FADE_THRESHOLD_SIZE_ARB, 60);
        ARBPointParameters.glPointParameterfARB(ARBPointParameters.GL_POINT_SIZE_MIN_ARB, 1.0f);
        ARBPointParameters.glPointParameterfARB(ARBPointParameters.GL_POINT_SIZE_MAX_ARB, 100);
       
        GL11.glPointSize(100);
       
        GL11.glEnable(ARBPointSprite.GL_POINT_SPRITE_ARB);
        GL11.glTexEnvf(ARBPointSprite.GL_POINT_SPRITE_ARB, ARBPointSprite.GL_COORD_REPLACE_ARB, GL11.GL_TRUE);
        GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);

        GL11.glDisable(GL11.GL_LIGHTING);
        GL11.glEnable(GL11.GL_BLEND);

        GL11.glBegin(GL11.GL_POINTS);

        GL11.glColor4f(0f, 0f, 1, 1);

        GL11.glVertex3f(0, 0, 0);

        GL11.glEnd();

        GL11.glDisable(GL11.GL_BLEND);

        GL11.glDisable(ARBPointSprite.GL_POINT_SPRITE_ARB);