Рамки в точках, а не в пикселях.Когда масштабный коэффициент применяется к UIView, на котором размещен ваш CAEAGLLayer, он будет удваивать пиксели, но размер его рамки останется прежним.
Если вы посмотрите на ширину и высоту подложки для прикрепленного цветового рендерингадля CAEAGLLayer, используя код, подобный следующему:
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
вы должны увидеть, что ширина и высота рендеринга буфера на дисплее Retina в два раза больше значений, которые они имеют на стандартном дисплее iPhone.
Код, который вы показываете выше, должен вызывать хороший, четкий рендеринг на дисплее Retina.
РЕДАКТИРОВАТЬ (22/12/2010): В ответ на ваш следующий вопрос, просмотр примера кода avTouch показывает, что текущая версия этого кода допускает ошибку при поиске границ представления OpenGL-хостинга.вместо использования ширины подложки и высоты рендеринга.Если коэффициент масштабирования не равен 1,0, это приведет к тому, что содержимое OpenGL будет отображаться в половинном размере.
Чтобы исправить это, замените соответствующий раздел в _drawView
в GLLevelMeter следующим кодом:
if (_vertical)
{
glTranslatef(0., _backingWidth, 0.);
glScalef(1., -1., 1.);
bds = CGRectMake(0., 0., _backingWidth, _backingHeight);
} else {
glTranslatef(0., _backingHeight, 0.);
glRotatef(-90., 0., 0., 1.);
bds = CGRectMake(0., 0., _backingHeight, _backingWidth);
}
Это заставит все работать в соответствующем пиксельном пространстве и приведет к четкому рендерингу с правильным размером в эквалайзере.Я подал отчет об ошибке по этому вопросу.