Articles of opengl es

如何find不同手机的最大纹理尺寸?

我试图找出原始摩托罗拉Droid的最大纹理大小。 我相信G1的最大纹理大小为512,但如果有更正式的方式我会发现它会很好,所以我可以建立一个合适的瓷砖系统。

Android:什么时候OpenGL上下文被破坏?

在android上, GLSurfaceView文档说明了这一点: 当活动暂停并恢复时,必须通知GLSurfaceView。 GLSurfaceView客户端需要在活动暂停时调用onPause(),并在活动恢复时调用onResume()。 这些调用允许GLSurfaceView暂停和恢复渲染线程,并允许GLSurfaceView释放并重新创建OpenGL显示。 所以我应该在我的活动中做这样的事情: public void onPause() { myGlSurfaceView.onPause(); } public void onResume() { myGlSurfaceView.onResume(); } 我在我的代码中观察到,如果我不调用onPause()和onResume()那么当我按下主页按钮时上下文不会丢失,所以我可以在应用程序之间切换然后回到我的游戏,一切都是加工。 我看到的是,如果我使用后退按钮关闭游戏,那么当我再次打开它时屏幕是黑色的,但我可以改变后退按钮的行为以完全关闭游戏并避免这个问题。 所以我的问题是:什么时候OpenGL上下文被破坏? 如果我不调用onPause()和onResume() ,我可以假设它永远不会被销毁吗? 编辑: 我的目标是Android 2.2,因此setPreserveEGLContextOnPause()不是我的选择。

如何在android中创建动态用户面部模型?

您好我想在android中创建动态用户面部模型并显示给用户。 我搜索并发现我需要用户不同角度的面部框架(图像),如14到16个图像,并且为了显示目的需要使用opengl(用于平滑度)在用户手指滑动上更改图像(框架),使其看起来像3D图像。 但我希望像每个框架中的一些编辑(佩戴耳朵)一样显示给用户,如https://lh3.googleusercontent.com/WLu3hm0nIhW5Ps9GeMS9PZiuc3n2B8xySKs1LfNTU1drOIqJ-iEvdiz-7Ww0ZX3ZtLk=h900 请给我一些建议或示例。

如何确定Android OpenGL ES上的最大纹理内存

我正在Android上编写混合2D / 3D游戏,但我无法确定可以使用多少纹理内存。 有没有办法确定OpenGL ES中的最大纹理内存? 我有自己的纹理缓存,想知道纹理内存的最大阈值。 我正在使用activityManager.getMemoryInfo(mi)进行近似估计,但在某些设备上,当我尝试分配纹理(还有更多已经在内存中)时,应用程序崩溃( EGL_BAD_ALLOC )。 当我将此阈值设置为较低值时,一切似乎都可以。 有人有什么主意吗? 或者最终如何确定纹理分配不成功,而不是崩溃。

如何使用OpenGL在Android上绘制位图

我有一个RGB值的字节数组,就像* .bmp文件的内容(没有标题)一样。 我想要做的是,使用OpenGL在Android上绘制相应的位图。 似乎OpenGL ES没有单一的API可以做到,这是真的吗? 如果是的话,我该怎么做? PS:实际上,我可以用JAVA代码绘制它,但它太慢并且花费太多的CPU时间。 所以我想尝试使用OpenGL绘制它。 还有其他建议吗? 或者OpenGL可能不是正确的答案? 谢谢你们!

任何Android模拟器都支持OpenGL ES顶点arrays对象吗?

我一直在尝试运行使用Android NDK在C ++中使用VAO并在模拟器上运行的代码。 我希望能够使用glDeleteVertexArraysOES , glGenVertexArraysOES和glBindVertexArrayOES 。 我发现模拟器无法运行代码,即使我使用OpenGL ES 2并使用此解决方案动态链接扩展: Android OpenGL ES 2.0中是否支持使用扩展的顶点数组对象? 我在运行API Level 19和GPU加速的Nexus 4仿真器上运行了glGetString(GL_EXTENSIONS) ,并获得了以下信息: GL_EXT_debug_marker GL_OES_EGL_image GL_OES_depth24 GL_OES_depth32 GL_OES_element_index_uint GL_OES_texture_float GL_OES_texture_float_linear GL_OES_compressed_paletted_texture GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth_texture GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_packed_depth_stencil GL_OES_vertex_half_float 我假设我需要看GL_OES_vertex_array_object才能使用顶点数组对象。 因此,对于那个特定的模拟器来说,这似乎是不可取的。 你知道在任何现有的Android模拟器(第三方或其他)上是否可以在OpenGL ES中使用顶点数组对象? 如果是这样,怎么样?

如何使用Android摄像头与OpenGL ES工作?

