2013-09-08 2 views
0

Я застрял на OpenGL 1.1 для конкретного проекта для игры, и я использую список отображения как своего рода снимок части игры, где я начинаю список отображения, прямо эти части для рендеринга и закрытия списка отображения. Это правильно приводит к отображению списка, который я могу затем преобразовать и визуализировать по желанию.OpenGL: Копировать содержимое списка отображения

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

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

(Нет, часть игры я мгновенный снимки не является предсказуемой, и, вероятно, будет дико разные каждый раз.)

+0

Почему вы хотите скопировать содержимое в список отображения верхнего уровня? Для удобства? Или производительность? Если последнее, обратите внимание, что списки отображения устарели в OpenGL 3.1. Они не являются наиболее эффективным способом вождения видеокарты - для этого см. [Vertex Buffer Objects] (http://en.wikipedia.org/wiki/Vertex_Buffer_Object). Если вы используете списки отображения, вы можете просто создать функцию, которая вызовет ваши вложенные списки отображения и вызовет это с верхнего уровня. – maackle

+0

@maackle: Думаю, вам здесь не хватает смысла. OP модифицирует существующий игровой движок, и мало что можно сделать для изменения внутренней работы двигателя. – datenwolf

+0

Я не думаю, что это такая хорошая идея, если честно. Если вы не фиксируете полную настройку состояния машины, вы получаете только очень маленькую часть гораздо более сложной головоломки. Один из примеров, который приходит на ум сразу, связан с обмоткой лицевой поверхности многоугольника; вы можете захватить все вершины в правильном порядке, но обнаружите, что они отбракованы, потому что у вас нет полного набора состояний, которые были на месте, когда эти команды были первоначально выпущены. Возможно, вам придется привязать базовый API к пользовательской DLL (хорошая новость: вам не нужно поддерживать расширения). –

ответ

0

Я думаю, что вам лучше всего было бы зацепить во всех соответствующие вызовы OpenGL, путем инъекции DLL «opengl32.dll» с точками входа, идентичными OpenGL, но каждый из которых делает копию соответствующих данных.