2012-03-05 3 views
1

Это мой первый вопрос здесь. Я новичок в разработке Android, и теперь я создаю живые обои (LiveSpace). Я все уже загрузил версию Lite, вы можете найти ее здесь. https://market.android.com/details?id=thedavincode.alienland&feature=search_result#?t=W251bGwsMSwyLDEsInRoZWRhdmluY29kZS5hbGllbmxhbmQiXQ ...Samsung Galaxy S2 OpenGl ES 2.0 проблемы

Я проверил его с телефонами Xperia и Lg P990, и, похоже, он работает нормально, но есть проблема с Galaxy S2. (2.3.4. Android) Мое приложение имеет 11 объектов (классов) с текстурой для каждого объекта, и каждый объект имеет свою собственную программу и шейдеры. галактика не будет отображать более 8 текстур. он идет от id 0 до 7, а затем объекты останутся черными. независимо от того, что я пробовал, ничего не меняется. ive прочитайте, что существует ограничение на 8 текстур, но на шейдер, а не на общий. Любая помощь была бы ценной .. спасибо.

ответ

1

SGS2 (Mali400MP) имеет предел макс. 8 текстурных единиц. Если вы используете только одну текстуру в шейдере, вы можете использовать только одну единицу. Например:

  1. Когда вы делаете некоторые настройки с шейдером, а затем связать вашу текстуру форму к первому блоку текстуры (0) как: glUniform1i(uTexture, 0); - это сделать для всех ваших объектов
  2. Перед визуализацией каждого объекта привязки текстуры который принадлежит ему: glBindTexture(GL_TEXTURE_2D , m_texture); - вы привязываете текстуру к активной текстурной единице.
  3. Как и в этом случае используется только один текстурный блок, вы можете опустить glActiveTexture вызов, так как по умолчанию единицы первой текстуры активированный (GL_TEXTURE0)

Вы должны всегда держать в пределах спецификации, если это возможно, чтобы быть совместимым с большинством устройств.

Использование одного блока текстуры для каждого объекта/текстуры - не выход.

+0

Спасибо за ваш ответ kibab. хорошо, я думаю, что я все это вижу в моем коде. – DavinCode

+0

Спасибо за ваш ответ kibab. хорошо, я думаю, что я все это вижу в моем коде. это onDraw каждого класса объектов \t GLES20.glUseProgram (GroundProgram); // checkGlError ("glUseProgram"); int grtextureLoc = GLES20.glGetUniformLocation (GroundProgram, "sTexture"); GrTextureID = Commons.Mytextures [11]; \t GLES20.glActiveTexture (GLES20.GL_TEXTURE11); \t GLES20.glBindTexture (GLES20.GL_TEXTURE_2D, GrTextureID); и после установки моих шейдеров и других материалов и перед рисованием GLES20.glUniform1i (grtextureLoc, GrTextureID); Мне что-то не хватает ???? – DavinCode

+0

Вы не передаете идентификатор текстуры в форму. Вы передаете индекс текстурной единицы. Читайте здесь: http://www.opengl.org/wiki/GLSL_Sampler#Binding_textures_to_samplers И вам действительно нужно читать 12 текстур одновременно в шейдере? –

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