Articles of 性能的

Opengl ES 2.0绘图调用的计时计算

我正在Linux中的OpenGL ES 2.0中绘制一个立方体。 我正在计算使用下面的函数每帧的时间 #define NANO 1000000000 #define NANO_TO_MICRO(x) ((x)/1000) uint64_t getTick() { struct timespec stCT; clock_gettime(CLOCK_MONOTONIC, &stCT); uint64_t iCurrTimeNano = (1000000000 * stCT.tv_sec + stCT.tv_nsec); // in Nano Secs uint64_t iCurrTimeMicro = NANO_TO_MICRO(iCurrTimeNano); // in Micro Secs return iCurrTimeMicro; } 我使用简单的x轴旋转运行我的代码100帧。 我每帧大概200到220微秒。 那就意味着我正在绕过(1/220微秒= 4545)FPS我的GPU是那么快吗? 我强烈怀疑这个结果。 代码中出了什么问题?

显示每个引擎子系统的性能数据

我们的游戏(基于Android)会追踪执行世界逻辑更新需要多长时间,以及将帧渲染到设备屏幕需要多长时间。 这些轨迹是每帧收集的,并以固定的间隔(当前每1秒)显示。 我看过游戏中显示各种引擎子系统的屏幕数据,消耗的时间(文本)或水平的彩条。 我想知道如何实现这样的function?

OpenGL ES – DrawCalls计数 – 瓶颈?

我是OpenGL ES的新手(到目前为止,我主要使用DX11)。 现在我的场景,我有大约100个来电。 我可以使用实例化,但只有大约一半的对象可以实例化,所以绘制调用次数大约为50 – 60帧。 每个对象是最大的。 700个三角形(我使用低聚模型) 什么是某种限制每个场景drawcalls(针对性能设备的iPhone 4)? 到目前为止,我通过Windows上的ATI GLES运行我的代码,但是我的CPU和GPU有很多function。 还是有办法,如何find我的应用程序的瓶颈? 我知道gDebugger是用于OpenGL的,但是ES版本的performance有时很奇怪(在我的代码中没有很多警告,所以我怀疑它们来自ATI层代码)。

在Android游戏开发中避免内存分配

出于显而易见的原因,不推荐在Android游戏开发中dynamic分配内存。 例如: http://developer.android.com/training/articles/perf-tips.html : 编写高效代码有两个基本规则: 不要做你不需要做的工作。 如果可以避免的话,不要分配内存。 我遵循这个建议,并在游戏进行时避免任何内存分配。 然而,这限制了我对某些任务的处理。 虽然我可以更改我的代码来看看会发生什么,但是这里有相当多的代码,并不会告诉我除了有限的可用于testing的硬件范围以外的其他性能。 我想知道是否有任何一般的经验法则可以提供对这个问题的了解,比如可以分配/释放多less分配; 无论是分配的个人规模还是总量是最重要的; 你可以做的事情,以缓解问题(我假设问题主要是垃圾收集器踢,损坏性能,和/或内存不足,如果它不足够频繁); 它会影响Android的某些版本吗?

iOS:OpenGL ES 2.0渲染具有glScissor性能的纹理

我用OpenGL绘制图像,并将重绘其纹理(非填充区域)的瓷砖。 哪种情况会更快? 设置完整纹理的矩形glViewport,绘制完整的纹理,并使用glScissor与更新区域的矩形。 使用更新区域的矩形设置glViewport,并绘制纹理图块,并计算纹理坐标。 我在Apple的文档中发现,剪切testing是在片段着色之后调​​用的。 这是否意味着,片段着色器将与全纹理的像素一起工作? 比案例2要慢多less? 解决:我已经在这里查看了OpenGL ES 2.0的管道scheme。 剪切testing在片段着色之前完成,并允许优化渲染。

改善粒子系统的性能(OpenGL ES)

我正在为2D移动游戏实现一个简单的粒子系统(使用OpenGL ES 2.0)。 它工作,但它很慢。 大概有400个粒子,我觉得帧率很低,我觉得它很低。 以下是我的方法的总结: 我开始使用本地浮点缓冲区(我在Android上的Java-land,因此翻译为java.nio.FloatBuffer )批处理渲染的点精灵( GL_POINTS )。 在GL上下文init中,设置了以下内容: GLES20.glViewport(0, 0, width, height); GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); GLES20.glEnable(GLES20.GL_CULL_FACE); GLES20.glDisable(GLES20.GL_DEPTH_TEST); 每个并条框架设置如下: GLES20.glEnable(GLES20.GL_BLEND); GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA); 我绑定一个纹理: GLES20.glActiveTexture(GLES20.GL_TEXTURE0); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle); GLES20.glUniform1i(mUniformTextureHandle, 0); 这只是一个简单的圈子,有一些模糊(因此一些透明度) 然后有一堆glVertexAttribPointer调用: mBuffer.position(position); mGlEs20.glVertexAttribPointer(mAttributeRGBHandle, valsPerRGB, GLES20.GL_FLOAT, false, stride, mBuffer); …4 more of these 然后我画: GLES20.glUniformMatrix4fv(mUniformProjectionMatrixHandle, 1, false, Camera.mProjectionMatrix, 0); GLES20.glDrawArrays(GLES20.GL_POINTS, 0, drawCalls); GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0); […]

我怎样才能有效地渲染到多个屏幕?

我知道XNA早就死了,但我需要它来更新一个旧的项目。 (我将移植到MonoGame,但无法获得多显示器支持。) 我的游戏执行以下操作: 等待我从服务器获得的一些对象(在另一个线程中) 我有一些代表队列的组件(大约5个) 当对象到达时,我根据唯一信息生成纹理,从池中获取一个精灵,应用纹理并将其添加到队列中。 游戏从左到右animation队列(当一个对象被添加到队列中时) 所以你看到很多独特的纹理在屏幕上移动(更新非常快)。 现在我需要将游戏的两个实例运行到多个显示器,并且存在滞后。 帧频不断下降,animation显示不清晰。 在两个线程上运行两个游戏两个显示器是一个好主意? 我能做些什么(在单独的进程上运行它们)? 有人可能会建议渲染优化像跳帧或类似的东西,或者我怎样才能同步两个实例? 或者,甚至更好,我怎样才能从同一个游戏实例的两个屏幕上绘制?