Es bien sabido que el uniforme y los atributos son registros en la GPU. Y mi pregunta es ¿qué sucede cuando se enlaza un programa diferente? ¿El estándar garantiza que los uniformes y/o los indicadores de atributos previamente establecidos se volverán a cargar o tendré que volver a cargarlos manualmente en cualquier caso? Quiero crear un sistema de almacenamiento en caché Me parece que los atributos no se vuelven a cargar (¿sí?) Cuando el programa rebota y ¿qué pasa con los uniformes? ¿El controlador GL ES vuelve a cargar sus valores para mí?OpenGL ES 2: Uniformes y atributos
Respuesta
No, no es bien conocido que los uniformes y los atributos son registros en la GPU. De hecho, es incorrecto, al menos en una GPU OpenGL ES 2.0 ampliamente implementada.
Un uniforme es cero a menos que se inicialice explícitamente. Los valores uniformes son estados que siguen al objeto del programa. En otras palabras, si se establece un uniforme en un objeto determinado programa, puede depender del valor que se conserva a través de los usos de la mismo objeto de programa, pero no se puede depender de un uniforme en un lugar dado que se conserva a través de múltiples programas objetos. De hecho, una implementación de OpenGL ES que haga esto violaría las especificaciones. Esto no es un comportamiento indefinido.
Los punteros de atributo son contexto-estado global, y PUEDE depender de estos para preservarse entre llamadas al mismo contexto de OpenGL ES. Lo mismo ocurre con los valores de atributos actuales (establecidos a través de las funciones glVertexAttribute *)
- 1. OpenGL - ¿Debo almacenar ubicaciones de atributos/uniformes?
- 2. (OpenGL 3.1 - 4.2) Arrays uniformes dinámicos?
- 3. Diferencia entre glkView: drawInRect: y glkViewControllerUpdate :? OpenGL ES 2 - iOS
- 4. Android OpenGL ES 2, cuadros de dibujo
- 5. ¿Cómo puedo encontrar una lista de todos los uniformes en OpenGL es 2.0 vertex shader pro
- 6. OpenGL ES y sombreadores compatibles con OpenGL
- 7. OpenGL-ES y Cg
- 8. GLSL/C++: matrices de uniformes?
- 9. Comportamiento de uniformes después de glUseProgram() y velocidad
- 10. Diferencia en iOS OpenGL ES y Android OpenGL ES
- 11. OpenGL u OpenGL ES
- 12. ¿Guía para escribir código compatible con OpenGL y OpenGL ES?
- 13. Uniforme versus atributos en GLSL ES
- 14. Android OpenGL ES y 2D
- 15. Algunos tutoriales para OpenGL ES 2 en Android con NDK?
- 16. Android Opengl-es cargando un no poder de 2 textura
- 17. La forma correcta de dibujar texto en OpenGL ES 2
- 18. OpenGL ES 2.x: ¿enlazar ambos `GL_TEXTURE_2D` y` GL_TEXTURE_CUBE_MAP` en la misma unidad de imagen de textura?
- 19. OpenGL niebla contra OpenGL ES niebla
- 20. leyenda colores uniformes con qplot
- 21. ¿Puede OpenGL ES renderizar texturas de dimensiones no base 2?
- 22. Generando números aleatorios no uniformes
- 23. CSS cómo orientar 2 atributos?
- 24. XSD: ¿uno de los 2 atributos es obligatorio?
- 25. Diferencia entre OpenGL ES 2.0 y OpenGL 4
- 26. Generador de Java para Poisson y distribuciones uniformes?
- 27. openGL ES retina support
- 28. Acercar y deslizar con OpenGL ES
- 29. GLSL GLSL y ES 2
- 30. OpenGL ES (iPhone) Touch Picking
Encontré en la especificación de OpenGL ES que "Los uniformes son un estado específico del objeto de programa. Conservan sus valores una vez cargados, y sus valores se restauran cuando un programa objeto se utiliza, siempre que el objeto del programa no se haya vuelto a vincular ". Así que puedo dejarlo sin cambios si su valor sigue siendo el mismo. Acerca de los atributos. Mi experimento dice diferente: si salteo glVertxAttribPointer cuando el puntero y el búfer son los mismos, visualmente recibo algo incorrecto o incluso una pantalla negra. Pero glGetError todavía está bien. – demi
La parte sobre los uniformes es básicamente lo que dije. Acerca de los atributos, ¿está seguro de que los atributos que intenta volver a utilizar tienen las mismas ubicaciones de atributo? De lo contrario, podría intentar usar glBindAttribLocation antes de vincular el programa para asegurarse. – kusma
Ojalá pudiera hacer +1 dos veces. uno para la respuesta correcta, 1 para el tidbit "registros". ¿De qué GPU sabe que eso no funciona, por cierto? – Bahbar