He estado ajustando el procesador de mi juego para mi portátil, que tiene una Radeon HD 3850. Este chip tiene una cantidad decente de potencia de procesamiento, pero bastante limitado de ancho de banda, así que he intentado mover más sombreador trabajar en menos pases.Limitaciones de Shader
Anteriormente, yo estaba usando un modelo simple de multipaso:
- Enlazar y tampón mezcla FP16 claro (con tampón de profundidad)
- Profundidad de sólo pase
- para cada luz, hacer un aditivo pase la luz backbuffer
- Bind, tampón utilización mezcla como una textura
- mapeo de tonos pasar
En un intento de mejorar el rendimiento de este método, que ha escrito una nueva vía de representación que cuenta el número y el tipo de luces para construir dinámicamente shaders GLSL personalizados. Estos sombreadores aceptan todos los parámetros de luz como uniformes y hacen toda la iluminación en una sola pasada. Esperaba encontrar algún tipo de límite, así que lo probé primero con una luz. Luego tres. Luego, veintiuno, sin errores ni artefactos, y con un gran rendimiento. Esto me lleva a mis preguntas reales:
¿Se puede recuperar el número máximo de uniformes?
¿Es este método viable en hardware antiguo, o los uniformes son mucho más limitados?
Si lo presiono demasiado, ¿en qué punto obtendré un error? Compilación Shader? Enlace de programa? Usando el programa?
Tenga en cuenta que para GL2.0 está garantizado que tiene al menos 512 uniformes de vértices y 64 uniformes de fragmentos. –
Oh, falla en RTFM de mi parte. Más preguntas vienen a la mente: ¿Cada uno de los flotadores y motores consume un componente? ¿Hay alguna restricción en el embalaje? ¿Cuatro carrozas contra un vec4? Un flotador y un vec3? – mvanbem
@mvanbem: Un uniforme ocupa al menos un vector 4D. Por lo tanto, si está muy ajustado al almacenamiento uniforme, considere empacar múltiples escalares en un solo vector 4D. –