【问题标题】:Android GLES20.glBlendEquation not working?Android GLES20.glBlendEquation 不起作用?
【发布时间】:2012-01-16 19:25:02
【问题描述】:

几周以来,我一直在尝试制作具有深度和法线贴图纹理的 2.5D 引擎,这与此处使用的 Linky 不同。在认为由于 ES 2.0 缺少 gl_fragDepth 变量而无法从纹理中绘制片段着色器中的深度图后,我找到了一个 iOS 教程,其中他们使用模式 GL_MIN/GL_MAX 的 glBlendEquation 来“伪造”片段的深度缓冲到帧缓冲区纹理Linky。不幸的是,GLES20.glBlendEquation 使应用程序在我的两部手机(SGS 1/2)上崩溃,并出现 UnsupportedOperationException。所以我想知道是否有人使用此功能取得任何成功? Android Opengl ES 2.0 规范中似乎也缺少 GL_MIN/GL_MAX,所以我可能在这里不走运...... 有什么想法吗?

顺便说一句,它似乎在 GL11Ext 中工作,但由于我使用片段着色器进行法线贴图,这对我不起作用。

【问题讨论】:

  • 您找到解决方案了吗?
  • @jave 不,我没有进一步研究这个问题,也没有在任何论坛上收到任何反馈。所以我的假设是它没有在 android OpenGL ES 2.0 中实现。也许这已在较新版本的操作系统中得到修复?我使用 android OS v2.3 对此进行了测试。
  • 好的,我前几天自己也遇到过这个问题,但也没有找到解决办法。 (顺便说一下,使用 Android 2.2)。如果你确实解决了问题,我想看看你是怎么做到的。
  • 嗨,我正在研究这个问题,在 Android 2.2 上,我没有成功让 glBlendEquation() 工作,即使是简单的添加剂混合。我会说这是它的许多缺陷之一。我会在 2.3 设备上尝试,那里修复了一些与 OpenGL 相关的问题。此外,在 Tegra(以及其他具有 GL_NV_shader_framebuffer_fetch 的设备)上,混合器是片段着色器的一部分(因此混合方程可以用 GLSL 编写,并且很容易实现 min())。
  • 我还注意到,每当我调用 glBlendEquation 时,应用程序就会崩溃。使用 Android 2.3。

标签: android opengl-es-2.0 pixel-shading


【解决方案1】:

我正在我的 Vega 平板电脑 (Tegra) 上进行试验,这对我有用:

片段着色器:

#extension GL_NV_shader_framebuffer_fetch : require 
// makes gl_LastFragColor accessible

precision highp float;

varying vec2 v_texcoord;

uniform sampler2D n_sampler;

void main()
{
    vec4 v_tex = texture2D(n_sampler, v_texcoord);
    gl_FragColor = min(gl_LastFragColor, v_tex); // MIN blending
}

很简单吧?但恐怕这将是仅限 NV 的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2016-05-26
    • 2013-06-03
    • 2016-06-19
    相关资源
    最近更新 更多