2008-10-24 27 views
5

Tengo un número indefinido de contexto de visualización y cada uno mostrará una textura. Cuando llamo a glGenTextures obtengo el mismo nombre en todos los contextos de visualización. esto funcionara? Aunque tienen el mismo nombre, ¿aún almacenarán y mostrarán diferentes texturas? Si no, ¿qué debería hacer para evitar esto?texturas OpenGL con contextos de visualización múltiples

Respuesta

2

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

Los nombres de texturas son solo enteros a discreción de un contexto, generalmente comenzando con 1, y aumentando con cada glGenTexture, pero no necesariamente. No es necesario que una implementación funcione así (aunque la mayoría lo hace). Sin embargo, en teoría también podría obtener un número más o menos "aleatorio", como por ejemplo un 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 conductor, o alguna otra cosa esotérica. No hay ningún requisito de que un nombre debe ser algo específico.

En OpenGL heredado, incluso podría crear sus propios nombres en lugar de utilizar glGenTexture, pero eso ya no es legal ahora. No estoy seguro de lo que pensaban cuando eso estaba permitido, pero de todos modos ... :)

El mismo número (nombre) en un contexto diferente suele 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 utiliza wglCreateContextAttribsARB, el segundo parámetro es el manejador de un contexto ya existente (o nulo). Si proporciona un contexto aquí, tendrá contextos compartidos, incluso sin llamando explícitamente a glShareLists. Quizás eso es lo que sucedió por accidente.

2

Las texturas no se comparten (de manera predeterminada) en todos los contextos: tiene que habilitarlo explícitamente, pero la manera en que lo hace es específico 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 en aglCreateContext en OS-X).

1

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

+0

¿Cómo está creando el contexto de gráficos? ¿Cuál es tu plataforma? – Menkboy

+0

Tengo exactamente el mismo problema. Estoy usando PyQt5. Plataforma: linux (ubuntu16), gráficos intel. –

Cuestiones relacionadas