LJWGL 함수 glBufferData()를 사용하여 부호있는 바이트를 저장하는 ByteBuffer (java lang 객체)를 업로드하면 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 등의 정수 값을이 바이트 버퍼에 넣을 것입니다. 아마도 그것은 부호있는 바이트로 취급 될 것입니다. 이는 자바가 처리하는 것이기 때문입니다. 이 바이트들은 아마도 서명 된 해석을 사용할 때 12345를 저장하고있을 것입니다. 그렇다면 왜 서명 된 해석 대신 서명되지 않은 해석을 사용하여 12345를 읽는가가 문제입니다.
데이터의 중요성은 인덱스 버퍼임을 유의하십시오.
중요한 것은 데이터의 의미입니다. 값 0은 무엇을 의미하고 값 255는 의미합니까? 가지고있는 데이터에 대해 -128이 의미가 있습니까? 그래서 그것은 당신이 고려해야 할 데이터입니다. 자바 (부호없는 타입을 가지고 있지 않습니다)에 어떤 타입을 저장하지 않습니다. – nos
명확한 질문에 편집을 추가했습니다. – Thomas
0의 값에는 차이가 없습니다 서명 또는 부호없는 바이트인지 여부를 결정합니다. 대부분 OpenGL은 부호없는 바이트를 지정하지만 Java는 부호없는 바이트를 사용하도록 지원하지 않습니다. –