相关疑难解决方法(0)

sampler2D存储什么?

我已经阅读了一个纹理示例OpenGL 2.1.片段着色器看起来像这样:

#version 120

uniform sampler2D texture;
varying vec2 texcoord;

void main(void)
{
    gl_FragColor = texture2D(texture, texcoord);
}
Run Code Online (Sandbox Code Playgroud)

texcoord从顶点着色器传递.

使用以下C++呈现代码:

void render()
{
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_id);
    glUniform1i(unf_texture, 0);
}
Run Code Online (Sandbox Code Playgroud)

我对某些事感到困惑.我有一些问题:

  1. 在片段着色器中,纹理传递零值(通过glUniform1i).价值真的是零吗?价值还有别的吗?

  2. glUniform1i()调用真正需要的?

  3. 为什么我们在glUniform1i中传递零值?

opengl glsl

27
推荐指数
1
解决办法
3万
查看次数

Android OpenGL ES:自动更正env-> self和NvRmChannelSubmit失败

下面两个问题.

我们有一个图形OpenGL ES 2应用程序,在Windows,Linux,MacOS,iPhone,iPad和Android手机上运行了好几年.在过去的几个月里,我们开始收到一些Android设备用户的反馈(如Toshiba Thrive,HTC One X,Nexus 7或Asus Transformer,API 15和17),关于黑屏或闪烁屏幕的问题,或很少,应用程序崩溃.我们的应用程序针对API 9及以上,它是使用NativeActivity在NDK中编写的,直接基于nvidia android示例和演示,它已经在所有平台上进行了彻底测试,没有内存泄漏,没有无效的内存访问,它很少调用一些小的java码.

看看LogCat,我们注意到这些设备上有两种错误消息:

(1) JNI ERROR: env->self != thread-self (0x11734c0 vs. 0xd6d360); auto-correcting

(2)NvRmChannelSubmit failed (err = 196623, SyncPointValue = 0)其次是GL_OUT_OF_MEMORY

关于(1),我们知道线程与JNI问题,我们希望知道如何解决这个问题.我已经阅读了这些信息,我的问题是:"自动更正"是否意味着我们必须担心一些错误,或者它只是一个警告意味着代码在未来会表现得很糟糕,但现在它运行得很好(更正!)这与问题(2)无关?我问的原因是有时候我们也会看到以下几行:

E/libEGL: call to OpenGL ES API with no current context (logged once per thread)
E/NvEGLUtil: Failure: eglSwapBuffers, error = 0x0000300d (swap:422)
Run Code Online (Sandbox Code Playgroud)

哪个看起来很认真 我们已经在启用了JNIcheck的API 17模拟器上测试了我们的应用程序 - 没有报告任何问题,并且应用程序运行良好.

现在,关于消息(2),我找到了一些论坛(例如这里,这里也是这个),人们报告了这个消息,原因尚不清楚.看起来像固件或驱动程序问题,或GPU内存泄漏或内存碎片...许多游戏都受到屏幕闪烁的影响,人们正在尝试重启/重置设备,清除缓存,升级等,但问题似乎仍然存在.这个问题涉及很多流行的设备.尽管有GL_OUT_OF_MEMORY错误代码,但"没有足够的内存"是不合理的,因为我们用于测试的应用程序使用的是小型32x32纹理而不是常规版本中使用的512x512纹理(这些更大的纹理在旧设备上运行得非常好).任何人都有如何解决这个问题的经验,这在我们这方面是否可以解决?这是官方确认的硬件/固件/操作系统错误吗?我正在寻找一个已知的原因和这个问题的真正解决方案,而不是一个在不知道原因的情况下会意外帮助的试错工作方法.

谢谢!

java-native-interface android opengl-es-2.0

5
推荐指数
1
解决办法
877
查看次数