Имам карта на яркостта в LibGDX. Използвам ByteBuffer за зареждане на моите пиксели, което работи добре.
Gdx.graphics.getGL20().glPixelStorei(GL20.GL_UNPACK_ALIGNMENT, 1);
Gdx.graphics.getGL20().glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL20.GL_LUMINANCE, overviewBlock.getWidth(), overviewBlock.getHeight(), 0,
GL20.GL_LUMINANCE,
GL20.GL_UNSIGNED_BYTE, overviewBuffer);
Имам обаче проблеми с разбирането как байтовете се преобразуват в плаващите в GLSL. За цвят, базиран на цяло число, писането в ByteBuffer работи като чар. Но не съм сигурен как да направя това с цвят от един байт.
buffer.put((byte)255);
Това не води до стойност 1.0 в GLSL/OpenGL, ако не греша. Какъв е правилният начин за получаване на стойности в GLSL между 0 и 1.0, да кажем цяло число в диапазона 0 - 255?
byte
в Java се подписва от диапазона [-128, 127]. 255 не е в този диапазон (-1 всъщност е това, от което се нуждаете), ще имате много време да получите тази константа да представлява 1.0 b>. Може да помислите за повишение до цяло число:buffer.put ((byte)(255 & 0xff));
Това повишава 255 до цяло число, маскира само ниските 8 бита и след това го прехвърля обратно къмbyte
. Тогава наистина не е нужно да се интересувате какъв е обхватът наbyte
, защото тази константа вместо това се третира като цяло число със знак; знаковият бит в цяло число със знак е доста извън 8-бита от най-нисък ред, така че това помага. - person Andon M. Coleman   schedule 19.06.2014buffer.put((byte)0xff);
за 255. Не съм тествал това, но това бих опитал първо. - person Tenfour04   schedule 19.06.2014