2016-06-15 68 views
1

有沒有簡單的方法來測試Android NDK中是否有當前上下文?如何在使用Android NDK時測試當前的OpenGL ES上下文?

如果在jni邊界的java端綁定EGL上下文,那麼綁定是否在jni邊界的本機端有效?反之亦然?如果綁定雙向工作,我可以發出GL命令,因爲我認爲在邊界任一側都適合,而無需額外的邏輯要求?

指針示例代碼瓦特/上下文建立上理解的邊界的兩側。不確定表面/ EGL交互如何在JNI方面看起來。

謝謝。

回答

1

要檢查是否有在本地代碼當前上下文,你可以調用eglGetCurrentContext()

if (eglGetCurrentContext() != EGL_NO_CONTEXT) { 
    // There is a current context. 
} 

是的,上下文跨越邊界JNI保持電流。因此,如果您的Java代碼中有當前上下文(例如由GLSurfaceView管理),則可以進行JNI調用,然後在執行本機函數時進行OpenGL調用,而無需特別考慮。我在這裏更詳細地回答了一個與此相關的問題:FrameBuffers with GLSurfaceView pattern in OpenGLES 1.1 on android ndk

有沒有很好的理由相反會不會是真的。您應該能夠在本機代碼中創建一個上下文,使其成爲最新的,並且在JNI調用返回後,它仍然應該在您的Java代碼中保持最新。它似乎沒有多大用處,但如果你有充分的理由這樣做,沒有什麼能阻止你。

如果你確實想創建本機代碼環境中,我貼的怎麼做,在這裏回答一個完整的例子:GLES10.glGetIntegerv returns 0 in Lollipop only

恕我直言,到目前爲止,使用OpenGL調用本機代碼的最簡單方法是使用GLSurfaceView,讓它處理整個上下文的創建和管理,並在執行Renderer時執行JNI調用。然後在本地代碼中,您只需進行OpenGL調用,而不必擔心上下文管理。

相關問題