USB 経由で 10 ビットのピクセル (グレースケール) を取得し、それらをバイト配列に格納しています。たとえば、最初のバイト (imgData[0]) には、最初のピクセルの最初の 8 ビットが含まれます。2 番目のバイト (imgData[1]) には、最初のピクセルの最後の 2 ビットと 2 番目のピクセルの最初の 6 ビットが含まれます。
各インデックスが 1 ピクセルを表す配列を取得するために、bytearray のすべてのビットを BitSet に格納し、BitSet から Integer 配列に格納しました
以前は、byteBuffer を作成して 8 ビット イメージのみをテクスチャとして表示していました。
private static ByteBuffer buffer;
包んだ
buffer = ByteBuffer.wrap(imgData);
と使用
gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, 1, 1280, 1024, 0,
GL2.GL_LUMINANCE, GL2.GL_UNSIGNED_BYTE, buffer);
10 ビット データを使用する必要がある場合は、おそらく IntBuffer を使用する必要があり、32 ビットを使用できます。しかし、私は10ビットしか必要としません。1023 の値が白を意味し、値 0 が黒を意味することを OpenGl にスケーリング/伝えるにはどうすればよいですか?
または:
ImgData を ByteArray として直接入力し、OpenGL が何らかの魔法を実行して、ByteArray に格納されている 10 ビットごとに 1 ピクセルを作成する方法はありますか? glPixelStore、ピクセルのパッキング/アンパッキングなどについて読んだことがありますが、これが本当に必要なことを実行できるかどうか、およびこれを使用する方法がわかりませんでした。