标签: opengl-es

OpenGL ES iPhone - 绘制抗锯齿线

通常,你会使用类似的东西:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);

glLineWidth(2.0f);

glVertexPointer(2, GL_FLOAT, 0, points);
glEnableClientState(GL_VERTEX_ARRAY);

glDrawArrays(GL_LINE_STRIP, 0, num_points);

glDisableClientState(GL_VERTEX_ARRAY);
Run Code Online (Sandbox Code Playgroud)

它在iPhone模拟器中看起来不错,但在iPhone上,线条变得非常薄,没有任何抗锯齿.

你如何在iPhone上获得AA?

iphone opengl-es line antialiasing

37
推荐指数
3
解决办法
4万
查看次数

libgdx SpriteBatch渲染到纹理

是否可以在libGdx(Android/Desktop的Java引擎)中使用SpriteBatch渲染到纹理?如果是这样,怎么办?

基本上我想将所有内容渲染到512 x 256纹理的320 x 240区域,而不是缩放区域以适合屏幕(在横向模式下).这样我想消除当我独立缩放alpha混合纹理时发生的伪像.如果有任何其他方法来删除这些工件,请指出它们:)

还有libGdx的在线文档吗?

android opengl-es libgdx

36
推荐指数
1
解决办法
3万
查看次数

绘图路径和硬件加速

我在我的视野中画了一条相当大的路径,我遇到了一些性能问题.该路径目前长达32,000点,但我的应用程序应该扩展到至少128,000点.我无法对路径的大小做任何事情,因为数据集只是那么大,我需要能够一次显示整个路径并允许放大.

我正在使用运行Android 4.2的Nexus 10,默认情况下为未明确禁用它的应用程序启用硬件加速.

使用以下代码创建路径(我省略了一些设置和其他不相关的部分):

dataPath.moveTo(0, offset - (float) data[leftLimit]/ scalingFactor);
        for (int i = leftLimit; i < rightLimit; ++i) {
            x = (i - leftLimit) * dx;
            y = offset - (float) data[i]/ scalingFactor;
            dataPath.lineTo(x, y);
        }
Run Code Online (Sandbox Code Playgroud)

然后在onDraw()方法中绘制:

canvas.drawColor(Color.WHITE);
canvas.drawPath(dataPath, linePaint);
Run Code Online (Sandbox Code Playgroud)

我测量了使用adb shell dumpsys gfxinfo和不使用硬件加速来绘制视图所需的时间,令我惊讶的是硬件加速速度要慢得多:

通过硬件加速:

在此输入图像描述

没有硬件加速:

在此输入图像描述

硬件加速版本每帧大约需要200-300毫秒,大多数花费在处理阶段.非加速版本大约需要50 ms,Draw阶段为2/3,处理阶段为1/3.

显然,即使我没有硬件加速的更快版本仍然太慢而无法实现60 fps,或者当我迁移到更大的数据集时甚至几乎无法使用.

在我的情况下,将路径呈现为位图然后仅转换该位图以适合屏幕的想法也存在问题.我需要支持在路径上放大很远,并且在没有路径质量变差的情况下启用放大我将不得不渲染路径的超大位图(并且可能会遇到内存限制和纹理大小限制).当放大远时我不得不创建仅部分路径的新图像,或者切换到仅直接渲染路径,如果性能仍然与我的权限相似,这可能会导致延迟大于帧速率现在.

我现在想知道的是

  • 绘制线条/路径只是GPU不好的事情而且不应该尝试硬件加速,或者我是否可能做错了会导致性能不佳?
  • 我有什么办法可以用可接受的性能画出如此巨大的路径吗?

graphics android opengl-es

36
推荐指数
2
解决办法
1万
查看次数

了解iPhone上的内存消耗

我正在使用OpenGL ES开发2D iPhone游戏,并且我一直在达到24 MB的内存限制 - 我的应用程序一直在崩溃,错误代码为101.我试着很难找到内存的位置,但是仪器中的数字仍然很多大于我的预期.

我使用Memory Monitor,Object Alloc,Leaks和OpenGL ES仪器运行应用程序.当应用程序加载时,自由物理内存从37 MB下降到23 MB,Object Alloc稳定在7 MB左右,Leaks显示两个或三个泄漏,几个字节大小,Gart对象大小约为5 MB,内存监视器说应用程序占用大约14 MB的实内存.令我感到困惑的是内存的去向 - 当我深入研究对象分配时,大部分内存都在纹理中,正如我所期望的那样.但是我自己的纹理分配计数器和Gart对象大小都同意纹理应该占用大约5 MB.

我不知道分配任何其他值得一提的东西,Object Alloc同意.记忆在哪里?(如果这还不够,我会很乐意提供更多细节.)


更新:我真的试图找到我可以分配这么多内存的地方,但没有结果.让我疯狂的是对象分配(~7 MB)与内存监视器(~14 MB)所示的实际内存使用之间的差异.即使我忘记了巨大的泄漏或巨大的内存块,它仍应出现在对象分配中,不应该出现吗?

我已经尝试过通常的 嫌疑人,即.在UIImage与它的缓存,但没有帮助.有没有办法逐行跟踪内存使用情况"调试器样式",观察每个语句对内存使用情况的影响?


