Возможна ли проблема Retina с OpenGL ES на iPhone? - PullRequest
2 голосов
/ 18 августа 2011

Это, вероятно, связано с еще одной моей неразгаданной загадкой .

Я рисую Orthographic 2d на iPhone, используя реальное устройство и симулятор.Я пытаюсь раскрасить пиксели заданным цветом в зависимости от того, как далеко они находятся от произвольной точки в пиксельном пространстве 'A', которую я передаю (жесткий код).Я делаю все в разрешении Retina 960x640.Я вычисляю расстояние от A до gl_FragCoord, и я цвет на основе скачка между 2 цветами с максимальным расстоянием 300px.

Когда на симуляторе (с дисплеем сетчатки) мне нужно дать центральную точку«460» пикселей для середины экрана X .. Y даю 160px, и я ищу расстояние «300'px .., чтобы получить тот же эффект на устройстве, мне нужен центр 960X и расстояние 150, чтобы получитьте же результаты (интересно, что px 80 не дает таких же результатов, как я хочу, но 160 может быть перерасходом оригинала ...)

Очевидно, что проблема сетчатки находится в игре.Но где и как, и как мне найти и исправить это?

Я использую:

glViewport(0, 0, 960.0f, 640.0f);

и:

glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &framebufferWidth); glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &framebufferHeight);

А:

[self setView:[[EAGLView alloc] initWithFrame:[UIScreen mainScreen].bounds]];
[(EAGLView *)[self view] setContentScaleFactor:2.0f];

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

Вы не должны жестко кодировать "glViewport (0, 0, 960.0f, 640.0f);", настройте область просмотра следующим образом:

glViewport(0, 0, framebufferWidth, framebufferHeight);

Также не жестко кодируйте масштаб контента, вы можетеузнайте масштаб содержимого с помощью:

float contentScale = 1.0f;
if ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)]) {
    contentScale = [[UIScreen mainScreen] scale];
}

О расстоянии в пикселях, так как вы хотите, чтобы расстояние было двойным с дисплеем сетчатки, вы можете добавить униформу к своему шейдеру с масштабом содержимого.

0 голосов
/ 02 марта 2014

Теперь устройства iOS могут иметь несколько разных экранов, а UIWindow можно размещать на неосновном экране.В этом случае вы можете использовать self.view.window.screen.scale для динамического получения масштаба текущего экрана.

...