IntBuffer buf = BufferUtils.createIntBuffer(width * height);
for (int y = 0; y < height; y++)
for (int x = 0; x < width; x++)
buf.put(pixels[y * width + x]); // RGBA
// как хочешь, здесь ты пиксели как угодно можешь получить
buf.flip();
int textureID = glGenTextures();
glBindTexture(GL_TEXTURE_2D, textureID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
GL11
на методы из TextureUtil
, и заработало )glPixelStorei(GL_UNPACK_ROW_LENGTH, texWidth) // зачем мы делаем это? Здесь нужна ширина всей текстуры или ширина куска, который загружаем?
buf.position(y * texWidth + x) // задаём начальную позицию. Нужно ли задавать лимит?
glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, w, h, GL_BGRA, GL_UNSIGNED_BYTE, buf) // тут, вроде ясно. Оффсет и размер именно куска. Я прав?
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0) // опять что-то меняем. Нужно ли в этом месте обнулять позицию буфера и задавать правильный лимит?
Смыcл в том, что я в текстуру размером [texWidth, texHeight] гружу регион [x, y, w, h].Просто хочу понять геометрическую логику.
Можно задать.Нужно ли задавать лимит?
GL_UNPACK_ROW_LENGTH
?pack
и unpack
я ничего не смыслю, поэтому и спросил...