gpt4 book ai didi

java - 适用于 Android 的 IntBuffer、ByteBuffer、ByteOrder 和 GLES20

转载 作者:行者123 更新时间:2023-12-01 05:08:49 29 4
gpt4 key购买 nike

我有三个代码 fragment ,它们的行为应该相似,也可能不是,我仍在研究 OpenGL ES 如何与 Android 的 Java 绑定(bind)。但是我真的很想知道为什么 fragment B 和 C 的行为不同:

以下 (A) 有效:

        ByteBuffer bb = ByteBuffer.allocateDirect(8);
bb.order(ByteOrder.nativeOrder());
IntBuffer ib = bb.asIntBuffer();
Log.d("Info", "Generating buffers...");
GLES20.glGenBuffers(2, ib);
Log.d("Info", "Done!");
int buff1 = ib.get();
int buff2 = ib.get();
Log.d("A) buff1", String.format("%d", buff1));
Log.d("A) buff2", String.format("%d", buff2));

以下 (B) 不起作用,并会导致 glGenBuffers 上出现 SIGSEGV;请注意,与之前的唯一区别在于 allocate 调用而不是 allocateDirect:

        ByteBuffer bb = ByteBuffer.allocate(8);
bb.order(ByteOrder.nativeOrder());
IntBuffer ib = bb.asIntBuffer();
Log.d("Info", "Generating buffers...");
GLES20.glGenBuffers(2, ib);
Log.d("Info", "Done!");
int buff1 = ib.get();
int buff2 = ib.get();
Log.d("B) buff1", String.format("%d", buff1));
Log.d("B) buff2", String.format("%d", buff2));

以下 (C) 有效,这真的让我感到惊讶,因为它又是对 allocate 的调用,而不是对 allocateDirect 的调用:

        IntBuffer ib = IntBuffer.allocate(2);
Log.d("Info", "Generating buffers...");
GLES20.glGenBuffers(2, ib);
Log.d("Info", "Done!");
int buff1 = ib.get();
int buff2 = ib.get();
Log.d("C) buff1", String.format("%d", buff1));
Log.d("C) buff2", String.format("%d", buff2));

用“works”一词,我的意思是日志中没有显示任何错误,并且 buff1 和 buff2 获得正的“合理”值,例如 70001、140002 或 210004,看起来它们可能是名称。

最佳答案

答案似乎是 JOGL Javadoc page ,在接口(interface)GL的文档中,方法:

void glGenBuffers(int n, IntBuffer buffers)

这里说缓冲区应该是直接OR数组支持IntBuffer,并且在(B)中创建的缓冲区不是这些,而(A)是直接的,但没有支持,(C)不是直接的,但有支持。

现在我想知道是否有 Google 官方文档将 OpenGL 绑定(bind)到 Dalvik 系统,或者我应该假设它正是 JOGL?它不应该相同,因为接口(interface)名称不同(例如 JOGL 的 GLES2 与 Android GLES20)。

关于java - 适用于 Android 的 IntBuffer、ByteBuffer、ByteOrder 和 GLES20,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12331178/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com