Как сделать резинку в OpenGl

Я пытаюсь найти способ резинкой в ​​OpenGL и Visual Studio C++. Проблема, с которой я сталкиваюсь, состоит в том, что некоторые компьютеры с Win 7 (т.е. мой босс) не позволяют мне читать или рисовать в передний буфер, тем самым убивая рисование прямо на него.

glDrawBuffer( GL_FRONT );
glEnable(GL_COLOR_LOGIC_OP);
glLogicOp( GL_XOR );
glPolygonMode(GL_FRONT, GL_LINE);
glRecti(X0, Y0, X1, Y1);
X1 = X;
Y1 = Y;
glRecti(X0, Y0, X1, Y1);
*//Doesn't draw lines*

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

glReadBuffer( GL_FRONT );
glDrawBuffer( GL_BACK );
glCopyPixels(0, 0, Width, Height, GL_COLOR);

glEnable(GL_COLOR_LOGIC_OP);
glLogicOp( GL_XOR );
glPolygonMode(GL_BACK, GL_LINE);
SwapBuffers(hdc);
glRecti(X0, Y0, X1, Y1);
X1 = X;
Y1 = Y;
glRecti(X0, Y0, X1, Y1);
SwapBuffers(hdc);   
*//Doesn't display original drawing*

есть идеи?

1 ответ

Я бы сделал это так:

  • нарисовать сцену в закадровый буфер (обратный буфер или другой)
  • используйте glReadPixels для чтения изображения в основную память
  • сделать текстуру из изображения в основной памяти

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

Современные реализации OpenGL также могут отображать текстуру без необходимости перемещать изображение в основную память и обратно. Опять же, если рендеринг сцены уже медленный, разница в производительности здесь не будет заметна.

Другие вопросы по тегам