Class PingPongBuffer

  • public final class PingPongBuffer
    extends java.lang.Object
    Encapsulates a framebuffer with the ability to ping-pong between two buffers.

    Upon begin() the buffer is reset to a known initial state, this is usually done just before the first usage of the buffer.

    Subsequent capture() calls will initiate writing to the next available buffer, returning the previously used one, effectively ping-ponging between the two. Until end() is called, chained rendering will be possible by retrieving the necessary buffers via getSouceTexture(), getSourceBuffer(), getResultTexture() or getResultBuffer().

    When finished, end() should be called to stop capturing. When the OpenGL context is lost, rebind() should be called.

    • Constructor Summary

      Constructor Description
      PingPongBuffer​(int width, int height, frameBufferFormat, boolean hasDepth)  
      PingPongBuffer​(int width, int height, frameBufferFormat, boolean hasDepth, boolean hasVelocity, boolean preventFloatBuffer)
      Creates a new ping-pong buffer and owns the resources.
      PingPongBuffer​(GaiaSkyFrameBuffer buffer1, GaiaSkyFrameBuffer buffer2)
      Creates a new ping-pong buffer with the given buffers.
    • Field Detail

      • texture1

        public texture1
      • texture2

        public texture2
      • textureDepth

        public textureDepth
      • textureVel

        public textureVel
      • width

        public int width
      • height

        public int height
      • ownResources

        public final boolean ownResources
    • Constructor Detail

      • PingPongBuffer

        public PingPongBuffer​(int width,
                              int height,
                              boolean hasDepth)
      • PingPongBuffer

        public PingPongBuffer​(int width,
                              int height,
                              boolean hasDepth,
                              boolean hasVelocity,
                              boolean preventFloatBuffer)
        Creates a new ping-pong buffer and owns the resources.
    • Method Detail

      • createMainFrameBuffer

        public static GaiaSkyFrameBuffer createMainFrameBuffer​(int width,
                                                               int height,
                                                               boolean hasDepth,
                                                               boolean hasVelocity,
                                                               boolean preventFloatBuffer)
      • set

        public void set​(GaiaSkyFrameBuffer buffer1,
                        GaiaSkyFrameBuffer buffer2)
        An instance of this object can also be used to manipulate some other externally-allocated buffers, applying just the same ping-ponging behavior.

        If this instance of the object was owning the resources, they will be preserved and will be restored by a reset() call.

        buffer1 - the first buffer
        buffer2 - the second buffer
      • reset

        public void reset()
        Restore the previous buffers if the instance was owning resources.
      • dispose

        public void dispose()
        Free the resources, if any.
      • rebind

        public void rebind()
        When needed graphics memory could be invalidated so buffers should be rebuilt.
      • begin

        public void begin()
        Ensures the initial buffer state is always the same before starting ping-ponging.
      • capture

        public capture()
        Starts and/or continue ping-ponging, begin capturing on the next available buffer, returns the result of the previous capture() call.
        the Texture containing the result.
      • end

        public void end()
        Finishes ping-ponging, must always be called after a call to capture()
      • getSouceTexture

        public getSouceTexture()
        the source texture of the current ping-pong chain.
      • getSourceBuffer

        public GaiaSkyFrameBuffer getSourceBuffer()
        the source buffer of the current ping-pong chain.
      • getResultTexture

        public getResultTexture()
        the result's texture of the latest capture().
      • getDepthTexture

        public getDepthTexture()
        the depth texture attachment containing the depth buffer