草庐IT

android - 纹理仅在某些设备上显示

我目前正在编写一个适用于OpenGLES1.1的Android应用程序。它在我开发它的HTCDesire(Android2.3.7)上运行良好。现在我想在Nexus7上测试它,但它只显示黑屏。我发现所有纹理都简单地呈现为黑色。在没有渲染对象和纹理的部分,我得到(几乎)黑色的背景色。所以我的问题是为什么纹理在某些设备上渲染得很好,而在其他设备上渲染得不好?纹理都是二次方的,大小为2的幂(即512x512、1024x1024)。这些是创建纹理时使用的设置:gl.glBindTexture(GL10.GL_TEXTURE_2D,getTextureId());//CreateNearestF

java - Opengl ES 2.0 : Get texture size and other info

问题的上下文是Android环境下的OpenGLES2.0。我有一个纹理。显示或使用都没有问题。是否有一种方法可以简单地从绑定(bind)ID开始了解其宽度和高度以及其他信息(如内部格式)?我需要在不知道纹理大小的情况下将纹理保存到位图。 最佳答案 不在ES2.0中。功能不存在实际上有点令人惊讶。您可以获取渲染缓冲区的大小,但不能获取纹理的大小,这看起来不一致。唯一可用的是您可以使用glGetTexParameteriv()获得的值,它们是纹理的FILTER和WRAP参数。它仍然不在ES3.0中。仅在ES3.1中,添加了glGetT

Android OpenGL 纹理 : creating and deleting them on the fly

我目前正在实现一个3D查看器,它基本上可以呈现用户在其SD卡上拥有的所有图像的子集。我想到的最匹配的产品是CoolIris:它只是在屏幕上显示一个由N个图block组成的滚动板,每个图block显示不同的图像,新图block进入屏幕并显示新图像。现在我的问题是:我的程序可以正常工作并很好地渲染四边形。当四边形离开屏幕时,它会被回收/释放。新的四边形在进入屏幕之前不断被添加到拼贴板上。因为可能有数百张图像,所以需要即时创建和删除纹理(这样我们就不会耗尽内存)。我遇到的问题是,在我删除纹理后,新创建的纹理似乎获得了当前正在使用的其他纹理的一些ID。我的渲染循环看起来像这样:voidrend

Android OpenGL - ES 纹理出血

我正在编写一个小应用程序,目前可以生成随机纹理贴图。我将这张map绘制成一组10x15的“四边形”,它们实际上都是三角形strip。我使用“map”获取一个整数,然后将其作为该正方形在textureAtlas中的纹理位置。所以例如0是左下角的“tile”。map集大小为128x128,分为32个像素block。然而,我似乎得到了一些奇怪的伪像,其中一个图block的纹理正在蔓延到下一个图block。我想知道它是否是图像本身,但据我所知,像素正是它们应该在的位置。然后我查看了我指定的纹理坐标,但它们看起来都很准确(0.0、0.25、0.5、0.75、1.0-将其分成我期望的4行和4列)。

安卓消息 "Cannot generate texture from bitmap"

我正在使用Gallery-widget和大量位图。我使用Bitmap.recycle()删除位图。结果我在logcat上看到了下一条消息:08-1817:49:26.020:INFO/dalvikvm-heap(13847):Growheap(fragcase)to22.373MBfor2457616-byteallocation08-1817:49:26.060:DEBUG/dalvikvm(13847):GC_FOR_ALLOCfreed1K,36%free22835K/35143K,paused27ms08-1817:49:26.230:DEBUG/dalvikvm(13847)

java - GLES2.0 : Use GL_TEXTURE_EXTERNAL_OES via glEGLImageTargetTexture2DOES

我想在Java中渲染一个图像缓冲区(在这种情况下,NDK不是一个选项)并通过GL_TEXTURE_EXTERNAL_OES将其传递给着色器.glTexImage2D不起作用,如spec中所述.但是函数glEGLImageTargetTexture2DOES只能通过GLES11Ext类使用,使用起来似乎有点不对。无论如何,我试过了,它给了我GL_INVALID_OPERATION,这应该发生在以下情况下:IftheGLisunabletospecifyatextureobjectusingthesuppliedeglImageOES(if,forexample,referstoamult

Android:OpenGL 存储纹理多长时间?

openGL将纹理存储多长时间?当您离开Activity时,纹理内存是否会被回收?例如,如果我有以下代码:mGL.glGenTextures(1,mTextures,0);mGL.glBindTexture(GL10.GL_TEXTURE_2D,mTextures[0]);//Aboundtextureis//anactivetexture//mGL.glTexImage2D(GL10.GL_TEXTURE_2D,0,GL10.GL_RGBA,bitmap.getWidth(),bitmap.getHeight(),0,GL10.GL_RGBA,GL10.GL_FLOAT,textur

android - Nexus S 上的 OpenGL ES 黑色纹理

可在NexusOne上运行的OpenGL代码在NexusS上无法正常运行。纹理似乎没有渲染,我只剩下黑色应该是纹理的地方。有人有什么想法吗? 最佳答案 acceptedanswergivenhere比我更深入地解决了这个问题,但是虽然这个黑屏问题确实是由于NexusS(和其他一些设备)对二次幂纹理很严格,这并不意味着纹理需要具有Po2的维度。在纹理加载代码中,可能有如下几行:GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MIN_FILTER,GLES20.

java - 如何捕获错误 'Bitmap too large to be uploaded into a texture'

我的android应用程序处理非常大的位图。因此,我在ImageView上关闭了硬件加速。但是,一些用户已将开发人员选项“强制GPU加速”设置为打开。这会导致错误“位图太大,无法上传到纹理中”。如果我使用isHardwareAccelerated()检查View,它总是返回false。有什么方法可以捕获OpenGL错误“位图太大而无法上传到纹理中”吗? 最佳答案 位图由像素组成,您可以计算位图矩阵中的像素数,为您的位图像素数设置一个限制。在OpenGl中我不能说,但通常我们可以轻松处理它们,也有一种方法位图.inSampleSize

android - 如何提高 OpenGL ES 中乒乓渲染(模糊)的性能

我正在尝试在我的Android设备上使用OpenGLES进行高斯模糊。我使用中提到的方法http://rastergrid.com/blog/2010/09/efficient-gaussian-blur-with-linear-sampling/我的应用程序中有两个帧缓冲区(A和B)。一维模糊,把A画到B,另一维模糊,把B画到A。当只有一个图像模糊时,它可以catch50fps。但是如果更多的图像被模糊,甚至非常小,FPS会下降到4~5。使用这种方法很糟糕。我的问题是:是否是一帧内多次切换两个FBO导致的性能问题?有没有更好的方法在Android设备上进行乒乓渲染。