Android (JNI/NDK) OpenGL - FPS 显示帮助
我有一个 Android 应用程序,我需要显示当前的 FPS。
1 - 应用程序在 OpenGL 中渲染。
public void onDrawFrame(GL10 gl) {
synchronized(lock) {
NativeCalls.getFrame(); // Setup in JNI/NDK
NativeCalls.drawFrame(); // using openGL
}
}
}
2 - 您可以看到渲染调用是从 Java 完成的,以调用来自 JNI 的函数。
3 - 我需要显示该 OpenGL 表面上的当前 FPS。
我认为这总结了我想要做的事情,所以让我再解释一下。这是一个动态壁纸,所以速度至关重要,我需要一种快速的方法来向用户显示 fps。
我知道如何计算 FPS,只是不显示它。
我正在寻找简单的方法,但问题是 OpenGL 渲染和设置是通过 JNI 完成的。
是否可以从 Java 端渲染此文本并将文本“覆盖”在从 JNI 创建的 OpenGL 表面上?
我已经研究过通过 JNI 端渲染它,但是在 OpenGL 中显示字体很痛苦。 (我的代码是 C,而不是 C++ - 由于其他事情需要进行重大重新编码才能从 NDK 端变为 CPP 兼容,因此无法更改此代码)。
任何建议、例子等都会很棒。我知道这可以通过 C 使用 freetype2 来完成,但是那里的简单库似乎都是 CPP 的(尝试过一些,由于 C->C++ (结构等),转换不是一个选项)。
显示的文本不多,例如:“FPS: 20”。而已。
I have an android app that I need to display the current FPS for.
1 - App is rendered in OpenGL.
public void onDrawFrame(GL10 gl) {
synchronized(lock) {
NativeCalls.getFrame(); // Setup in JNI/NDK
NativeCalls.drawFrame(); // using openGL
}
}
}
2 - You can see that the rendering call is done from Java to call functions from JNI.
3 - I need to show the current FPS over this OpenGL surface.
I think that sums up what I am trying to do, so let me explain a bit more. This is a live wallpaper, so speed is of the essence and I need a fast way to show the fps to users.
I know how to calculate the FPS, just not display it.
I am looking for ways of doing this simply, but the problem is that the OpenGL rendering and setup is done through JNI.
Is it possible to render this from the Java side and "overlay" the text over the OpenGL surface created from JNI?
I've looked into rendering this via the JNI side, but displaying fonts in OpenGL is a pain. (My code is C, NOT C++ - this cannot be changed due to other things that would need a major recode to become CPP compliant from the NDK side).
Any suggestions, examples, etc. would be great. I know this can be done using freetype2 via C, but the simple libs out there seem to be all for CPP (Tried some, conversion is not an option because of C->C++ (Structures, etc.)).
It's not much text to display, for example: "FPS: 20". Nothing more.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我也在做同样的事情;在 onDrawFrame() 中,我调用本机函数来进行渲染,然后回到 Java,我使用 drawText() 将 fps 渲染到纹理,并用该渲染四边形Java 代码中的纹理。效果很好。
I'm doing the same thing; in onDrawFrame() I call a native function to do the rendering, then back in Java I use drawText() to render the fps to a texture, and render a quad with that texture in Java code. Works great.