2010-02-26 7 views

Respuesta

19

Puede hacer esto, p. haciendo llamadas de función desde el punto de entrada principal a las funciones que se implementan en los diversos objetos de sombreado.

main() { 
    callToShaderObject1() 
    callToShaderObject2() 
} 

cada una de esas funciones callToShaderObject pueden vivir en diferentes objetos de sombreado, pero todos los objetos tienen que ser unido y ligado en el mismo programa antes de que pueda ser utilizado.

+0

Fuera de la curiaisidad, ¿por qué harías esto, en lugar de simplemente tener todas las funciones en el sombreador de fragmentos en cuestión? ¿Esto es para que el código pueda ser compartido con otros programas de sombreado, sin necesidad de duplicación? –

+0

@Nick: no lo he visto usar yo mismo. Me sorprendió la primera vez que leí la especificación de la idea de crear programas de sombreado a partir de objetos de sombreado; de ahí que yo sepa que usted puede hacerlo. Fue construido a partir del modelo de compilación estándar ... – Bahbar

+2

Actualización: He visto esto en uso ahora, mientras estudiaba sombreadores modificados de MineCraft. En ese caso, fue muy útil ya que cada sombreador tiene muchas opciones que pueden activarse y desactivarse, con varios efectos que funcionan en conjunto con varios otros. En un escenario como ese, y en el que participan múltiples autores, resulta mucho más útil separar las funciones en archivos separados. –

4

No se pueden ejecutar al mismo tiempo, pero puede usar diferentes sombreadores para diferentes geometrías, o para renderizar en múltiples pasadas usando sombreadores diferentes.

+1

Entonces, ¿eso requeriría un programa diferente? Entonces, ¿un programa diferente para cada pase? Como en, podría tener un sombreador de vértices y fragmentos en un programa (¿qué es un pase?) Y luego tener un sombreador de vértices y fragmentos en otro programa (¿el segundo pase?)? ¿Puedo simplemente cambiar glUseProgram() cuando me apetezca? ¿Entonces esencialmente renderizo una escena dos veces ...? – Harry

+1

Exactamente a la derecha. Al igual que una renderización de múltiples pasadas en una tubería fija, pero en lugar de cambiar la configuración de OpenGL entre pases, está cargando diferentes programas. –

Cuestiones relacionadas