OpenGL で属性の場所を上書きまたはクリアする方法はありますか? たとえば (私は lwjgl を使用しています)、次のようにレンダリングします。
public void render(int vaoID, int vertexCount, int shaderProgramID){
GL30.glBindVertexArray(vaoID);
GL20.glBindAttribLocation(shaderProgramID, 0, "position");
GL20.glBindAttribLocation(shaderProgramID, 1, "normal");
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, vertexCount);
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL30.glBindVertexArray(0);
}
その後、同じshaderProgramIDで次のコードを実行したい
public void render(int vaoID, int vertexCount, int shaderProgramID){
GL30.glBindVertexArray(vaoID);
//this previously was position
GL20.glBindAttribLocation(shaderProgramID, 0, "normal");
//and this was the normal
GL20.glBindAttribLocation(shaderProgramID, 1, "position");
GL20.glEnableVertexAttribArray(0);
GL20.glEnableVertexAttribArray(1);
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, vertexCount);
GL20.glDisableVertexAttribArray(0);
GL20.glDisableVertexAttribArray(1);
GL30.glBindVertexArray(0);
}
ご覧のとおり、次のコードをこれから変更しました。
GL20.glBindAttribLocation(shaderProgramID, 0, "position");
GL20.glBindAttribLocation(shaderProgramID, 1, "normal");
これに:
GL20.glBindAttribLocation(shaderProgramID, 0, "normal");
GL20.glBindAttribLocation(shaderProgramID, 1, "position");
しかし、両方のコードを実行すると、
GL20.glGetAttribLocation(programID, "position");
1 ではなく 0 を返します
新しい場所をバインドできるように、以前にバインドされた場所をクリアする方法はありますか?