2010-12-06 16 views
7

Estoy desarrollando una aplicación muy simple para la plataforma Mac OSX utilizando Qt y OpenGL (y QtOpenGL), por lo que crossplatform es más fácil.
La aplicación recibe una cantidad variable de secuencias de video que se deben representar en la pantalla. Cada cuadro de estas secuencias de video se usa como una textura para mapear un rectángulo en el espacio 3D (muy similar a un videowall). Además de cosas como recibir, bloquear, cargar datos de video, sincronizar hilos ... considero que está claro que es una aplicación bastante simple.El mismo código QtOpenGL se ejecuta unas 15 veces más lento cuando se usa Carbon (vs Cocoa)

El hecho es que todo se comporta bien cuando se utilizan los binarios Qt 4.7 basados ​​en cacao (los predeterminados) en una Mac 10.5. Pero mi código tiene que funcionar bien en todas las versiones de OSX a partir de (e incluyendo a) 10.4. Así que probé el código en una máquina 10.4 y se bloqueó justo cuando se iniciaba. Después de algunas horas de lectura en Internet, descubrí que para una aplicación de Qt que se dirige a 10.4, se debe utilizar la Qt de carbono. Así que reconstruyo todo el proyecto con el nuevo marco.
Cuando se ejecuta el nuevo binario resultante, todo funciona bien, excepto por el hecho de que los fps de la aplicación caen a unos 2 fps. Y se comporta igual en ambas máquinas (la computadora 10.5 tiene sensiblemente mejores características) He pasado bastante tiempo trabajando en esto, pero no he llegado a una solución. Cualquier sugerencia?

Más información sobre la aplicación y las cosas que he probado

código
  • no se ha modificado al volver a compilar de carbono basado
  • sólo dos (256x256 texturas) vídeos AR utilizados con el fin de asegurar que no es un ancho de banda Limitar el problema (aunque sé que no debería porque el primer código funcionó)
  • las 2 transmisiones de video llegan desde la red (local)
  • cuando llega una transmisión de video, se emita una señal y los datos se cargarán en una Textura OpenGL (glTexSubImage2 D)
  • un temporizador hace que el render (paintGL) suceda a aproximadamente 20ms (~ 50 fps)
  • el código de renderizado usa las texturas (actualizadas o no) para dibujar los rectángulos.
  • la representación solo cuando llega un video no funcionará debido a que tiene 2 transmisiones de video (asíncronas); además, hay que dibujar más cosas en la pantalla.
  • solo se usan comandos básicos de OpenGL (no PBO, FBO, VBO, ...) El único problemático cosa podría ser el uso de sombreadores (disponible solo desde Qt 4.7), pero su código es trivial.
  • He usado OpenGLProfiler e Instruments. Nada especial/extraño fue observado.

algunas cosas que sospechan (conclusiones)

  • está claro que no es un problema de hardware. La misma computadora se comporta de manera diferente
  • me da la sensación de que es un problema de enhebrado/bloqueo, pero, ¿por qué?
  • carbono es de 32 bits. La aplicación 10.5 fue 64. No es posible desarrollar 64 bits en carbono.
  • para regalar la posible causa de 32 bits, también reconstruyo el primer proyecto para 32 bits. Funcionó en parte lo mismo.
  • He leído algo sobre el carbono que tiene problemas (más de lo normal) con el cambio de contexto.
  • tal vez la implementación OpenGL es Multithread y el código no lo es? (¿o lo contrario?) Eso podría causar muchos puestos.
  • ¿Quizás los eventos con el mango de carbón son diferentes a los del cacao? (me refiero a envío de señal/evento, lazo principal ...)

Ok, esto es (lo siento por la escritura tan larga) mi dolor de cabeza real. Cualquier sugerencia, idea ... sería muy apreciada.

Thx de antemano.

+0

http://www.carbondev.com/site/?page=64-bit+Carbon Puede ser útil. Apple mantiene el carbono, pero no agrega nuevas características, así que supongo que tampoco cambiarán nada bajo el capó. Probablemente no optimicen nada, ya que su objetivo principal es entrar completamente en Obj-C en su plataforma –

Respuesta

1

¿Puedo hacer una pregunta de diagnóstico? ¿Puedes asegurarte de que no se transfiere al procesador de software?

Recuerdo que cuando se lanzó la versión 10.4, hubo cierta confusión acerca del cuarzo extremo, el cuarzo y el carbón, algunos de ellos desactivados, y los procesadores de hardware desactivados por defecto en algunos de ellos, que requerían configuración del usuario final para obtener funciona correctamente No estoy seguro de si esta información es pertinente, porque usted dice que, habiendo apuntado a 10.4, el problema se presenta tanto en el 10.4 como en el 10.5, ¿sí?

Es posible (aunque estoy seguro de que estoy agarrándome de las pajas aquí) que incluso en 10.5 carbono no usa los procesadores de hardware por defecto. Sin embargo, me gustaría pensar que OSX prefiere los procesadores de hardware a los visualizadores de software en todos los escenarios, pero puede valer la pena dedicar un poco de tiempo a investigar, dado cuán meticuloso ya está analizando otras opciones.

Buena suerte.

0

Si está utilizando Qt, supongo que su código funcionaría en una plataforma de Windows o Linux. ¿Has probado tu aplicación en estas plataformas?

Esto revelaría rápidamente si se trata de Qt o la versión mac OSX.

Cuestiones relacionadas