2011-01-03 2 views
8

Я изменяю версию версии Android 2d из примера OpenGl ES2.0 для изменения шейдера фрагмента. это написано на чистой Java и не использует NDK.glGetShaderInfoLog возвращает пустую строку (android)

Ванильный пример отлично работает на моем телефоне, но когда я меняю шейдерный код, он больше не работает. Это связано с тем, что мой модифицированный шейдер не компилируется (очевидно), но я не могу найти причину проблемы, так как glGetShaderInfoLog возвращает пустую строку.

Я сделал поиск по этой проблеме, и, судя по всему, с 22 июля это была известная проблема, но мне было интересно, какие способы ее обойти. Один из сообщений, которые я нашел, сказал, что они написали оболочку NDK для этой функции, но, будучи новичком в разработке Android, я действительно не знаю, как это сделать.

ответ

6

Вы страдаете от a bug. Я работал с помощью old GL ES 2.0 bindings, чтобы получить функционирующий glGetShaderInfoLog. Как это:

import com.badlogic.gdx.backends.android.AndroidGL20; 
... 
AndroidGL20 gl2 = new AndroidGL20(); 
Log.e(TAG, gl2.glGetShaderInfoLog(shader)); 

Я до сих пор использовать стандартную библиотеку GLES20 обертку для всего остального, так что это было просто зайти в мой код. Очевидно, обе оболочки могут сосуществовать без каких-либо проблем.

2

Просто, если кто-нибудь найдет этот вопрос, поскольку они столкнулись с одной и той же проблемой, единственный способ, которым я нашел «обойти это», - это скомпилировать шейдер с другим приложением (например, Rendermonkey). Не идеальный, но он дополнил меня в моем проекте!

1

У меня была та же проблема.

  1. Убедитесь, что следующие в ApplicationManufest.xml:

    < использует-функция андроида: glEsVersion = "0x00020000" андроид: требуется = "истинный" />

  2. Вызвать это после инициализации GLSurfaceView

glSurfaceView.SetEGLContextClientVersion (2);

Смежные вопросы