- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在大多数 Android 设备上,如果我用整数而不是 float 进行所有 OpenGL 顶点计算/渲染,我是否应该期待性能提升?
我最近从使用 0:width, 0:height 而不是 -1:1, -1:1 的 OpenGL viewport 切换到 OpenGL viewport,这样我就可以将我所有的绘图计算/缓冲区转换为 Ints 而不是 Floats 如果它对性能是可取的。
例如,如果我在我的应用中执行许多以下类型的计算和渲染。
float x1 = someFloatCalculation(foo);
float x2 = someFloatCalculation(bar);
float y1 = someOtherFloatCalculation(foo);
float y2 = someOtherFloatCalculation(bar);
// the float buffer for the coordinates
FloatBuffer buf = makeFloatBuffer(new float[] { x1, y1, x2, y1, x1,
y2, x2, y2 });
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, buf);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
是否可以通过更改为类似的东西来加快速度
int x1 = someIntCalculation(foo);
int x2 = someIntCalculation(bar);
int y1 = someOtherIntCalculation(foo);
int y2 = someOtherIntCalculation(bar);
// the float buffer for the coordinates
IntBuffer buf = makeIntBuffer(new int[] { x1, y1, x2, y1, x1,
y2, x2, y2 });
// GL10.GL_INT is not an existing GL10 constant. What to use instead?
gl.glVertexPointer(2, ???GL10.GL_INT???, 0, buf);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
请注意这两个示例中的计算将完全相同,只是后一个版本只是将结果四舍五入为最接近的整数。
一个相关的问题是,如果我的视口(viewport)是从 0 到宽度和 0 到高度(以像素为单位),那么我是否会通过舍入在渲染中失去任何平滑度。也就是说,如果我用浮点值绘制一条线,OpenGL 将 float “四舍五入”到最近的像素是否会与四舍五入到最近的 int 然后渲染有相似的结果?
最佳答案
On most Android devices, should I expect a performance increase if I do all my OpenGL vertex calculations/rendering in Integers instead of Floats?
不,您不会看到任何区别。 GPU 是为浮点运算而生的。最有可能发生的是,您的整数甚至在上传到 GPU 之前就被转换为 float 。整数函数在那里是为了方便,但它在渲染端都是 float 。
关于Android - OpenGL FloatBuffer 与 IntBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256041/
谷歌没有找到答案,所以我来问 static float vertices_textures[] = { //vertices //positions
我正在使用 : 读取整数文件 int len = (int)(new File(file).length()); FileInputStream fis = new FileInputStream(f
我想在 Java 中分配一个直接 IntBuffer,比如说 10 亿个元素(64 位系统)。我知道的唯一方法是创建一个直接 ByteBuffer 并将其视为直接 IntBuffer。但是,4*1,0
所以我有一大堆我必须处理的整数(大约 70Mb)。作为阅读过程的一部分,我需要暂时存储它们。我可以将它们分布在多个 IntBuffer 上,或者分配几个大数组。 但是,我找不到任何关于 IntBuff
每当我运行以下代码时,java 在释放 IntBuffer 时都会返回 EXCEPTION_ACCESS_VIOLATION: public int[] size(){ IntBuffer s
我在 IntBuffer 中有图像的 RGB 数据,并希望通过绘画将其显示在 JPanel 上。最有效的方法是什么? 编辑 目前我通过以下代码将数据绘制到 BufferedImage 上,但想知道是否
abstract class IntBuffer 似乎无论如何都无法创建此类的实例,因为它声明为抽象,但同时,还有一个静态工厂方法IntBuffer allocate(intcapacity) 现在您
正如标题所说,它想要创建一个由特定(已经存在的)IntBuffer 支持的 BufferedImage。 到目前为止,我有以下代码: final IntBuffer buf = ...; DataBu
我有以下代码: IntBuffer DrawBuffers = Utils.createIntBuffer(2); int bfs[] = {GL30.GL_COLOR_ATTACHMENT0
在使用堆外缓冲区时,可能需要将它们复制到数组中。假设我们不知道缓冲区是关闭还是在堆上。如何填写执行? IntBuffer b = ... // could be off or on -heap int
在大多数 Android 设备上,如果我用整数而不是 float 进行所有 OpenGL 顶点计算/渲染,我是否应该期待性能提升? 我最近从使用 0:width, 0:height 而不是 -1:1,
我试图获取一组 mipmaplevels 并将其保存到本地缓存文件,以避免每次都重建它们(并且预先生成它们是不切实际的......) 我已经将 mipmaplevels 放入了一组位图中,现在想将它们
我正在开发一个 Android 应用程序(显然是用 Java 编写的)并且我最近更新了我的 UDP 阅读器代码。在这两个版本中,我都设置了一些缓冲区并接收了一个 UDP 数据包: byte[] buf
我知道一个快速的方法,可以将byte/short/int/long数组转换成ByteBuffer,然后得到一个字节数组。例如,要将字节数组转换为短数组,我可以这样做: byte[] bArray =
我有三个代码 fragment ,它们的行为应该相似,也可能不是,我仍在研究 OpenGL ES 如何与 Android 的 Java 绑定(bind)。但是我真的很想知道为什么 fragment B
我希望能够在我的 Android 应用程序中添加一些 native C 代码。我有一个 IntBuffer 用作 OpenGL 的 glColorPointer 方法的参数。这是填充/使用这样的东西:
这里还有其他关于此主题的问题,其中大部分涉及 ByteBuffer 和 asIntBuffer。但是,我还没有看到任何关于如何在转换为 IntBuffer 时防止值被截断的解释。 例子: byte[]
我最近在 Badlogicgames.com 上阅读了一篇关于加速将信息添加到顶点缓冲区(或任何其他 intbuffer)的过程的文章,它确实提高了我的项目速度,但我不太明白 "Noticing th
我上周开始使用 OpenGL 3.3+,在尝试让索引绘图工作时遇到了这个问题。现在,我只是尝试使用 IBO 绘制一个三角形。 索引缓冲区和indexHandle: int[] tIndices = {
我是一名优秀的程序员,十分优秀!