Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Problema al manejar ventana en X11

Iniciado por Marci, 04 de Enero de 2008, 09:22:14 PM

« anterior - próximo »

Marci

Estoy empezando a trastear con Linux y OpenGL y ando un poco perdido.

En principio puedo crear una ventana, mostrarla y dibujar en ella correctamente. Se minimiza y se cierra al darle a los botones correspondientes pero me encuentro con  un problema cuando la arrastro por el escritorio.

Supongamos que estoy renderizando una escena sobre un fondo naranja. Cuando arrastro la ventana el contenido de la misma se queda quieto (la escena con fondo naranja) y se mueve toda la ventana con el interior en negro (no se actualiza mientras la arrastro). En el momento que dejo de arrastrar la ventana se vuelve a actualizar la escena, pero en el escritorio no se ha borrado la escena en la posicion original de la ventana.

Supongo que el problema puede estar en el control de los eventos de la ventana. De hecho no estoy controlando el de cerrar ni el minimizar y funcionan correctamente pero no se si habrá que hacer algo con el evento de moverla.

Un saludo.

senior wapo

Si tienes activado composite, por ejemplo compiz (sombras, transparencias y efectos de escritorio) es inevitable. Arranca glxgears y verás que lo hace igual.

Si no tienes activado composite en el escritorio entonces es un tema de tu versión de opengl/drivers.

Si no tienes activado XGL/Compiz/etc y es la última versión de tu distribución Linux entonces ni idea.

Marci

Cita de: "senior wapo"Si tienes activado composite, por ejemplo compiz (sombras, transparencias y efectos de escritorio) es inevitable. Arranca glxgears y verás que lo hace igual.
:shock:  :shock:  :?

Pues si que era de esto y efectivamente glxgears hace los mismo. Gracias por ahorrarme más quebraderos de cabeza :lol:

Cacharrearé un poco por google pero de verdad es inevitable? Por qué se produce?

senior wapo

Mi intuición me dice que no redireccionan la salida opengl a una textura para luego componerla con el resto. En su lugar la salida opengl sale directa a pantalla, como un overlay.

Se me ocurrió el apaño guarro de cachear todos los eventos de exposure como si fuesen dirty rects y volcar el backbuffer con gldrawpixels en lugar de hacer un swap. Las transparencias sonbras y redondeces de lo que haya por encima se verá con basura pero al menos no sobreescribirás ni dejarás rastros.

A diferencia de MSWindows, X11 te puede avisar individualmente de cada mini región cuadrada que se destapa y hay que repintar, además de la región total que resulta al unirlas (esta última ya sí sería el equivalente al WM_PAINT de mswindows).

Tengo ese algoritmo en la lista de cosas por hacer desde hace la torta asi que no se si funcionará, que supongo que sí.

PD: Se entiende que todo este rollo es para cuando la ventana no está en primer plano, si está en primer plano sigues haciendo swap porque seguro que no tienes ninguna parte cubierta.

PD2: Ahora que lo pienso, si tienes compiz, es que los drivers soportan gl_texture_from_pixmap ( o como se llame) asi que con trucos raros lo mismo puedes volcar directamente el backbuffer con Xlib (como si fuese un pixmap) en lugar de usar todo lo anterior.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.