草庐IT

android - OpenGL ES2.0 glReadPixels() 非常慢

我正在使用glReadPixels将像素从FBO读取到内存。代码如下:UINT8*data;glBindFramebuffer(GL_FRAMEBUFFER,FBOID);glReadPixels(0,0,w,h,GL_RGB,GL_UNSIGNED_BYTE,data);我发现这个操作非常非常慢...在openGLES2.0(Android)中有没有其他选择? 最佳答案 是的,它很慢。OpenGLES2.0在Android上没有提供更快的方法。您可以在OpenGLES3.0上使用PBO,但这可能不适合您,因为目前支持它的设备很少,

android - glsl es dFdx/dFdy 模拟

我正在编写跨平台应用程序。它应该在Android设备上运行。我想使用dFdx/dFdy进行抗锯齿。但是,不幸的是,glsles2.0不支持导数。我可以用什么东西代替dFdx/dFdy吗?IE。1/sprite_width,1/sprite_height以屏幕像素为单位。正如我所说,我需要它才能在Android设备上运行。我看到我的设备支持GL_OES_standard_derivatives,它允许它使用这个函数。所有androidopengles2.0设备都支持吗? 最佳答案 正如我所说,许多OpenglES2.0设备都支持GL_

Android:如何将 MediaMuxer 与视频/mp4v-es 而不是视频/avc 一起使用?

我希望能够在某些设备上使用mp4v-es而不是avc。编码器使用avc运行良好,但是当我用mp4v-es替换它时,muxer报告:E/MPEG4Writer(12517):Missingcodecspecificdata如MediaMuxererror"Failedtostopthemuxer",视频无法播放。不同之处在于我将正确的轨道/格式添加到混合器,而没有收到任何错误:...elseif(encoderStatus==MediaCodec.INFO_OUTPUT_FORMAT_CHANGED){MediaFormatnewFormat=encoder.getOutputForma

Android Surfaceflinger 和 openGL ES

我有几个关于SurfaceFlinger的问题:1)我知道应用程序会写入Surface本身,然后将缓冲区移动到SurfaceFlinger(假设我使用的是HardwareCanvas或EGL)。缓冲区里面有什么?原始像素?编译openGL代码?缓冲区能否在一次交易中保存像素而在另一次交易中保存另一种类型的数据?2)我在某处读到SurfaceFlinger使用OpenGLES1.0API写入HWC/DisplayController命令。是真的吗?如果是,那么3.0版命令是如何翻译成1.0版命令的,在哪里?谢谢 最佳答案 (1)假设您

android - Opengl es 2.0 - 为什么 glFinish 在我的新安卓手机上给我的帧率比旧手机低?

我最近将我的旧GalaxyS2手机升级到全新的GalaxyS7,并且非常惊讶地发现我编写的旧游戏在新手机上的表现似乎更差。将所有内容简化为一个简单的项目后,我发现了问题-我在每个onDrawFrame结束时执行的GLES20.glFinish()调用。有了这个,有glClear但没有绘制调用,FPS徘徊在40左右。没有glFinish,稳定的60FPS。无论如何,我的旧S2都有稳定的60FPS。然后我回到我的游戏,删除了glFinish方法调用,果然性能恢复到完美,并且没有明显的缺点。为什么glFinish在我的新手机上降低了我的帧速率而不是我的旧手机? 最

android - opengl es中的3D多边形三角剖分

我正在寻找有关opengles中用于转换三角形集中的3d多边形的内置算法的任何信息。在opengles中有类似的实现吗? 最佳答案 简短回答:不,不作为OpenGLES的一部分。多边形分割作为GLU(OpenGL实用程序)库的一部分提供,基于每个平台、每个版本、每个实现者,因为它是可选的而不是OpenGL的核心。如果你在iPhone上工作,你应该看看iphone-glu声称支持多边形镶嵌。这是一个更通用的walkthrough在带有GLU的OpenGL中使用曲面分割(不是ES)这可能有助于照亮您的道路。

安卓 OpenGL ES 2.0

我试图在AndroidOpenGLES2.0示例中显示一个简单的三角形。但什么也没有出现,我只是不明白为什么:),我没有收到任何错误或任何东西,只是蓝屏(那是我的清晰颜色)。也许将我的模型放在外面的投影矩阵有问题?packagedk.madslee.modelviewer;importjava.nio.ByteBuffer;importjava.nio.ByteOrder;importjava.nio.FloatBuffer;importjavax.microedition.khronos.egl.EGLConfig;importjavax.microedition.khronos.o

android - Opengl Es 线宽

我在android上用opengles画了一条线。线条画得很好。唯一的问题是,无论相机离它多近或多远,这条线都保持相同的粗细。有解决办法吗? 最佳答案 OpenGL以固定宽度绘制线条(以像素为单位),与距相机的距离无关。如果您需要粗细随相机距离而变化的“线”,则必须将它们绘制为多边形。您可以使用glLineWidth()更改线宽,但它仍然是固定宽度(以像素为单位)。此外,在OpenGLES中,实现只需要支持最大1.0的线宽。至少有两种主要方法可以将线绘制为多边形。一种是为每条线绘制一个四边形,并确保四边形朝向相机。另一种方法是绘制一

android - Android 上的 JOGL 与 OpenGL ES API。优点缺点

我们正在尝试将我们的项目从PC版本迁移到Android。PC版使用JOGL。谁能解释在Android应用程序中使用JOGL而不是OpenGLESAPI的主要优点?例如,JOGL的PCpro是:理论上您可以在任何平台上使用它。它或多或少与AWT、Swing和SWT集成在一起。此外,它还是某种包装器,因此理论上有一些抽象可以更轻松地使用OpenGL。但我看不到在Android中使用它的优点,从我的角度来看,这是缺点:它是另一个依赖,APK大小会更大。一些影响JOGL和OpenGLES的问题需要更多是时候查明并修复了。这不是不需要一些时间的Elixir重构,因为在Android中我们应该使用

Android OpenGL es 2.0 无法重新加载对象上的纹理。

多亏了这里提出的几个教程、问题和答案,我已经设法加载纹理并自由旋转球体,但我偶然发现需要在运行时重新加载纹理(获取位图图像,对其进行处理,然后将其作为对象的新纹理)。我没有为我的特定问题找到任何有效的解决方案(我已经阅读了所有相关的问题和答案)。我对OpenGL很陌生。这是我的第二个项目,我的第一个3D项目,也是我在这里提出的第一个问题。所以这里是:基本上纹理加载是在以下函数中完成的:publicvoidloadGLTexture(finalContextcontext,finalinttexture){GLES20.glGenTextures(1,mTextures,0);if(mT