카테고리 없음

[OpenGL] 나만의 openGL 컨텍스트를 만들고 GLCanvas에 바인딩하려면 어떻게해야합니까?

행복을전해요 2020. 12. 22. 01:27

여기에서이 문제에 대한 문서를 찾았습니다.

http://fivedots.coe.psu.ac.th/~ad/jg2/ch15/index.html

GLContext.makeCurrent () / release () 해킹은 Linux / OpenJDK 6 / JOGL 2에서 나를 위해 작동하는 것 같지만 특히 OpenGL 컨텍스트 전환 스레드가 항상 발생하게됩니다. 많이?) 오버 헤드.

그런 다음 JOGL 2의 NEWT와 LWJGL의 툴킷이 있지만 완전히 새로운 왁스 볼인 것 같습니다. bye bye Swing. :(

-------------------

다른 질문에 대한 내 대답을 복제합니다.

이상하게 보일지 모르지만 이것이 작동하는 방식입니다.

이면에서는 여러분이 만든 GLCanvas가 그려 질 때 JOGL이 전체 작업 더미를 수행하고 있다는 것입니다. GLContext를 생성하고 현재 스레드의 GLCanvas에 대해 최신 상태로 만듭니다. 이 작업이 완료 될 때만 렌더링 호출을 할 수 있습니다. 현재로 설정되지 않은 GLContext 또는 여기에서 파생 된 GL 객체는 사용되지 않습니다.

거의 모든 JOGL 애플리케이션이 그렇게 작동합니다. GLEventListener를 만들고 그 안에 display ()를 구현하고 GLAutoDrawable에서 GL을 추출하여 렌더링 호출을 만드는 데 사용합니다. paint () 메서드 외부에서 Graphics2D 호출을하는 것보다 다른 곳에서는 렌더링 호출을하고 싶지 않습니다. (물론 display () 메서드에서 호출되고 GL 또는 GLAutoDrawable을 인수로 사용하는 하위 메서드를 작성할 수 있습니다.)

GLContext를 구체적으로 생성하고 직접 최신 상태로 만드는 방법이 있지만 거의 필요하지 않습니다. 여기에서 접근 방식을 사용하는 것이 거의 항상 좋습니다.

BufferStrategy와 같은 저수준 버퍼를 사용하는 경우 가장 좋은 방법은 JOGL 렌더링을 오프 스크린 JOGL 드로어 블 인 GLPBuffer로 수행하는 것입니다. GLPBuffer를 만들고 렌더링 한 다음 렌더링 된 비트 맵을 버퍼에 복사합니다. GLDrawable의 일부 구현은 "createOffscreenDrawable (...)"을 사용하여 오프 스크린 드로어 블을 명시 적으로 생성 할 수 있도록합니다. 이 기사에서는 몇 가지 지침을 제공합니다.

렌더링 스레드에있는 경우 GLDrawable.display ()를 명시 적으로 호출 할 수도 있습니다.

표시 목록 생성과 같은 초기화를 수행하려는 경우 더 많은 호출이 가능하지만 display (...)를 처음 호출하기 전에 호출되는 GLDrawable.init (...) 메서드를 사용할 수 있습니다. 두 번 이상.

-------------------

이유는 묻지 말아요.하지만 저에게는 (많은 시도 끝에)이게 매력처럼 작동합니다

나는 변수로 선언했다

private GLCanvas gLCanvas;

그리고 그냥

gLCanvas.repaint();

일 했나;)



출처
https://stackoverflow.com/questions/7420027