当您上传一个存储带符号字节的ByteBuffer(java lang对象)时,使用LJWGL函数glBufferData(),结果发现openGL解释相应缓冲区上数据的正确方法是使用GL_UNSIGNED_BYTE。为什么使用LWJGL将这些带符号字节读为无符号字节?
这是为什么? LWJGL似乎没有将ByteBuffer转换为其他格式,下面是glBUfferData()函数的源代码。
public static void glBufferData(int target, ByteBuffer data, int usage) {
ContextCapabilities caps = GLContext.getCapabilities();
long function_pointer = caps.glBufferData;
BufferChecks.checkFunctionAddress(function_pointer);
BufferChecks.checkDirect(data);
nglBufferData(target, data.remaining(), MemoryUtil.getAddress(data), usage, function_pointer);
}
任何想法为什么?
编辑:
我明白为什么你们会觉得需要有任何转换,因为无符号字节,字节存储方式相同。但让我澄清一下,我把整数值1 2 3 4 5等放入这个bytebuffer,大概是有符号的字节,因为这是java处理的。所以这些字节在使用签名解释时可以存储12345,据推测。那么为什么openGL读取带有无符号解释的12345而不是带符号的解释呢,是一个问题。
请注意,数据的重要性是一个索引缓冲区。
什么是siginificance是数据的含义。 0的值是什么意思,而255的值是什么意思?对于你所拥有的数据,-128是否有意义?所以这是你需要考虑的数据,而不是你在Java中存储它的类型(它没有无符号类型) – nos
我在问题中添加了一个编辑来澄清 – Thomas
0值之间没有区别到127是否是有符号或无符号字节。 OpenGL很可能会指定无符号字节,但Java不支持它们,因此它使用带符号字节。 –