Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android OpenGLES2无法渲染位图_Android_User Interface_Opengl Es 2.0_Glsles - Fatal编程技术网

Android OpenGLES2无法渲染位图

Android OpenGLES2无法渲染位图,android,user-interface,opengl-es-2.0,glsles,Android,User Interface,Opengl Es 2.0,Glsles,这是在android平台上使用OpenGLES2.0开发一个移动应用程序(如果API 8有什么不同的话)。 我试图在当前正在工作的渲染系统上添加一个UI层,但它不工作,我不知道为什么。任何帮助都将不胜感激。 以下是我正在做的: 1) 初始化时,我将加载一整堆要显示的网格,这些网格使用各种程序进行渲染。其中一个网格显示纹理,这正在工作。 2) 加载所有网格后,我加载一个“按钮”,它基本上是一个正方形,具有与上面(1)中已使用的纹理相同的纹理,并在其上拉伸。 3) 我的主渲染循环使深度掩码可写,并依



这是在android平台上使用OpenGLES2.0开发一个移动应用程序(如果API 8有什么不同的话)。

我试图在当前正在工作的渲染系统上添加一个UI层,但它不工作,我不知道为什么。任何帮助都将不胜感激。

以下是我正在做的:
1) 初始化时,我将加载一整堆要显示的网格,这些网格使用各种程序进行渲染。其中一个网格显示纹理,这正在工作。
2) 加载所有网格后,我加载一个“按钮”,它基本上是一个正方形,具有与上面(1)中已使用的纹理相同的纹理,并在其上拉伸。
3) 我的主渲染循环使深度掩码可写,并依次为每个程序渲染不透明的任何内容,然后使深度掩码只读,依次为每个程序渲染具有任何透明度的任何内容,然后清除深度缓冲区位并依次渲染每个UI组件。

我在做一件事情,这可能不是正确的方式做的事情-程序呈现我的UI组件没有执行任何模型视图投影转换-我直接传递归一化设备坐标到它,这只是一个传递。据我所知,这应该行得通——我之所以提到它,是因为我对此表示怀疑。UI组件程序的顶点和片段着色器的代码如下:
int-vShader=compileShader(GLES20.GL\u-VERTEX\u着色器,

“属性向量4位置;”+

“属性向量2 aTexCoord;”+

“可变矢量2 vTexCoord;”+

“void main(){”+

“vTexCoord=aTexCoord;”+

“gl\u Position=aPosition;”+

“}”)
int fShader=compileShader(GLES20.GL\u FRAGMENT\u着色器,

“精密中间泵浮动;”+

“统一采样器2D未来;”+

“可变矢量2 vTexCoord;”+

“void main(){”+

“gl_FragColor=texture2D(uTexture,vTexCoord);”+

“}”)


以下是我尝试过的:
1) 我尝试过阻止不透明和透明的程序运行。在这种情况下,我得到的屏幕上全是垃圾(有规则间隔的水平条纹,在纯黑色和看似随机的东西之间交替出现,每个条纹大约有50像素高)。
2) 我已经检查了我的
FloatBuffer
所基于的float数组的内容(我不知道如何直接检查
FloatBuffer
。我觉得这一切都很好。


我有点糊涂了!有人有什么想法吗?

好的,我已经把这件事搞清楚了。我先列出要检查的一般事项,以防有人再次来到这里,然后才知道我的损失到底是什么

一般来说:
1) 如果您没有看到内容,请禁用“消隐面”(
glDisable(GL\u消隐面)
);这样,如果多边形的利手方向不对,您仍然可以看到一些东西。
2) 请注意,OpenGL的0,0是左下角,但您可能已经决定0,0是UI代码的左上角(这有助于并教唆您错误地使用三角形)。第13点说明了如何避免这种情况。
3) 如果你在屏幕上看到垃圾,你可能忘记清理缓冲区了

因此,具体地说,我得到了一些错误的三角形(由于我的UI代码和OpenGL代码中的源代码之间不匹配),并且在开始将内容修剪回基础以进行调试时,意外地注释掉了glClear调用

关于是否有可能不对正交码进行矩阵变换,我觉得应该这样做,但不能报告;把东西缩减到最基本的部分意味着代码可以运行了,一旦我让它工作起来,我肯定不会把它放回去