Как знает iPhone, какой контекст OpenGL ES используется между 1,1 до 2,0?

StackOverflow https://stackoverflow.com/questions/2799767

Вопрос

Я недавно копал сеть и заметил, что некоторые видеоуроки показывают более старый шаблон (Pre SDK 3.2) с одним контекстом OpenGL ES. Сейчас есть два из них, которые, которые я почерпнул - две версии OpenGL ES, доступные на более новых устройствах Imobile.

Могу ли я просто использовать более старше или мне нужно сделать все дважды? Как сказать iPhone использовать более старый контекст, или он будет делать это автоматически?

Это было полезно?

Решение

По умолчанию шаблон пытается создать контекст ES2, и если это не удается, то пытается создать контекст ES1. Если вы хотите работать с ES 1.1 в одиночку (который поддерживается на всех устройствах), вы можете просто удалить все ссылки на ES2 из проекта шаблона.

Другие советы

Чтобы расширить, что сказал Frogblast, код шаблона определяет два класса: ES1Renderer а также ES2Renderer. Отказ То EAGLView класс первым пытается создать ES2Renderer экземпляр, но если это не удается, это создает ES1Renderer. Отказ Сбой приходит, если ES2Renderer Не удается установить контекст OpenGL ES 2.0, используя следующий код:

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

if (!context || ![EAGLContext setCurrentContext:context] || ![self loadShaders])
{
    [self release];
    return nil;
}

Если устройство поддерживает OpenGL ES 2.0, это должно быть успешным. Если нет, приложение возвращается к ES1Renderer Opengl es 1.1 рендерер.

Причина приложения имеет два разных класса рендеринга заключается в том, что OpenGL ES 1.1 и 2.0 имеют разные и несовместимые трубопроводы рендеринга. OpenGL ES 2.0 позволяет создавать программируемые шейдеры для некоторых потрясающих эффектов, но это может быть сложнее использовать для простых задач, чем OpenGL ES 1.1.

Многие люди добавляют отступы в их приложение, если они используют OpenGL ES 2.0, потому что только iPhone 3G S и более поздние устройства поддерживают эту не включенную API. Однако, если вы разрабатываете приложение только для iPad, вы можете предположить, что он будет иметь 2.0 поддержку. Вы также можете ограничить ваше приложение для работы на устройствах с этой способностью, добавив opengles-2 ключ к тому UIRequiredDeviceCapabilities В вашей info.plist.

Вы можете использовать OpenGL ES 1.1 просто отлично на более новых устройствах, поэтому, если вы хотите отключить путь рендеринга 2.0, вы можете иметь EagleView в шаблоне игнорировать ES2Renderer класс и просто работа с ES1Renderer. Отказ Вы также можете взять код OpenGL ES из ES1Renderer И просто поместите его в него в EagleView.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top