Я довольно новичок в openGL, и я пробовал некоторые примеры кодов из книги о программировании игр на iphone, которую я сейчас читаю.
Одним из примеров была трехмерная игра, и я смог успешно скомпилировать и запустить ее на симуляторе iOS (во весь экран).
Проблема, с которой я столкнулся, заключается в том, что, когда я запускаю его на реальном оборудовании (ipod touch 4G), игра не выходит на полный экран (она занимает только 1/4 экрана). Я смог сузить проблему до кода ниже:
GLint backingWidth, backingHeight;
- (BOOL) bindLayer
{
....
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
....
}
По какой-то причине backingWidth и backingHeight установлены на 640 и 960 соответственно после вышеуказанных вызовов (я ожидал, что это будет 320 x 480, что является размером экрана iphone). На симуляторе iOS и старом ipod touch (2g) он работает просто отлично.
Приведенный выше код является частью объекта, который подклассов UIView, и переопределяет метод drawRect (хотя он пуст). Меня поразило то, что когда я удалил метод drawRect (следовательно, не переопределяя его), он каким-то образом решил проблему, описанную выше.
Может кто-нибудь пролить свет на это? Разве не безопасно переопределить метод drawRect представления, когда вы рисуете в openGL? Почему он работает на симуляторе и старом Ipod Touch?