Android OpenGL ES 2.0动画GLES20.glReadPixels读取错误值后

Android OpenGL ES 2.0动画GLES20.glReadPixels读取错误值后,android,animation,opengl-es,glreadpixels,Android,Animation,Opengl Es,Glreadpixels,我有一个正方形,当我点击它时,它会拉伸,所以它会像这些图片中显示的那样占据所有屏幕 在拉伸之前,我的颜色选择器显示的值非常好 拉伸后,当我点击机器人腿下方一点时,它会给我一个值(0,0255),这是我的背景色,而不是我点击的白色(255255) 我使用GLSurfaceView的setRenderMode(GLSurfaceView.RENDERMODE\u脏时)快速(100毫秒)绘制此动画。整个动画仅由6帧组成 绘图本身是从 ... ScheduledExecutorService sch

我有一个正方形,当我点击它时,它会拉伸,所以它会像这些图片中显示的那样占据所有屏幕

在拉伸之前,我的颜色选择器显示的值非常好

拉伸后,当我点击机器人腿下方一点时,它会给我一个值(0,0255),这是我的背景色,而不是我点击的白色(255255)

我使用
GLSurfaceView
setRenderMode(GLSurfaceView.RENDERMODE\u脏时)
快速(100毫秒)绘制此动画。整个动画仅由6帧组成

绘图本身是从

...
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            do_stretching();
        }
}, 0, stretching_frame_delay, TimeUnit.MILLISECONDS);
...

void do_stretching()
{
    //change coordinates of white squares vertices kind of "stretching" it
    surface_view.requestRenderer();
}

动画看起来真的很好,填充了
GLSurfaceView
的所有区域,但颜色选择器的行为类似于最后一帧不会被绘制,并读取动画完成之前确实存在的背景色。我注意到,如果我绘制动画的速度较慢,因此使用更多的帧,我可以单击稍微靠近此图像边缘的位置,并获得正确的结果,但仍然非常接近边缘,存在
GLES20的错误。glReadPixels
读取背景色,即使在动画完成后背景色实际上不可见。这里可能有什么问题?

在实际绘制动画后,通过再调用requestRenderer()两次,解决了这个问题。但我仍然不知道为什么会发生这种情况。可能是双缓冲的问题?实际上再调用requestRenderer()两次并不能消除这个问题,它只是降低了发生这种错误读取的可能性的%,我想我通过计算额外帧的渲染次数解决了这个问题。如果frame未完成渲染,并且调用了另一个requestRenderer(),则不会产生任何效果,因此我计算出在动画之后渲染了3个额外的帧,这就成功了