Hi,
A short example:
Create a transform feedback buffer;
Set the internal transform feedback counter to zero with glBindBufferRange;
Draw a primitive;
Set the counter back to zero with glBindBufferRange;
At this point ANGLE should reset the internal counter to zero for the next draw
call.
Draw a primitive.
You should expect ANGLE to overwrite the first primitive with the second
primitive inside the feedback buffer.
However ANGLE currently append the second primitive after the first primitive.
The problem is that ANGLE considers that if the offset has not changed between
two draw calls then we should append to the buffer. On the second call to
glBindBufferRange, the offset is still zero even though the counter used
internally by the GPU has been incremented and after glBindBufferRange, the
offset is still zero. In ANGLE, glBindBufferRange is a no-op if the offset is
set to the same value as before.
I am aware of two possible solutions:
* Set the offset to -1 in the state vector after each draw call and assume that
-1 means "append";
* Invalidate the applied offset when glBindBufferRange/Base is called.
I am not quite sure which one is the best. I like the first solution but it
involves removing the const-ref from the state pointer in a lot of places.
Original issue reported on code.google.com by Gregory....@imgtec.com on 27 Jan 2015 at 6:48
Original issue reported on code.google.com by
Gregory....@imgtec.com
on 27 Jan 2015 at 6:48