проблема переключения представления opengles - PullRequest
0 голосов
/ 04 августа 2009

Я пытаюсь сделать простую игру, используя OpenGLES. У меня есть два EAGLViews (меню и вид игры). Каждое представление имеет свой собственный viewController. Инициализация представлений выполняется методом initWithNIBName viewController. И когда я хочу показать представление, я просто использую метод addSubview главного окна. Вид игры инициализируется только один раз во время запуска. Вид меню инициализируется, только если это необходимо. Проблема в том, что когда я перехожу из вида игры в меню и затем обратно, а затем перерисовываю вид игры, что-то идет не так. (Я устанавливаю EAGLContext в методе drawView перед рисованием, поэтому контекст может быть правильным). Разве вы не знаете, где проблема? Или, если все переключение управляется неправильно, дай мне совет, пожалуйста. Спасибо за ответы.

1 Ответ

1 голос
/ 05 августа 2009

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

Я не знаю, что стоит за OpenGL, но это моя гипотеза: Каждый раз, когда вы возвращаетесь в EAGLView, EAGLContext из EAGLView изменяется. (если вы копировали и вставляли из шаблона OpenGLES) Текстуры могут быть загружены только после того, как контекст находится в правильном состоянии, иначе вы не сможете загрузить любую текстуру. Теперь, выходя из EAGLView и возвращаясь, вы создаете новый EAGLContext из initWithCoder: (NSCoder *) coder:

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

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

Так, как мы можем сохранить этот контекст? Я делаю это глобальным. Просто как тот. И когда EAGLView нужно создать еще раз, попросите его проверить, является ли «глобальный» EAGLContext нулевым или нет. Если это ноль, просто создайте его экземпляр, иначе ничего не делайте. И никогда не выпускайте и не освобождайте этот глобальный EAGLContext, если вы не хотите выйти из своей программы.

Это работает для меня, но, опять же, моя гипотеза выше не может быть верной. Если кто-нибудь знает реальную вещь, пожалуйста, читайте мне лекции. Я также смиренно нуждаюсь в руководстве. Я хочу по-настоящему знать, почему это происходит и почему мы должны это делать.

И, кстати, это отвечает на ваш вопрос, Дженисек?

...