Android GLES20.glBlendEquation 不起作用?

发布于 2024-12-10 19:22:13 字数 592 浏览 1 评论 0原文

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

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

Ive been trying to make a 2.5D engine with depth and normal map textures for a few weeks now, not unlike whats used here Linky. After thinking the drawing of a depth map in the fragment shader from a texture was impossible due to ES 2.0 missing the gl_fragDepth variable I found a tutorial for iOS where they used glBlendEquation with the mode GL_MIN/GL_MAX to "fake" depth buffering of the fragment to a framebuffer-texture Linky. Unfortunely GLES20.glBlendEquation makes the application crash on both my phones (SGS 1/2) with UnsupportedOperationException. So Im wondering if anyone has used this function to any success? GL_MIN/GL_MAX also seems to be missing from the Android Opengl ES 2.0 spec so Im probably out of luck here...
Any ideas?

BTW It does seem to work in GL11Ext but since Im using the fragment shader for normal mapping this wont work from me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青衫负雪 2024-12-17 19:22:13

我正在我的 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。

i was experimenting on my Vega tablet (Tegra) and this worked for me:

fragment shader:

#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
}

Pretty easy, huh? But i'm afraid this will be NV-only.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文