Transform Feedback doesn't write, crashes

// create shader  
    const GLchar* vertexShaderSrc = "in float inValue; out float outValue;  void main() {  outValue = sqrt(inValue); } );";
  
    GLuint shader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(shader, 1, &vertexShaderSrc, 0);
    glCompileShader(shader);
  
    GLuint program = glCreateProgram();
    glAttachShader(program, shader);
    const GLchar* feedbackVaryings[] = { "outValue" };
    glTransformFeedbackVaryings(program, 1, feedbackVaryings, GL_INTERLEAVED_ATTRIBS);
    glLinkProgram(program);
    glUseProgram(program);
    GLuint vao;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);
    GLfloat data[] = { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f };
  
// create input buffer
    GLuint vbo;
    glGenBuffers(1, &vbo);
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
    GLint inputAttrib = glGetAttribLocation(program, "inValue");
    glEnableVertexAttribArray(inputAttrib);
    glVertexAttribPointer(inputAttrib, 1, GL_FLOAT, GL_FALSE, 0, 0);

// create output buffer 
  GLuint tbo;
    glGenBuffers(1, &tbo);
    glBindBuffer(GL_ARRAY_BUFFER, tbo);
    glBufferData(GL_ARRAY_BUFFER, sizeof(data), 0, GL_STATIC_READ);
  
// transform
glEnable(GL_RASTERIZER_DISCARD);
    glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tbo);
    glBeginTransformFeedback(GL_POINTS);
    glDrawArrays(GL_POINTS, 0, 5);
    glEndTransformFeedback();
    glFlush();

// write output
    GLfloat *feedback;
    feedback = glMapBufferRange(GL_ARRAY_BUFFER, 0, sizeof(feedback), GL_MAP_READ_BIT);
    NSLog(@"%f %f %f %f %f\n", feedback[0], feedback[1], feedback[2], feedback[3], feedback[4]);




The value of data[] is never changed and NSLog crashes because glMapBufferRange returns a null pointer. How do you do transform feedback on iOS?

I've spotted an error in your code. Change the following

feedback = glMapBufferRange(GL_ARRAY_BUFFER, 0, sizeof(feedback), GL_MAP_READ_BIT);


to


feedback = glMapBufferRange(GL_ARRAY_BUFFER, 0, sizeof(data), GL_MAP_READ_BIT);


Should work then.

Transform Feedback doesn't write, crashes
 
 
Q