如何使用OpenGL着色器修改现有的纹理/帧缓冲区而不使用第二个纹理或帧缓冲区?这甚至有可能吗?运行OpenGL着色器修改现有的纹理/帧缓冲区
4
A
回答
5
起初: 这在技术上是可行且安全的读取和使用this extension在同一通写 - 但是我不建议这一点,尤其是对学生,因为扩展紧紧有限,可能不支持在每个硬件上。
话虽这么说:
所以它不可能使用相同的纹理作为采样和帧缓冲?
您可以使用纹理作为一个帧缓冲材质附着相同,渲染它,作为一个纹理采样器查找值在着色器,但不在同一通。这意味着,如果您有两个纹理,您可以从A读取并写入B,然后切换纹理并从B中读取并写入A.但是从来没有A-> A或B-> B(没有提及的扩展名)。
作为一个技术细节,当前被用作目标的纹理也可以同时绑定到采样器着色器变量,但是您不能使用它。
所以我们假设我想模糊纹理的一小部分。我必须通过着色器运行到第二个纹理,然后将该纹理复制回第一个纹理/帧缓冲区?
第二个纹理是。但出于效率原因,请勿复制纹理数据。只需删除源纹理并使用将来渲染的目标纹理即可。如果必须经常这样做,请将源纹理保留为渲染目标,以备将来使用,以提高性能。如果你不得不这样做,那么每一帧都只是在每一帧交换纹理。开销很小。
+0
或者如果你有多个通行证你需要做,那么只是在同一帧中来回渲染。 –
相关问题
- 1. OpenGL的 - 缓冲区,着色
- 2. OpenGL/OpenGL ES中的帧缓冲区,纹理和glColor行为
- 3. OpenGL - 帧缓冲区深度纹理与颜色深度纹理有所不同
- 4. OpenGL渲染到帧缓冲区导致白色矩形纹理
- 5. 计算着色器,缓冲区或纹理
- 6. 获取WebGL纹理/缓冲区/着色器计数
- 7. 着色纹理没有顶点缓冲区漫反射
- 8. OpenGL ES 2.0:将较小的纹理附加到帧缓冲区
- 9. OpenGL:读取帧缓冲区的深度纹理
- 10. OpenGL - 将帧缓冲区纹理设置为完全透明
- 11. 帧缓冲区/颜色缓冲区?
- 12. 纹理中的OpenGL片段着色器
- 13. 的OpenGL ES着色器多纹理
- 14. opengl - 黑色纹理,如何在缓冲区上使用glm :: vec *?
- 15. 在OpenGL中修改缓冲区
- 16. 快速修改OpenGL VAO缓冲区
- 17. 无法呈现到绑定到帧缓冲区的纹理
- 18. OpenGL计算着色器中的深度缓冲区示例
- 19. 着色器存储缓冲区中的OpenGL顶点
- 20. OpenGL着色器 - 重叠多个纹理
- 21. OpenGL着色器忽略纹理
- 22. OpenGl碎片着色器纹理速度
- 23. THREE.js中的着色器材质和GL帧缓冲区
- 24. 如何处理OpenGL索引缓冲区数组中的多个纹理以用于数据着色器?
- 25. OpenGL ES多色缓冲区
- 26. 深度缓冲区似乎不起作用 - OpenGL着色器
- 27. 从opengl计算着色器写入深度缓冲区
- 28. 渲染缓冲区或片段着色器后的纹理对象?
- 29. Open gl计算着色器和帧缓冲区
- 30. 修改Three.js中的现有着色器
不,你需要一个单独的缓冲区来保持旧的,而你正在写新的,你只是无法绕过。 –
因此,使用与采样器和帧缓冲区相同的纹理是不可能的? – jjxtra
想一想,如果片段着色器对先前调用已写入的像素进行采样,OpenGL可以防止程序员犯这个错误 –