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);
Ок... Не понял к чему ты это...К теме это конечно не совсем относится, но если рассмотреть твой экран монитора как динамическую текстуру... то мы приходим к тому, что, динамическая текстура - это всего лишь набор статических, которые принимают ту или иную форму.
TextureUtil.uploadTextureImage()
нужно запускать при каждом изменении текстуры.К тому что, всё что ты видишь, всего лишь набор трансформированных статических текстур.Не понял к чему ты это...
Я об этом и говорил)Итого (№2): Айдиху можно создавать один раз. Сам буфер, естественно, тоже.
А вотTextureUtil.uploadTextureImage()
нужно запускать при каждом изменении текстуры.
Может кому пригодится )))
...
Ну а при изменении размера, думаю, просто сам буфер буду пересоздавать.
...
Всем спасибо )
BufferedImage
просит указать imageType
, например BufferedImage.TYPE_BYTE_GRAY
.0xffffff
, а чисто через яркость, типа 0xff
?imageType
или в любом случае нужно RGB указывать?BufferUtils.createIntBuffer
) нужного размера (width * height). И пиши в него свой пиксели.glTexImage2D
(передай туда созданный ранее буфер).glTexSubImage2D
. Оно не выделяет новый участок в видеопамяти, а загружает в существующий.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)
Там, где у тебя обычный opengl? Не baked?В рендере XD