Pregunta

Tengo un número indefinido de contexto de visualización y cada uno mostrará una textura. Cuando llamo a glGenTextures me devuelven el mismo nombre en todos los contextos de visualización. esto funcionara? ¿Aunque tengan el mismo nombre, seguirán almacenando y mostrando diferentes texturas? Si no, ¿qué debería hacer para solucionar esto?

¿Fue útil?

Solución

Obtener el mismo nombre de glGenTexture y tener la misma textura mostrada no es lo mismo.

Los nombres de textura son solo números enteros a discreción de un contexto, generalmente comenzando con 1, y aumentando con cada glGenTexture, pero no necesariamente así. No se requiere una implementación para trabajar así (aunque la mayoría lo hace). Sin embargo, en teoría, también podría obtener más o menos " aleatorio " número, como por ejemplo un número entero que se incrementa para cualquier tipo de objeto (es decir, no solo texturas, sino también búferes y sombreadores), o incluso una dirección de puntero de 32 bits en el espacio de direcciones del controlador, o alguna otra cosa esencial. No hay ningún requisito de que un nombre deba ser algo específico.

En OpenGL heredado, incluso puedes inventar tus propios nombres en lugar de usar glGenTexture, pero eso ya no es legal ahora. No estoy seguro de qué pensaron cuando se permitió eso, pero de todos modos ... :)

El mismo número (nombre) en un contexto diferente generalmente será una textura diferente, o posiblemente ninguna textura en absoluto. Por lo tanto, si ve la misma textura en un contexto diferente con el mismo nombre de textura, entonces tiene contextos compartidos o el controlador tiene errores.

Tenga en cuenta que si usa wglCreateContextAttribsARB, el segundo parámetro es el identificador de un contexto ya existente (o nulo). Si proporciona un identificador de contexto aquí, tendrá contextos compartidos incluso sin llamando explícitamente a glShareLists. Tal vez eso es lo que pasó por accidente.

Otros consejos

Las texturas no se comparten (de forma predeterminada) entre contextos, debe habilitarlo explícitamente, pero la forma en que lo haga es específica de la plataforma.

En win32, es wglShareLists , y en la mayoría de las demás plataformas se especifica al crear el contexto (por ejemplo, con el parámetro share a aglCreateContext en OS-X).

Que yo sepa, no he habilitado ningún intercambio de texturas. sin embargo, la misma textura se muestra en todos los contextos de visualización.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top