我想使用OpenGL ES进行Android相机预览并保存捕获的图像。 我喜欢在Android相机中使用OpenGL ES来为Android相机提供一些效果。 所以请有人告诉我该怎么做?

如何在Android上正确初始化和终止EGL

虽然有许多关于在Android上使用OpenGL ES的示例,但在EGL的初始化/终止方面,所有这些似乎都是不正确的(甚至是Android SDK / NDK附带的)。 问题的根源在于Android应用程序模型,它正确地使用了EGL怪异的东西。 在所有Android样本甚至GLSurfaceView (实际上大多数样本只使用它)中,每个操作系统进程初始化EGL的真正问题涉及每个组件 (Activity或WallpaperService)的EGL初始化/终止。 这是完全错误的,因为所有组件都在同一个进程中运行! 如果应用程序只包含一个组件,则没有问题,但如果应用程序中有多个组件且每个组件都使用OpenGL ES,则会出现问题。 只考虑使用OpenGL ES的两个应用程序组件同时运行并且其中一个组件完成的情况。 完成这样的组件将调用eglTerminate() (在GLSurfaceView源代码中查看我正在谈论的内容),这将终止整个过程的EGL! 从这一刻开始,来自另一个已在运行的组件的任何EGL调用都将失败! 我检查了大量的例子,所有这些例子初始化并终止每个组件的EGL(实际上没有人看到我做过与GLSurfaceView不同的事情,其中​​大多数只是GLSurfaceView内部的副本)。 现在,我很有兴趣在Android上使用EGLfind一种“正确”的方式来开始工作(关于初始化/终止)。 “适当”的方式应该提供: 启动任何使用EGL的第一个组件时的EGL初始化 使用EGL的最后一个组件完成时终止EGL multithreading。 仅应从主应用程序线程对EGL操作不应有限制。 请注意,当没有使用EGL / OpenGL ES的活动实体时,(2)对于最小化应用程序的系统资源使用至关重要。 有任何想法吗? 或许我忽略了Android上的EGL? 更新 还有一个有趣的相关问题: 由于每个线程只允许一个活动渲染上下文,因此同一时间只有一个组件可以正常使用主线程中的OpenGL ES。 在同一时间运行的主线程中有多个使用OpenGL ES的组件会导致问题,因为最后一个组件调用eglMakeCurrent()会隐藏“替换”所有其他组件的上下文(这实际上将完全打破组件逻辑)。 更新2(最终) 据透露(感谢Romain Guy ),Android实际上有一个内部解决方案,用于EGL初始化/终止问题,以明确的forms(它违反EGL规范,在Android文档中没有提到)“引用计数”在eglInitialize内部( )和eglTerminate() 。

使用OpenGL将游戏逻辑与Android的快节奏游戏分离的最佳方法是什么?

我一直在学习和制作小游戏,最近我决定尝试为Android开发游戏。 对我来说,从原生C ++代码跳转到Android Java并不是那么难,但是让我头疼的是如何考虑如何将逻辑与渲染分开。 我一直在这里和其他网站上阅读: 最好不要为它创建另一个线程,因为Android肯定没有处理问题。 意思是代码是这样的: public void onDrawFrame(GL10 gl) { doLogicCalculations(); clearScreen(); drawSprites(); } 但我不确定这是否是最好的方法。 因为我不认为如果我将我的逻辑放在GLRenderer::onDrawFrame方法中它GLRenderer::onDrawFrame 。 据我所知,这个方法只是为了绘制,如果我把逻辑放在那里,我可能会减慢帧的速度。 更不用说它在我的理解中伤害了POO的概念。 我认为使用线程可能就是这样,这就是我的计划方式: 主要活动: public void onCreate(Bundle savedInstanceState) { //set fullscreen, etc GLSurfaceView view = new GLSurfaceView(this); //Configure view GameManager game = new GameManager(); game.start(context, view); setContentView(view); } 游戏管理: OpenGLRenderer renderer; Boolean running; public void start(Context […]

处理Android的纹理大小限制

我要求在Android应用上显示一些大图像。 现在我正在使用带有源位图的ImageView。 据我所知,openGL对图像尺寸的大小有一定的设备无关限制,以便处理它。 除了将图像分割成多个ImageView元素之外,有没有办法显示这些图像(固定宽度,没有裁剪),不管这个限制如何? 谢谢。 更新2013年4月1日到目前为止仍然没有运气所有建议都是为了降低图像质量。 有人建议可以通过使用CPU来执行处理而不是使用GPU来绕过此限制(尽管可能需要更多时间来处理)。 我不明白,是否真的无法在不降低图像质量的情况下显示固定宽度的长图像? 我敢打赌,如果有人至少指出我正确的方向,我会喜欢它。 感谢大家。