据我所知,从GLES30开始,不再有items.computeIfAbsent(key, k -> new SimpleStringProperty())
缓冲区(我看到它HERE)
由于我无法阅读"特殊变量",我怎样才能阅读" out"缓冲
这是我的代码:
gl_FragColor
这里我尝试读取数据:
private static final String FRAGMENT_SHADER =
"#version 300 es\n"+
"#extension GL_OES_EGL_image_external_essl3 : require\n" +
"precision mediump float;\n" + // highp here doesn't seem to matter
"in vec2 vTextureCoord;\n" +
"uniform sampler2D sTexture;\n" +
"out vec4 fragColor ;\n" +
"void main() {\n" +
" vec4 tc = texture(sTexture, vTextureCoord);\n" +
" fragColor.r = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
" fragColor.g = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
" fragColor.b = tc.r * 0.3 + tc.g * 0.59 + tc.b * 0.11;\n" +
"}\n";
代码中没有gl错误。
输出 ByteBuffer mPixelBuf = ByteBuffer.allocateDirect(mWidth * mHeight * 4);
mPixelBuf.order(ByteOrder.LITTLE_ENDIAN);
GLES30.glReadPixels(startX, startY, frameWidth, frameHeight, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, mPixelBuf);
仅为零。
如何确保mPixelBuf
正在阅读?
由于
Update1-完整纹理渲染代码:
fragColor
答案 0 :(得分:0)
您的着色器代码与glReadPixels
读取的内容完全无关,它与特殊变量名称无关。它从当前绑定的读取帧缓冲区读取; ES 3.0中的glReadPixels
的工作方式与ES 2.0中的工作方式完全相同。
唯一的例外是多个渲染目标支持,但在这种情况下不相关。
如何确保fragColor正在阅读?
glClearColor(some interesting color)
glClear(COLOR_BUFFER_BIT)
glReadPixels()
assert color == some interesting color
答案 1 :(得分:0)
我学到的是你的GLES30.glReadPixels
调用需要在eglSwapBuffers之前完成,因为根据{{1}的文档glReadBuffer
在双缓冲配置中最初设置为GL_BACK
}。一旦glReadBuffer
调用eglSwapBuffers
,就不会将任何内容读回主内存。