Используйте несколько текстур, когда рендеринг вызывает низкую частоту кадров - PullRequest
2 голосов
/ 14 февраля 2012

Я пытался использовать разные для рендеринга игрового поля.Сначала я создаю текстуру и загружаю ее в графический процессор.

void initialize(float width,float height)
{
    for(int i = 0;i < 10;i++)
    {
        glActiveTexture(GL_TEXTURE1 + i);
        GLuint gridTexture;
        glGenTextures(1, &gridTexture);
        glBindTexture(GL_TEXTURE_2D, gridTexture);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

        setPngTexture(gameMap->texture);
        glGenerateMipmap(GL_TEXTURE_2D);
    }
}

Затем я использую текстуры при рендеринге в каждом кадре.

void render() const
{
   for(int i = 0; i < map -> maps.size();i++)
   {
      glUniform1i(uniforms.Sampler,i);
      glBindBuffer(GL_ARRAY_BUFFER, gameMap -> verticesbuffer);
      glVertexAttribPointer(position, 3, GL_FLOAT, GL_FALSE, stride, 0);
      glVertexAttribPointer(normal, 3, GL_FLOAT, GL_FALSE, stride, offset);
      glVertexAttribPointer(texture, 2, GL_FLOAT, GL_FALSE, stride, texCoordOffset);
      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, gameMap -> indicesbuffer);
      glDrawElements(GL_TRIANGLES, gameMap -> indexCount, GL_UNSIGNED_SHORT, 0);
   }

}

Код работает правильно на симуляторе iPhone, но когдаЯ тестирую приложение на устройстве, оно дает мне очень низкую частоту кадров: 2 кадра в секунду.Если я изменю строку glUniform1i(uniforms.Sampler,i); на glUniform1i(uniforms.Sampler,0);, приложение будет работать нормально!

Я новичок в OpenGL ES и не уверен, что правильно использую несколько текстур.Кто может сказать мне, в чем причина этой проблемы и как я могу ее исправить?Большое спасибо!

1 Ответ

0 голосов
/ 14 февраля 2012

Есть много вещей, которые могут быть не так с этим.Вы не предоставляете достаточно кода, чтобы действительно диагностировать проблему (источник шейдера).Я бы начал с перемещения glUniform1i (униформа. Образец, я);вне вашей петли.Нет никакого смысла в том, как вы в настоящее время используете его (в основном вы пытаетесь связать униформу. Сэмплер с n-ным значением в вашем шейдере для map.size (). Я почти уверен, что это вызывает множество ошибок OpenGL.-читать документацию по glUniform1i

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...