OpenGL ES 2.0 хорошо отображается в iPhone Simulator, но не на iPhone - PullRequest
2 голосов
/ 16 июня 2011

Я конвертирую приложение для iPhone из OpenGL ES 1.1 в ES 2.0. Приложение обращается к EAGLView, как это определено в стандартном шаблоне приложения OpenGL ES, как это предусмотрено Apple.

Код ES 1.1 работал нормально как на симуляторе, так и на iPhone. Новый код ES 2.0 отлично работает на симуляторе, но на iPhone 3GS я получаю артефакты (например, масштабированные фрагменты представлений из других приложений), которые, насколько я понимаю, показывают, что моя программа запуталась в кадровом буфере. Я нахожу это странным, поскольку я не внес никаких изменений в логику обработки кадрового буфера по сравнению с ES 1.1.

Я включаю ниже часть кода, которая выполняет рисование, хотя я не вижу смысла, так как он отлично работает в симуляторе:

GLfloat data[600000];

// initialize data

glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT); 

glUseProgram(program);
glUniformMatrix4fv(uniforms[UNIFORM_PROJECTION_MATRIX], 1, GL_FALSE, projection_matrix);
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEW_MATRIX], 1, GL_FALSE, modelview_matrix);

glVertexAttribPointer(ATTRIBUTE_POSITION, 3, GL_FLOAT, GL_FALSE, 0, data);
glEnableVertexAttribArray(ATTRIBUTE_POSITION);
glDrawArrays(GL_POINTS, 0, 200000);
glFlush();

1 Ответ

6 голосов
/ 17 июня 2011

Похоже, что есть ошибка в реализации OpenGL ES 2. Подсказка была в том, что когда я изменил glDrawArrays(GL_POINTS, 0, 200000); на glDrawArrays(GL_LINES, 0, 200000);, на устройстве не было проблем с отображением. Решение (найдено здесь ) для использования GL_POINTS заключается в установке gl_PointSize = 1.0; в вершинном шейдере.

РЕДАКТИРОВАТЬ: Это, вероятно, не ошибка, см. здесь :

Значение gl_PointSize (или члена gl_PointSize массива gl_out [], в случае шейдера управления тесселяцией) составляет undefined после этапов затенения вершины, управления тесселяцией и оценки тесселяции, если соответствующий исполняемый файл шейдера не записывает в gl_PointSize.

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