2014-10-28 47 views
3

我的應用程序需要在啓動之前檢查一些OpenGL ES功能的可用性。靜態調用glGetString()在Android 5.0中返回null

這與下面的Java代碼來完成:

String extensions = GLES20.glGetString(GLES20.GL_EXTENSIONS); 

和它的工作在Android上高達4.4的版本,但現在返回null,日誌說

10-28 17:53:49.475: E/libEGL(8930): call to OpenGL ES API with no current context (logged once per thread) 

如何獲得這個信息在Android 5.0上?我是否需要創建一個新的OpenGL ES上下文?什麼是最簡單的方法呢?

+3

在創建OpenGL上下文之前,您無法運行GL函數。當靜態初始化器運行時,你很可能沒有一個。 – 2014-10-28 17:36:10

+1

這就是我不明白的地方。它一直工作,但在Android 5.0上它不再有了。有沒有辦法創建一個「虛擬」上下文並調用這個靜態函數? – 2014-10-28 20:12:57

+0

我不瞭解Android編程,但我懷疑Android是否爲您設置了上下文,並且5.0之前的版本在初始化靜態變量之前設置了它,而5.0版本則沒有。而是在靜態上下文中檢查,首次檢查是否開始繪製。 – 2014-10-28 20:24:07

回答

1

首先,這可能不是升級問題,而是設備特定的問題。也許(你的真的沒有足夠的統計數據在成千上萬的設備模型中),這種類型的行爲在較老的模型中不太可能發生,但是這樣的知識不值得去尋找,它不會無論如何,幫助解決問題。

khronos wiki解釋說,所有OpenGL函數都需要使用實時渲染GL上下文,但這些函數在沒有這種上下文的情況下調用時返回非NULL值並不違反。

你可以找到初始化代碼herehere的例子。即使那時,我們遇到了一些設備返回NULL爲glGetString(GLES20.GL_RENDERER);這些都有不同的製造商,平臺級別等。我們的Crashlytcis數據並不表明這種行爲對於同一設備是一致的。

因此,我們必須採用回退功能,以便此功能在返回null時不會崩潰。

相關問題