У меня есть карта яркости в 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 б>. Вы можете рассмотреть преобразование в целое число: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