3

我正在尝试找到一种方法来重新创建或至少获得与 Android 设备上 OpenGL es 2.0 中的最大钳位混合方程类似的结果。

不幸的是,glBlendEquation(GL_MAX_EXT)Android 不支持。GL_MAX enum在 Android 的 gl 头文件中定义,但执行时,结果是GL_INVALID_ENUM0x0500 错误。

我有一个使用着色器和屏幕外纹理的解决方案,其中每个渲染乒乓球在纹理之间使用着色器来计算最大像素值。

但是,对于大多数 Android 设备上的任何实时执行,此解决方案都不够快。

所以考虑到这个限制,有没有办法只使用不同的混合方程和混合因子来重新创建类似的结果?

我尝试了许多混合功能组合,最接近的是:

glBlendFunction(GL_SRC_ALPHA, GL_ONE_MINUS_ALPHA) :这很接近,但纹理变得太透明。低 alpha 值的纹理很难看到。

glBlendFunction(GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA) :这也有一些接近,但 alpha 积累太多,颜色变得比预期的更暗。

4

1 回答 1

1

如果您可以在不需要特殊GL_MAX混合功能的情况下进行混合……OpenGL 永远不会首先添加它。因此,您的选择是不使用或使用您的着色器方法。

于 2013-03-02T02:32:13.170 回答