OpenGL ES API 命名习惯
定义的常量都以 GL_ 为前缀。比如 GL10.GL_COLOR_BUFFER_BIT
OpenGL ES 指令以 gl 开头,比如 gl.glClearColor
某些 OpenGL 指令以 3f 或 4f 结尾, 3 和 4 代表参数的个数 ,f 代表参数类型为浮点数 ,如
gl.glColor4f ,i,x 代表 int 如 gl.glColor4x
对应以 v 结尾的 OpenGL ES 指令,代表参数类型为一个矢量 (Vector) ,如 glTexEnvfv
所有 8-bit 整数对应到 byte 类型, 16-bit 对应到 short 类型 ,32-bit 整数 (包括 GLFixed) 对应到
int 类型,而所有 32-bit 浮点数对应到 float 类型。
GL_TRUE,GL_FALSE 对应到 boolean 类型
C 字符串 ((char*)) 对应到 Java 的 UTF-8 字符串。
Android OpenGL ES 开发中的 Buffer
使用
为了提高性能,通常将顶点,颜色等值存放在 java.nio 包中定义的 Buffer 类中。
java.nio 包包含了 Buffer,Channel, charset 等,但 OpenGL ES 只用到 Buffer ,Buffer 具有以
下特点:
o
允许以内存缓冲区 (buffer) 的方式来管理一个 Buffer 数组,可以整块整块的读写内存区域,
并可以指定 Byte order. (大头或是小头)。
o 提供了在指定位置读写各种基本数据类型的简便方法如 putInt ,putLong 等。
o 可以充分利用 JVM 提供的各种优化方法以达到和使用 Native Code 类型的读写性能。
o 可以直接从 OS 的内存分配空间, 这部分空间可以不受 Java 的 Garbage collector 控制。称为
Direct buffer.
java.nio 包中定义了基类 Buffer ,还定义了和各种基本数据类型特定的 Buffer 类型 ByteBuf
fer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer 和 ShortBuffer. 其中 ByteB
uffer 是其它类型的基础,因为分配内存是通过 ByteBuffer 的 allocate 来进行的,然后通过 B
yteBuffer 的 asXXXBuffer() 转为其它类型:
可以使用下面三个方法来创建一个新的 ByteBuffer :
public static ByteBuffer allocate(int capacity)
public static ByteBufferallocateDirect(int capacity)
public static ByteBuffer wrap(byte[] array)
其中 ByteBuffer.allocateDirect 直接从 OS 分配内存, 不受 GC 的限制, wrap 使用已分配的数
组作为 buffer 管理。
评论0
最新资源