Привет всем.
В рендере я пытаюсь использовать второй 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), то
программа честно падает.
В чем может быть проблема?
Ни разу такого не было. Были только с переустановкой текстуры в шейдере проблемы на andreno200. Что за девайс то?
sergs
> glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, (void*)(6*sizeof(short)));
Чё это у тебя в последнем параметре? Не нуль ли должен быть?
Нашел откуда проблема.
У меня был двиг, который до этого работал с одним буфером. И соотвественно перед вызовом glBufferData буфер не байндился, а подхватывался
последний (который стал вторым). В него все данные и пихались и было полное ощущение, что буфера не переключаются.
Небольшое отступление и разговор о наболевшем
Девайс у меня Kindle fire. Это очень особенный девайс.
Если у него поставить режим вывода оpengl 8-8-8-8, то текстуры будут с premultiplied alpha (обычно светлая каемочка по контуру), надо ставить режим 8-8-8-0, но при этом другие девайсы могут этого не выдержать и крэшануться при инициализации opengl
Вторая проблема с этим девайсом (и еще на одном телефоне было).
У меня при определенных обстоятельствах не выводился один треугольник. (Я вывожу все парами треугольников)
Причина оказалась в том, что если viewport ставить не на весь экран (обрезать из-за аспекта), то что-то может не рендериться...
Иначе как глюком драйвера не объяснить
Ну и конечно гугл билинг на нем не работает...
А был ли у кого-то профит от использования VBO на Android?
Мои тесты показывают, что кол-во Fps не изменяется при рендере как с VBO так и без него.
Тем более на мобильных устройствах общая память и не надо гонять вершины между CPU и GPU
Или может я что-то не так делаю?
Тема в архиве.