Friday, April 29

glLogicOp

Me ha llamado la atención esta función de OpenGL que no conocía: glLogicOp

Permite especificar la operación lógica a efectuar en el rendering de un nuevo objeto contra el contenido actual del backbuffer.

Es decir, podemos hacer cosas como invertir el fondo donde pintemos, pintar objetos de color invertido(lo que yo buscaba), pintar un cursor en modo XOR de manera que siempre destaque sobre el fondo, etc...

En mi caso, necesitaba pintar elementos texturizados con color invertido, que aparecen en un juego tipo puzzle en el que estoy trabajando. El código es parecido a esto:

if ( condition )
{
glEnable( GL_COLOR_LOGIC_OP );
glLogicOp( GL_COPY_INVERTED );
}

// Pintar objeto
// ...

glDisable( GL_COLOR_LOGIC_OP );

He buscado un método equivalente en DirectX por Google, pero no he encontrado nada. Si alguien tiene la SDK a mano y conoce la manera de hacer lo mismo en Direct3D se lo agradecería ^^, ya que quizá este verano escriba un tutorial sobre el tema.

Mientras buscaba, dí con una presentación (PowerPoint) que toca temas avanzados de OpenGL por encima.

Actualización:

He preguntado en el foro de Stratos y en el de FlipCode, y parece ser que no hay ningun equivalente a glLogicOp() en DirectX.

No comments: