Создание текстуры с помощью «glTexImage2D» в OpenGL-ES с C ++ на Android вызывает проблемы с NDK - PullRequest
0 голосов
/ 08 января 2012

Я пытался создавать текстуры с помощью следующего кода C ++ на Android NDK:

glGenTextures(1, (GLuint*)&index);
glBindTexture(GL_TEXTURE_2D, index);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);


glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, cx, cy, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)d);

Это работает некоторое время, а затем программа просто завершается. Там нет сообщений об ошибках или что-нибудь еще. Программа просто заканчивается.

Я пробовал цикл только с созданием требуемых текстур, и он работает, как и ожидалось, если я удаляю строку с помощью команды "glTexImage2D" (конечно, текстуры не создаются и не могут быть использованы тогда), но завершается без предупреждения когда команда есть.

Может ли кто-нибудь дать мне какой-либо совет относительно этого поведения и почему glTexImage2D не просто завершается с ошибкой и возвращает сообщение об ошибке, которое я могу получить с помощью glGetError ();

Ответы [ 3 ]

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

Не знаю, помогает ли это, но у меня были такие проблемы, когда я пытался использовать opengl в нескольких потоках.Возможно, взгляните на это.

0 голосов
/ 30 мая 2012

Android, как правило, не имеет файла подкачки (на мобильном телефоне нет жесткого диска. Также память распределяется между графическим ускорителем и процессором. Таким образом, ОС просто убивает ваш процесс, когда она съедает всю память (с текстуры). Вы можете увидеть это в LogCat: перед тем, как ваш процесс умирает, все остальные выглядят как ошибка в драйвере или в OpenGL.

0 голосов
/ 08 января 2012

Это работает некоторое время, а затем программа просто завершается.

Вы имеете в виду, вы загружаете текстуры для каждого кадра?Если так, то почему?Загружайте текстуру только один раз, прежде чем она вам понадобится.Позже вы можете повторно использовать его, просто снова вызвав glBindTexture.

...