Java / OpenGL: загрузка текстур на 64-битной ВМ - PullRequest
2 голосов
/ 13 февраля 2010

кажется, что мой загрузчик текстур больше не работает при работе в 64-битной среде. Я не уверен, что причиной является сама 64-битная виртуальная машина или файл лежит на 64-битной файловой системе.

загружаемое изображение представляет собой png-файл RGBA, оно правильно отображается в 32-битных системах Windows, но на моем 64-битном win7 некоторые цветовые каналы выглядят перевернутыми.

вот мой код:

InputStream is = Thread.currentThread().getContextClassLoader()
    .getResourceAsStream(path);
BufferedImage bi = ImageIO.read(is);
is.close();

byte[] databytes = ((DataBufferByte) bi.getRaster().getDataBuffer()).getData();
ByteBuffer data = ByteBuffer.allocateDirect(databytes.length);
data.order(ByteOrder.nativeOrder());
data.put(databytes, 0, databytes.length);
data.rewind();

IntBuffer texb = IntBuffer.allocate(1);

binding.genTextures(1, texb);
binding.bindTexture(binding.TEXTURE_2D(), texb.get(0));
binding.texParameter(binding.TEXTURE_2D(), binding.TEXTURE_MIN_FILTER(), 
    binding.LINEAR());
binding.texParameter(binding.TEXTURE_2D(), binding.TEXTURE_MAG_FILTER(), 
    binding.LINEAR());
binding.texParameter(binding.TEXTURE_2D(), binding.TEXTURE_WRAP_S(), 
    binding.CLAMP());
binding.texParameter(binding.TEXTURE_2D(), binding.TEXTURE_WRAP_T(), 
    binding.CLAMP());
binding.texEnvi(binding.TEXTURE_ENV(), binding.TEXTURE_ENV_MODE(), 
    binding.MODULATE());
binding.texImage2D(binding.TEXTURE_2D(), 0, binding.RGBA(), bi.getWidth(), 
    bi.getHeight(), 0, binding.RGBA(), binding.UNSIGNED_BYTE(), data);

кто-нибудь знает, что может быть не так? спасибо!

1 Ответ

0 голосов
/ 13 февраля 2010

на самом деле это оказалось проблемой с последним обновлением java6 u18, которое содержало некоторые изменения в bufferedimage и не имело ничего общего с 64-битными виртуальными машинами

...