Сейчас я хочу отредактировать цвета пикселей после их инициализации в памяти в lwjgl.
Я не смог ничего сделать, кроме как восстановить его и переписать изображение с imageIO, но вылет ужасен.
Мой код ниже
public static int loadTexture(String fileName) throws Exception {
PNGDecoder decoder = new PNGDecoder(Texture.class.getResourceAsStream(fileName));
ByteBuffer buf = ByteBuffer.allocateDirect(
4 * decoder.getWidth() * decoder.getHeight());
decoder.decode(buf, decoder.getWidth() * 4, Format.RGBA);
buf.flip();
int textureId = glGenTextures();
glBindTexture(GL_TEXTURE_2D, textureId);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, decoder.getWidth(), decoder.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
glGenerateMipmap(GL_TEXTURE_2D);
return textureId;
}
И это тоже
public void render() {
if (texture != null) {
// Activate first texture bank
glActiveTexture(GL_TEXTURE0);
// Bind the texture
glBindTexture(GL_TEXTURE_2D, texture.getId());
}
// Draw the mesh
glBindVertexArray(getVaoId());
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glDrawElements(GL_TRIANGLES, getVertexCount(), GL_UNSIGNED_INT, 0);
// Restore state
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glBindVertexArray(0);
}
Что я хочу сделать, это использовать идентификатор и установить пиксель, что-то вроде этого:
setPixel (int id, pixelX, pixelY, int newColor);
Есть ли способ сделать это, единственный способ, о котором я могу думать, - это использовать Небезопасный, который трудно понять и довольно легко сломать.