Point Sprites are little drawings in 2D that usually represent items, cursors, or other things that have the appearance of being in 2D. The first thing that we must do is specify our point sprite information:
            D9.RenderState.PointSize = 2.0F
            D9.RenderState.PointSizeMin = 1.0F
            D9.RenderState.PointSizeMax = 64.0F
D9.RenderState.PointScaleC = 16.0F
These merely specify the sizes of our point sprite as we get closer and/or further away: the ones we are concerned about is the PointSizeMin, which specifies the smallest size that our point sprite will be when far, far away. The PointSizeMax will be the largest that the Point Sprite will be when we are up close and personal. The PointScale determine how much smaller our point sprites get as we get further away. High values make the point sprite get smaller at a higher rate.
    Dim Spots() As CustomVertex.PositionColored
    'For the point sprites, we need vertices.
To set the locations of our point sprites, we need to use vertices. In this case, we don't need a normal, since the point sprites will face toward the camera always. We do, however, need it to be colored, so that we can see it. The set up of this point sprite by vertex will begin like this:
    Dim PsB As VertexBuffer
The initialization call is:
            'That is a LOT of non-trivial parameters.
            PsB = New VertexBuffer(GetType(CustomVertex.PositionColored), 4, D9, Usage.WriteOnly, CustomVertex.PositionColored.Format, Pool.Managed)
And the function which does the work of setting up the vertexbuffer:
    Private Sub SetPointSprites(ByVal vs() As CustomVertex.PositionColored, ByVal vxbf As VertexBuffer, ByVal D9 As Device)

        Dim N As Single = 5.0F
        Dim A As Array = vxbf.Lock(0, LockFlags.None)
        'It returns a vanilla array...
        vs = DirectCast(A, CustomVertex.PositionColored())

        vs(0) = New CustomVertex.PositionColored(-N, -N, N, &HFFFF0000)
        vs(1) = New CustomVertex.PositionColored(-N, N, N, &HFF00FF00)
        vs(2) = New CustomVertex.PositionColored(N, -N, N, &HFFFFFF00)
        vs(3) = New CustomVertex.PositionColored(N, N, N, &HFF00FFFF)

    End Sub
The call to this function is just like the call to set the initial vertex buffer:
            SetVertexBufferData(Vertices, VxB, D9)
            SetPointSprites(Spots, PsB, D9)
The complicated part is actually drawing the point sprites. We must set all render states before we draw any point sprites - and we must return those renderstates to original values before we draw anything else, like a mesh, or the other vertex buffer:
        D9.RenderState.ZBufferWriteEnable = False
        D9.RenderState.PointSpriteEnable = True
        D9.RenderState.PointScaleEnable = True

        D9.SetStreamSource(0, PsB, 0)

        D9.VertexFormat = CustomVertex.PositionColored.Format
        D9.SetTexture(0, PsTx)
        'Sets the active texture.  The 0 is up for discussion.
        D9.DrawPrimitives(PrimitiveType.PointList, 0, 4)

        D9.RenderState.ZBufferWriteEnable = True
        D9.RenderState.PointSpriteEnable = False
        D9.RenderState.PointScaleEnable = False
And the most important part of the point sprite - what picture will be in the point sprite, which is going to be represented by a texture.
    Dim Tx, PsTx As Texture

.vb file