you*_*ami 3 android opengl-es glsl fragment-shader opengl-es-2.0
我的代码正在绘制背景图像并在该图像之上绘制一些其他图像(粒子)。我想让粒子有一些混合效果,比如变暗、变亮、燃烧……和Canvas globalcompositeoperation一样。所以在片段着色器中,我需要获取之前的片段颜色并将其与新颜色混合。但我找不到办法做到这一点。
不,标准内没有可能性。但是,使用扩展EXT_shader_framebuffer_fetch(非 Mali 设备)和 ARM_shader_framebuffer_fetch(Mali设备)可以读取帧缓冲区中的值(自 OpenGL 2.0 和 OpenGL ES 2.0 / 3.0 起):
此扩展提供了一种机制,片段着色器可借此读取现有的帧缓冲区数据作为输入。这可用于实现固定功能混合不方便或不可能实现的合成操作。通过编写一个使用现有帧缓冲区颜色作为其唯一输入的着色器,它还可以用于将函数应用于帧缓冲区颜色。
请注意,不能保证硬件将支持扩展。您需要在运行时测试扩展是否受支持。
如果要从之前的渲染中读取片段,通常的方法是实现多个渲染通道并渲染到一个纹理。另请参阅LearnOpenGL - 延迟着色。
在很多情况下,不需要在片段着色器中读取片段。许多渲染效果可以使用标准混合功能实现。混合函数可以用 改变,glBlendFunc混合方程可以用 改变glBlendEquation。
| 归档时间: |
|
| 查看次数: |
154 次 |
| 最近记录: |