Мобильные платформыФорумОбщее

Android. Не переключается VBO

#0
13:25, 9 июля 2013

Привет всем.

В рендере я пытаюсь использовать второй VBO. Для этого выполняется следующий код:

  glBindBuffer(GL_ARRAY_BUFFER, _vb);
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _ib);

  SetShader(shaders); // glUseProgram(m_program);

  glEnableVertexAttribArray(sh->GetPosition()); //значение от glGetAttribLocation(m_program, "vPosition");
  glVertexAttribPointer(sh->GetPosition(), 3, GL_FLOAT, GL_FALSE, sizeof(SPRITE_VERTEX), (void*)offsetof(SPRITE_VERTEX, sx));

  glEnableVertexAttribArray(sh->GetTextureCoord());
  glVertexAttribPointer(sh->GetTextureCoord(), 2, GL_FLOAT, GL_FALSE, sizeof(SPRITE_VERTEX), (void*)offsetof(SPRITE_VERTEX, tu));

  glEnableVertexAttribArray(sh->GetColor());
  glVertexAttribPointer(sh->GetColor(), 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(SPRITE_VERTEX), (void*)offsetof(SPRITE_VERTEX, color));

  glBindTexture(GL_TEXTURE_2D,  texture);
  glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, (void*)(6*sizeof(short)));

Но рендерится буфер, который был до этого. Если glBindBuffer(GL_ARRAY_BUFFER, _vb) заменить на glBindBuffer(GL_ARRAY_BUFFER, 0), то
программа честно падает.

В чем может быть проблема?

#1
13:49, 9 июля 2013

Ни разу такого не было. Были только с переустановкой текстуры в шейдере проблемы на andreno200. Что за девайс то?

#2
18:59, 9 июля 2013

sergs
>   glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, (void*)(6*sizeof(short)));
Чё это у тебя в последнем параметре? Не нуль ли должен быть?

#3
0:02, 10 июля 2013

Нашел откуда проблема.

У меня был двиг, который до этого работал с одним буфером. И соотвественно перед вызовом glBufferData буфер не байндился, а подхватывался
последний (который стал вторым). В него все данные и пихались и было полное ощущение, что буфера не переключаются.

Небольшое отступление и разговор о наболевшем
Девайс у меня Kindle fire. Это очень особенный девайс.

Если у него поставить режим вывода оpengl 8-8-8-8, то текстуры будут с premultiplied alpha (обычно светлая каемочка по контуру), надо ставить режим 8-8-8-0, но при этом другие девайсы могут этого не выдержать и крэшануться при инициализации opengl

Вторая проблема с этим девайсом (и еще на одном телефоне было).
У меня при определенных обстоятельствах не выводился один треугольник. (Я вывожу все парами треугольников)
Причина оказалась в том, что если viewport ставить не на весь экран (обрезать из-за аспекта), то что-то может не рендериться...

Иначе как глюком драйвера не объяснить

Ну и конечно гугл билинг на нем не работает...

#4
16:08, 26 июля 2013

А был ли у кого-то профит от использования VBO на Android?

Мои тесты показывают, что кол-во Fps не изменяется при рендере как с VBO так и без него.
Тем более на мобильных устройствах общая память и не надо гонять вершины между CPU и GPU

Или может я что-то не так делаю?

Мобильные платформыФорумОбщее

Тема в архиве.