首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓GLES20在仿生4.1.2上工作,而在三星4.4.2上不工作。

安卓GLES20在仿生4.1.2上工作,而在三星4.4.2上不工作。
EN

Stack Overflow用户
提问于 2014-10-10 19:19:12
回答 2查看 394关注 0票数 0

我正在开发一个在安卓设备上使用openGL ES 2.0的应用程序。该应用程序包含一些使用编程布局控件显示的按钮。此按钮垫被叠加在OpenGl表面视图上。当我在平板电脑上运行应用程序时,按钮会出现,但表面视图是灰色的,这是我创建的3d模型的背景颜色。这让我相信我的着色器有问题。我在我的片段着色器中使用了许多统一的矢量2。我在看这个网站:

http://www.shaderific.com/glsl-variables/

它说有一个内置的函数,你可以用它来判断你的GL实现使用多少个统一向量。如何在android中运行这段代码?

代码语言:javascript
复制
gl_MaxFragmentUniformVectors 

我打印出了GLES20.GL_MAX_FRAGMENT_UNIFORM_VECTORS的内容,得到了数字36349。我的着色器大约用了20。

如果这没有导致任何结果,这就是基本的错误。该应用程序工作在摩托罗拉仿生,Android 4.1.2,但不工作在三星Galaxy /Pro,Android 4.4.2!当然,我希望两者都能发挥作用。

代码语言:javascript
复制
W/ApplicationPackageManager﹕ getCSCPackageItemText()
E/MoreInfoHPW_ViewGroup﹕ Parent view is not a TextView

下面是三星设备的日志。

代码语言:javascript
复制
10-10 14:27:03.723  30456-30462/org.android.airplane D/dalvikvm﹕ Debugger has detached; object registry had 1 entries
10-10 14:38:55.833    1269-1269/org.android.airplane I/SELinux﹕ Function: selinux_android_load_priority [0], There is no sepolicy file.
10-10 14:38:55.833    1269-1269/org.android.airplane I/SELinux﹕ Function: selinux_android_load_priority , loading version is VE=SEPF_SM-T320_4.4.2_0018
10-10 14:38:55.833    1269-1269/org.android.airplane I/SELinux﹕ selinux_android_seapp_context_reload: seapp_contexts file is loaded from /seapp_contexts
10-10 14:38:55.843    1269-1269/org.android.airplane D/dalvikvm﹕ Late-enabling CheckJNI
10-10 14:38:55.943    1269-1269/org.android.airplane W/ApplicationPackageManager﹕ getCSCPackageItemText()
10-10 14:38:55.983    1269-1269/org.android.airplane E/MoreInfoHPW_ViewGroup﹕ Parent view is not a TextView
10-10 14:38:56.083    1269-1269/org.android.airplane I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build:  ()
    OpenGL ES Shader Compiler Version: E031.24.00.07
    Build Date: 01/22/14 Wed
    Local Branch: base_au149_adreno_au169_patches
    Remote Branch:
    Local Patches:
    Reconstruct Branch:
10-10 14:38:56.113    1269-1269/org.android.airplane D/OpenGLRenderer﹕ Enabling debug mode 0
10-10 14:38:58.823    1269-1269/org.android.airplane W/ApplicationPackageManager﹕ getCSCPackageItemText()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-26 21:59:49

更新解决了这个问题。我的三星设备现在工作了!

票数 0
EN

Stack Overflow用户

发布于 2014-10-11 02:17:55

GL_MAX_FRAGMENT_UNIFORM_VECTORS并不是所支持的制服数量。它是一个枚举值,允许您查询该值。通过调用:

代码语言:javascript
复制
int valA[] = new int[1];
GLES20.glGetIntegerv(GLES20.GL_MAX_FRAGMENT_UNIFORM_VECTORS, valA, 0);
int maxUniforms = valA[0];

ES 2.0规范要求实现至少支持16个统一向量。所以从理论上讲,如果你使用20,你就有可能超过极限。如果现代设备的极限真的那么低,我会很惊讶,但你一定要检查一下。

与任何其他类型的OpenGL问题一样,我确信您已经调用了glGetError(),并检查了结果。

除此之外,请确保检查着色器编译的结果,并与glGetShaderiv()glGetShaderInfoLog()glGetProgramiv()glGetProgramInfoLog()链接。一些GLSL编译器在强制执行标准遵从性方面比其他编译器更严格,因此您的着色器在某些设备上工作是很常见的,即使它们包含错误。

您可以尝试的另一件事是调用glValidateProgram(),然后使用glGetProgramiv()GL_VALIDATE_STATUS参数检查结果。这是最好的做法后,你设置了你的所有状态,立即进行第一次抽签决定。这可以报告在编译/链接时无法检测到的程序问题,因为这些问题取决于其他状态的设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26306567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档