directing transform feedback into a uniform buffer? (invalid operation error)

I’m working on trying to save transform feedback output into a pair of uniform buffers and I keep getting
“The specified operation is invalid for the current OpenGL state”
after beginning the transform feedback.
Basically, I’m trying to convert the flocking example from superbible #5 to OpenGL ES 3.

Here is the setup:

    GLuint positionBlockIndex = glGetUniformBlockIndex(flockingUpdateProgram, "PositionBlock");
    GLuint velocityBlockIndex = glGetUniformBlockIndex(flockingUpdateProgram, "VelocityBlock");
    GLint positionBlockSize,velocityBlockSize;
    glGetActiveUniformBlockiv( flockingUpdateProgram, positionBlockIndex, GL_UNIFORM_BLOCK_DATA_SIZE, &positionBlockSize );
    glGetActiveUniformBlockiv( flockingUpdateProgram, velocityBlockIndex, GL_UNIFORM_BLOCK_DATA_SIZE, &velocityBlockSize );
    // Set up UBOs
    for (i = 0; i < 2; i++)
        glUniformBlockBinding(flockingUpdateProgram, positionBlockIndex, 0);
        glBufferData(GL_UNIFORM_BUFFER, positionBlockSize, NULL, GL_DYNAMIC_DRAW);
        glUniformBlockBinding(flockingUpdateProgram, velocityBlockIndex, 1);
        glBufferData(GL_UNIFORM_BUFFER, velocityBlockSize, NULL, GL_DYNAMIC_DRAW);

Here is the render call:

 // Depending on whether we're rendering an even or odd frame...
    if (frame_index & 1)
        // Read from second set of buffers (c)
        glBindBufferBase(GL_UNIFORM_BUFFER,1, velocity_ubo[1]);
        glBindBufferBase(GL_UNIFORM_BUFFER,0, position_ubo[1]);
        // Write to first
        glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, flock_position[0]);
        glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 1, flock_velocity[0]);
        // Read from first set of buffers (a)
        glBindBufferBase(GL_UNIFORM_BUFFER,1, velocity_ubo[0]);
        glBindBufferBase(GL_UNIFORM_BUFFER,0, position_ubo[0]);
        // Write to second
        glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, flock_position[1]);
        glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 1, flock_velocity[1]);
    // Turn off rasterization for the simulation pass (no fragment shader)
    // Press record...
    // Draw
    glDrawArrays(GL_POINTS, 0, flock_size);// **ERROR HERE**
    // Press stop...
    // Turn rasterization back on

This topic was automatically closed 183 days after the last reply. New replies are no longer allowed.