Point Sprites

This topic contains 6 replies, has 2 voices, and was last updated by  alvalea 6 years, 10 months ago.

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #30373

    alvalea
    Member

    Hi,

    I’m trying to do a particles system with point sprites. But I’ve got an error in the windows emulator

    when I use the gl_PointCoord variable. The output is:

    “Fragment shaders uses varying gl_TexCoord but vertex shader does not write to it.”

    The source code of my shaders is the following:

    [vertex shader]

    attribute highp   vec4 inVertex;

    uniform mediump mat4 MVPMatrix;

    void main()

    {

         gl_PointSize = 200.0;

         gl_Position = MVPMatrix * inVertex;

    }

    [fragment shader]

    uniform sampler2D sTexture;

    void main()

    {

        gl_FragColor = texture2D(sTexture, gl_PointCoord);

    }

    As a first approach I was only trying to draw a textured point on the screen:

            GLfloat vertex[] = {0.0f,0.0f,0.0f};

         glEnableVertexAttribArray(VERTEX_ARRAY);

         glVertexAttribPointer (VERTEX_ARRAY, 4, GL_FLOAT, GL_FALSE, 0, vertex);

         

         glDrawArrays(GL_POINTS, 0, 1);

    If I use a vec2 coordinate instead of the gl_PointCoord, it draws a point sprite with uniform color.

    But with the gl_PointCoord it fails.

    Am I missing something?

    Thanks

    #34556

    Hi alvalea,

    strange error. What is your hardware? Do you know which OpenGL version and which extensions your driver supports?

    Could you try this fragment shader:

    void main()                       
    {                                       
        gl_FragColor = vec4(gl_PointCoord.x, gl_PointCoord.y, 0.0, 1.0);
    }                                       

    #34557

    alvalea
    Member

    I’m trying it with an Intel integrated chip Q45/Q43. The supported OpenGL version is 2.0.

    The gl_PointCoord coordinates are always (0,0).

    #34558

    Strange.

    Well, “gl_PointCoord” is a feature of GLSL 1.20; thus, you might have to add the line

    #version 120

    at the start of your fragment shader. (Of course, you should also check whether GLSL 1.20 is supported on your hardware/driver. OpenGL 2.0 only requires GLSL 1.10; thus, this might be an issue.)

    If this doesn’t work, I would suggest that you try to get the fragment
    shader to work in (desktop) OpenGL. If it doesn’t work in (desktop)
    OpenGL on your hardware/driver, I would assume that it also doesn’t work
    in the OpenGL ES emulator. (In desktop OpenGL you probably have to
    glEnable GL_POINT_SPRITE and GL_VERTEX_PROGRAM_POINT_SIZE but apart from
    this, the code should be very similar.)

    If the code works in (desktop) OpenGL but not in the OpenGL ES emulator, I would assume it’s a bug in the emulator. :/

    Martin Kraus2010-11-29 13:02:17

    #34559

    alvalea
    Member

    If I add the line ‘#version 120’ the function PVRTShaderLoadFromFile fails.

    I guess that the problem is that the hardware doesn’t support GLSL 1.20.

    I will try to test it in another hardware.

    #34560

    alvelea,

    I just tested it and the OpenGL ES emulator seems to reject anything but version “#version 100”. Actually, GLSL version 1.00 for OpenGL ES appears to be based on GLSL version 1.20 for OpenGL.

    Thus, I guess you have to make sure to run the emulator on hardware that supports GLSL 1.20.

    #34561

    alvalea
    Member

    Ok, thanks a lot 🙂

Viewing 7 posts - 1 through 7 (of 7 total)
You must be logged in to reply to this topic.