java - 链接多个 GLES 2.0 程序
问题描述
我正在尝试分层/链接多个 GLES 2.0 效果/程序。在我的具体情况下,第一遍渲染视频帧,然后第二遍渲染顶部的一些粒子,最后我想应用一个动画缩放效果来转换整个合成。我现在链接着色器的方法是分别编译/附加/链接它们,然后在我的 onDrawFrame() 方法中为每一个连续调用 glUseProgram()。
super.onDrawFrame(fbo); // this is where I call the previous glUseProgram() ...
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, vertexBufferName);
GLES20.glEnableVertexAttribArray(getHandle("aPosition"));
GLES20.glVertexAttribPointer(getHandle("aPosition"), VERTICES_DATA_POS_SIZE, GL_FLOAT, false, VERTICES_DATA_STRIDE_BYTES, VERTICES_DATA_POS_OFFSET);
GLES20.glEnableVertexAttribArray(getHandle("aTextureCoord"));
GLES20.glVertexAttribPointer(getHandle("aTextureCoord"), VERTICES_DATA_UV_SIZE, GL_FLOAT, false, VERTICES_DATA_STRIDE_BYTES, VERTICES_DATA_UV_OFFSET);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 3); // texture #3 was just a guess but the previous ones appear to refer to stuff from the particles program, not the whole composition
GLES20.glUniform2f(getHandle("zoomCenter"), .5f, .5f); // passing the variables to the shader, don't think there's a problem with that part, therefore not including their source
GLES20.glUniform1f(getHandle("zoomFactor"), 2f);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
GLES20.glDisableVertexAttribArray(getHandle("aPosition"));
GLES20.glDisableVertexAttribArray(getHandle("aTextureCoord"));
这对于前两层效果很好,我可以按预期在视频上绘制我的粒子。当我将动画缩放着色器应用于未合成的视频帧时,它本身也可以按预期工作。
然而,当我运行上面的代码时,我得到的东西看起来可能是整个图像的缩放,但随后它会随着每一帧逐渐变白,大约一秒钟后完全变白。
我想这可能是因为我调用GLES20.glBlendFunc
了之前的粒子 GL 程序,所以某种添加剂混合不会出乎意料,但GLES20.glDisable ( GLES20.GL_BLEND );
只会给我一个黑屏。我是按错误的顺序称呼东西还是我的假设是胡说八道,GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 3);
到目前为止可能指的是整个作品?或者,也许我只是从根本上误解了链接这些着色器的方式。
解决方案
推荐阅读
- angular - 如何知道是否单击了mat paginator的下一个或上一个按钮
- python - 如何安装netfilterqueue
- javascript - 是什么导致 axios 发布请求中的错误 400?
- kubernetes - 从基准工具接收负载时,垂直 pod 自动缩放器不工作
- javascript - React 中的 LocalStorage 问题
- php - 使用 html 5 和 PHP 将 Microsoft 文件添加到 MySQL 数据库,当我检索文件时,我收到一条消息“Word 在
- git - 如何从 github 历史记录中的文件中删除敏感数据
- javascript - Vue.js:在不同时使用 v-for 和 v-if 的情况下转换元素的最佳方式?
- spring - Spring Boot 是否像 JPA(AbstractRoutingDataSource) 那样对 jdbctemplate 的多租户提供开箱即用的支持?
- r - R-devel 带有来自摇杆的消毒剂