【问题标题】:OpenGL ES 2.0 SL writing out from fragment shader to textureOpenGL ES 2.0 SL 从片段着色器写入纹理
【发布时间】:2014-01-08 16:36:08
【问题描述】:

希望这是一个非常简单的问题。

如何从片段着色器中写入附加到帧缓冲区的纹理。我假设它只是 gl_FragColor,我想定义/使用不同的变量,比如 gl_Data[0]?

片段着色器:

        precision mediump float;
        varying vec2 vTextureCoord;
        uniform sampler2D displayTexture;
        void main() {
          gl_FragColor = texture2D(displayTexture, vTextureCoord);
        }

这个问题不是如何设置要写入的纹理,而是如何从片段着色器中写入。我只是想确保我有这块拼图。

【问题讨论】:

  • 是的,应该是一样的输出。切换到显示缓冲区时,如果您有不同的制服/处理需求,则需要更改着色器程序。

标签: android opengl-es glsl framebuffer fragment-shader


【解决方案1】:

您似乎认为是正确的。所有绘图代码都应该与附加纹理的渲染缓冲区相同,甚至是着色器。

【讨论】:

  • 附加到 FBO 的纹理格式会不会有什么奇怪的地方?就像我在 EGL 中将一些配置属性定义为 RGBA8 一样,但是没有将纹理附加到 FBO 的选项,只有 RGBA4,所以转换是自动完成的还是这会杀了我?
  • 转换可能会杀死你。您应该能够将其设为 RGBA8。你在哪里插入这个参数?它可能只是 RGB 作为默认值。另外,如果我没记错的话,openGL 将在内部始终使用 RGBA8,并且在传输数据时会缩放其他格式:RGBA4 将缩放 x2 到 RGBA8,但您推送到纹理的数据必须是 16 位(这是杀死您的部分)。
  • glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, rain.width, rain.height, 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_SHORT_4_4_4_4, juliaTexBuff) 据说它总是与 GL_UNSIGNED_SHORT_4_4_4_4 一起工作,所以我认为这不是让我丧命的部分。这个问题已经完成了,这个问题已经回答了here
  • 由于您要附加此缓冲区,因此相关参数为 GLES20.GL_RGBA。您甚至不需要“juliaTexBuff”,您可以将其作为 NULL 发送,除非您以一些数据开始缓冲区,但清除帧缓冲区将覆盖这些数据。如果您确实使用它(或子图像),则该数据缓冲区应对应于 GL_UNSIGNED_SHORT_4_4_4_4 值。
  • 你是怎么知道朱莉娅的?你在监视我吗?哦,我,没关系。你是什​​么意思 juliaTexBuff 可以为空?这可能很重要。所以你说的是在两个纹理(读/写)之间交换时调用glTexImage2D() 在每个glBindTexture() 之后(在启动期间),以便两个纹理都作为TexImage2D 附加,而intBuff 不是连接点?
猜你喜欢
  • 1970-01-01
  • 2014-06-20
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多