我學習的OpenGL ES,我看到了很多的分配直接ByteBuffer
例子,然後把它包在FloatBuffer
和Renderer#onDrawFrame(...)頂點數據寫入。直接ByteBuffer和線程安全
爲什麼這是線程安全的? (或者是?)它是直接ByteBuffer
的一個特性,還是由調用者onDrawFrame(...)
完成的一些特性,可確保寫入緩衝區對着色器程序可見?
編輯:我對JMM的理解是,它是因爲Java暴露了現代硬件的一些複雜性。我假設在Java線程和訪問相同內存的非Java程序之間存在Java線程之間存在的相同內存可見性問題。我進一步假設着色器在GPU上運行,而不是在Java渲染線程中運行。
如果以上所有內容都是正確的,那麼必須在某處存在內存屏障以確保渲染線程中的寫入對着色器可見。我的問題歸結爲,內存屏障在哪裏?創建它是我的責任嗎?
我的問題是關於在呈現線程和着色器之間寫入可見性,而不是在呈現線程和其他Java線程之間寫入可見性。編輯澄清。 –