2012-01-11 2 views
0

Как реализовать «обычный» чертеж (как обычно, будет выполняться методом drawRect) поверх анимации OpenGL, работающей в фоновом режиме? Мое приложение - это приложение OpenGL, которое является шаблоном игрового приложения по умолчанию Xcode. GLKViewController не имеет метода drawRect, и когда я его добавляю, он никогда не вызывается. Я попытался реализовать код рисования в методе drawInRect (который существует), но я получаю ошибки времени выполнения.«Обычный» рисунок поверх слоя OpenGL

Итак, подведем итоги: Я хотел бы нарисовать материал (линии, пути, что угодно), НЕ используя OpenGL, но используя обычные примитивы кварца и отображать это поверх существующего 3d-рендеринга.

ответ

0

Чтобы убедиться, что drawRect вызывается, вероятно, вы должны идти другим путем: создать стандартный проект Cocoa Touch, изменять + (Class)layerClass метод главного вида вернуться [CAEAGLLayer class], а затем начать рисовать с этим. Обратите внимание, что CAEAGLLayer documentation специально предостерегает от делать то, что вы хотите сделать:

Избегайте рисования других слоев на поверхности объекта CAEAGLLayer. Если вы должны нарисовать другое содержимое, отличное от OpenGL, вы можете найти приемлемую стоимость, если вы разместите прозрачный 2D-контент поверх содержимого GL, а также убедитесь, что контент OpenGL непрозрачен и не преобразован.

Отъезд GLPaint проект для простого проекта OpenGL ES, показывающий layerClass переопределение (в PaintingView.m). Они используют layoutSubviews и touchesBegan/Moved/Ended, чтобы сделать рисунок.

+0

Спасибо. Я вижу, что фактический рисунок происходит в renderLineFromPoint с вызовом [context presentRenderbuffer: GL_RENDERBUFFER_OES]. Но как бы я включил регулярные команды рисования кварца в слой над этим слоем GL? Я предполагаю, что я не могу использовать один и тот же «контекст», как слой GL? –

+0

В интерфейсе Builder или код определите дополнительные 'UIView' как подпункты вашего основного вида. Каждый 'UIView' имеет внутренний' CALayer', поэтому, когда его просят рисовать, он будет использовать контекст этого слоя. Контекст GL в этой точке не имеет значения. – darvids0n

+0

[Этот вопрос SO] (http://stackoverflow.com/questions/4500708/marrying-core-animation-with-opengl-es) может помочь. – darvids0n

Смежные вопросы