사용자가 클릭 할 때 JOGL에서 픽셀의 색상을 가져 오려고합니다. 디스플레이 메서드 (GLEventListener
에서 오는)에 다음 코드를 삽입하면 올바르게 작동합니다. 나는의 mousePressed 방법에 내 코드를 삽입하면 성공과 검은 색의 반환을 검사 할 때mousePressed의 glReadPixels
FloatBuffer buffer = FloatBuffer.allocate(4);
gl.glReadBuffer(GL3.GL_FRONT);
gl.glReadPixels(10, 10, 1, 1, GL3.GL_RGBA, GL3.GL_FLOAT, buffer);
float[] pixels = new float[3];
pixels = buffer.array();
float red = pixels[0];
float green = pixels[1];
float blue = pixels[2];
System.out.println(red + ", " + green + ", " + blue);
그러나, 내가 잘못된 연산 오류 (0, 0, 0).
내 mousePressed 메서드에서이 작업을 수행하는 방법이 있습니까? 또는 선택 픽셀을 저장해야합니다 (선택하면 모든 프레임에 glReadPixels가 호출되지 않습니다). 표시 방법에서 선택 하시겠습니까?
p.s. (x, y) 좌표 = (10,10)은 선택이 실제로 내 창 안에 있는지 확인하는 것입니다 (픽셀 색상이 표시 방법에서 올바르게 나오기 때문에).
사실 OpenGL은 여러 스레드에서 호출 할 수 있습니다. 그러나 OpenGL 컨텍스트는 한 번에 하나의 스레드에서만 활성화 될 수 있습니다. 그러나 한 스레드에서 컨텍스트를 비활성화 한 다음 다른 스레드에서 활성화 할 수 있습니다. 물론 이것은 약간의 성능 저하를 가져옵니다. – datenwolf
오른쪽, 예, 참, 수정합니다. – nonVirtualThunk