Как редактировать пиксельные цвета текстуры после выделения из glTexImage2D () - PullRequest
0 голосов
/ 30 апреля 2019

Сейчас я хочу отредактировать цвета пикселей после их инициализации в памяти в 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);

Есть ли способ сделать это, единственный способ, о котором я могу думать, - это использовать Небезопасный, который трудно понять и довольно легко сломать.

...