OpenGL ES에 대해 배우고 있는데 직접 ByteBuffer
을 할당 한 많은 사례를 본 다음 FloatBuffer
에 랩핑하고 정점 데이터를 Renderer#onDrawFrame(...)에 작성합니다.Direct ByteBuffer 및 스레드 안전성
왜이 스레드로부터 안전한가요? (또는 그럴 수 있습니까?) 직접 ByteBuffer
의 특성입니까, 아니면 호출자가 onDrawFrame(...)
을 수행하여 버퍼에 쓰는 것이 쉐이더 프로그램에 표시되는지 확인해야합니까?
편집 : JMM에 대한 필자의 이해는 Java가 현대 하드웨어의 복잡성을 일부 노출시키기 때문에 그것이 무엇인지를 이해하는 것입니다. 나는 같은 메모리를 액세스하는 Java 스레드와 비 Java 프로그램간에 Java 스레드간에 존재하는 동일한 메모리 가시성 문제가 존재한다고 가정합니다. 나는 셰이더가 자바 렌더링 스레드가 아닌 GPU에서 실행된다고 가정합니다.
위의 내용이 모두 올바른 경우 렌더링 스레드의 쓰기가 쉐이더에 표시되도록 메모리 장벽이 있어야합니다. 내 질문은 아래로, 그 메모리 장벽은 무엇입니까? 그것을 만드는 것이 내 책임입니까?
제 질문은 렌더링 스레드와 셰이더 사이의 쓰기 가시성에 관한 것이지 렌더링 스레드와 다른 Java 스레드 간의 쓰기 가시성에 관한 것입니다. 명확히하기 위해 편집 됨. –