到目前为止我发现了什么:

  1. 我真的使用那么多记忆.测量实际内存消耗并不容易,但经过大量计算后,我认为内存消耗真的很高.我的错.

  2. 我发现没有简单的方法来衡量使用的内存.内存监视器编号是准确的(这些是真正重要的数字),但内存监视器无法告诉您内存的确切位置.Object Alloc工具几乎无法跟踪实际内存使用情况.当我创建一个纹理时,分配的内存计数器会上升一段时间(将纹理读入内存),然后下降(将纹理数据传递给OpenGL,释放).这没关系,但并不总是发生 - 有时即使将纹理传递给OpenGL并从"我的"内存中释放出来,内存使用率也会保持很高.这意味着Object Alloc工具显示的内存总量小于实际总内存消耗量,但大于实际消耗减去textures(real – textures < object alloc < real).去搞清楚.

  3. 我误读了编程指南.内存限制为24 MB适用于纹理和曲面,而不是整个应用程序.实际的红线位置更远,但我找不到任何硬数字.共识是25-30 MB是上限.

  4. 当系统内存不足时,它会开始发送内存警告.我几乎没有任何东西可以免费,但其他应用程序确实会将一些内存释放回系统,特别是Safari(似乎是缓存网站).当内存监视器中显示的可用内存为零时,系统开始查杀.

我不得不咬紧牙关并重写代码的某些部分以提高内存的效率,但我可能还在推动它.如果我要设计另一个游戏,我肯定会考虑一些资源分页.在当前的游戏中它非常难,因为事物一直处于运动中并且加载纹理会妨碍,即使在另一个线程中完成.我会对其他人如何解决这个问题感兴趣.

请注意,这些只是我的观点,不一定非常准确.如果我发现有关此主题的更多内容,我会更新问题.我会保持问题公开,以防有人理解这个问题会关心回答,因为这些都是比其他任何事情更多的变通办法和猜测.

iphone memory-management opengl-es

35
推荐指数
1
解决办法
2万
查看次数

将变量传递给OpenGL GLSL着色器

我正在编写一个iPhone应用程序,它使用GLSL着色器对纹理进行转换,但有一点,我有点困难的是将变量传递给我的GLSL着色器.

我已经读过,可以让着色器读取OpenGL状态的一部分(我只需要对此变量进行只读访问),但我不确定该交换是如何发生的.

简而言之,我试图获得在片段着色器之外创建的浮点值,以便片段着色器可以访问(无论是传入还是从着色器内部读取).

感谢您提供的任何帮助/指示,非常感谢!

iphone opengl-es glsl

34
推荐指数
1
解决办法
2万
查看次数

OpenGL ES渲染到纹理

我一直无法找到简单的代码来将场景渲染到OpenGL ES中的纹理(特别是对于iPhone,如果这很重要).我有兴趣知道以下内容:

  1. 如何在OpenGL ES中将场景渲染到纹理?
  2. 必须使用哪些参数来创建能够成为OpenGL ES渲染目标的纹理?
  3. 将此渲染纹理应用于其他基元是否有任何影响?

iphone opengl-es render-to-texture

33
推荐指数
2
解决办法
3万
查看次数

Android - 使用NDK的OpenGL ES 2.0教程?

我正在寻求OpenGL ES 2.0在Android 上学习,我发现的教程几乎都是使用的SDK with Java.我想使用本机代码,所以我想通过NDK来实现.我发现的唯一教程/示例就是样本NDK本身.

我在哪里可以找到一些NDK OpenGL ES 2.0教程?如果那里没有好的教程,是否可以使用Java OpenGL教程来学习如何在NDK中使用它?例如,方法是否将1:1从java映射到本机?

android opengl-es android-ndk

32
推荐指数
1
解决办法
2万
查看次数

Android OpenGL .OBJ文件加载器

似乎有很多OBJ网格文件加载器已经开发出来供Android平台上使用.我想知道是否有人有这方面的经验,并可以提供一个似乎最适合他们的建议.

这是我的标准:

  • 轻量级(小文件大小),
  • 优化速度,
  • 易于实施,
  • 提供某种纹理映射支持(不确定我是否需要这个 - 在我的编码中没有足够的知识来知道我是否需要一个库来执行此操作,或者OpenGL ES是否能够完成我需要的所有工作在这里)和
  • 可用于商业销售的Android应用.

以下是我发现的一些库.

我也很乐意听到不在此列表中的其他人.

3d android opengl-es mesh

31
推荐指数
2
解决办法
6万
查看次数

选择OpenGL ES 1.1或OpenGL ES 2.0?

我将开始一个新的跨平台openGL项目(主要用于iPhone和PC).所以主要问题是:针对OpenGL ES 1.1或OpenGL ES 2.0?或两者?到目前为止我读过Open GL ES 1.1并没有真正弃用,不是吗?那么对于openGL ES 2.0会说些什么呢?可编程顶点和碎片整理器 - 还有别的吗?我听说阿尔法混合后性能下降了 - 这可能是真的吗?我假设openGL ES 2.0代码也应该在PC上运行 - 那么openGL ES 2.0是否真的更具未来意识?

那里的其他开发人员仍然在编写OpenGL ES 1.1或2.0?为什么?我假设如果我选择openGL ES 2.0,那么与openGL ES 1.1的向后兼容性也会有很多开销.但是有很多iPhone没有openGL ES 2.0支持 - 我该怎么做到这一点?那里有经验吗?

我发现只有这个问题:iPhone上的OpenGL ES 1.1或2.0类型相关,但实现并不是很深入......所以欢迎任何建议!非常感谢!

iphone cross-platform opengl-es opengl-es-2.0

31
推荐指数
1
解决办法
1万
查看次数

Android build get错误消息"Emulator:OpenGL后端'角度'没有检测到OpenGL ES 1.x库.仅使用GLESv2."

在Android Studio版本3 beta 7中运行我的Android项目后,我在事件日志中收到以下错误:

模拟器:未检测到OpenGL ES 1.x库的OpenGL后端"角度".仅使用GLESv2.

有没有什么办法解决这一问题?

android opengl-es android-studio android-gradle-plugin

31
推荐指数
1
解决办法
2320
查看次数