Заменить эти функции OpenGL на OpenGL ES? - PullRequest
3 голосов
/ 11 января 2011

Я ищу возможность перенести приложение ПК OpenGL и приложение iPhone в один проект XCode (для удобства).Поэтому, если я получаю шанс на эти исходные файлы, я хочу применить это для обеих платформ и хочу иметь возможность компилировать для обеих платформ из одного проекта.Как я мог сделать это?Есть ли способ сделать это в XCode 4 или 3.25?Любая помощь будет принята с благодарностью:

glPushAttrib( GL_DEPTH_BUFFER_BIT | GL_LIGHTING_BIT );
glPopAttrib();
glutGet(GLUT_ELAPSED_TIME);
glutSwapBuffers();

Есть идеи, как решить эти проблемы?

Ответы [ 4 ]

3 голосов
/ 17 января 2011

PushAttrib / PopAttrib Вам нужно заменить себя кодом, который вручную отслеживает эти состояния, или вы можете переписать свой код таким образом, чтобы все, что зависит от этих состояний, устанавливало их самостоятельно.

glutGet(GLUT_ELAPSED_TIME) можно заменить на mach_absolute_time (не особенно легко, но правильно)) или [NSDate timeIntervalSinceReferenceDate] (легко, но потенциально проблематично, поскольку не гарантируется монотонное увеличение или увеличение на 1,0 в секунду)

glutSwapBuffers будет заменен на -presentRenderbuffer: в вашем EAGLContext (но, похоже, вы уже делаете это; если бы вы этого не делали, вы бы ничего не увидели).

2 голосов
/ 14 января 2011

Я нашел эту документацию онлайн в отношении спецификации OpenGL ES 1.0

Существует несколько причин, по которым тот или иной тип внутреннего состояния должен запрашиваться приложением.- Прикладная программа. Приложению может потребоваться динамическое определение пределов реализации (размеры компонентов в пикселях, размеры текстуры и т. д.), или же приложение может быть частью многоуровневой библиотеки, и ему может потребоваться сохранить и восстановить любое состояние, которое нарушается как частьего рендеринг. PushAttrib иPopAttrib могут быть использованы для этого, но они дорогостоящи в реализации и использовании и поэтому не поддерживаются. Вообще говоря, запросы состояния не приветствуются, так как они часто снижают производительность. Вместо того, чтобы пытатьсяразбивать различные типы динамических состояний, которые можно запрашивать, например, вершины стеков матриц, запросы динамического состояния не поддерживаются, и приложения должны скрывать изменения состояния, а не запрашивать конвейер. Это затрудняет работу для многоуровневого libraries, но не было достаточного обоснования для сохранения запросов динамического состояния или отправки и извлечения атрибутов.

Это и эта другая ссылка здесь , кажется, указывает на то, что вам нужноследить за этими битами самостоятельно.Там нет никакой помощи.

перенасыщенность просто вызывает системный код, да?(wglSwapBuffers, glxSwapBuffers)

Попробуйте здесь eglSwapBuffers и, возможно, из этой книги

Извините, у меня нет более конкретного ответадля вас.

2 голосов
/ 14 января 2011

Вы можете использовать dgles , чтобы обернуть реализацию OpenGL на вашем рабочем столе и предоставить интерфейс OpenGL ES 1.x.

1 голос
/ 01 июля 2011

очень раздражает это отсутствие, казалось бы, простой функциональности нажатия атрибутов, но вы можете использовать glGet, чтобы получить состояние чего-либо, прежде чем устанавливать параметр, как это работает для меня:

Boolean tmpB;
int tmpSrc,tmpDst;

glGetBooleanv(GL_BLEND,&tmpB);
glGetIntegerv(GL_BLEND_SRC_ALPHA,&tmpSrc);
glGetIntegerv(GL_BLEND_DST_ALPHA,&tmpDst);    


glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//draw rectangle
CGSize winSize=[[CCDirector sharedDirector] winSize];
CGPoint vertices[] = { ccp(0,0), ccp(winSize.width,0), ccp(winSize.width,20), ccp(0,20) };
glColor4ub(255, 0, 255, 55);
ccFillPoly( vertices, 4, YES);


if(!tmpB)
    glDisable(GL_BLEND);

glBlendFunc(tmpSrc, tmpDst);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...