2012-05-02 17 views
7

Estoy buscando asesoramiento antes de profundizar en mi próximo proyecto. Me gustaría apoyar todas las resoluciones que ahora admite iOS (retina, iPhones no retina y los 3 iPads).Desarrollo para pantallas Retina y no Retina OpenGL ES

¿Cuál es la forma más común en que los desarrolladores hacen esto? He visto preguntas similares, pero sobre una naturaleza específica. Estoy buscando el paquete completo. ES DECIR. Me gustaría admitir diferentes fuentes de mapa de bits de resolución, imágenes, etc.

¿El interruptor específico del dispositivo, o si las declaraciones son estándar?

Gracias por toda la ayuda en avanzado.

E

Edición: He encontrado que esto de Apple:

cita en bloque Si la aplicación utiliza OpenGL ES para la representación, su código de dibujo existente debe continuar trabajando sin ningún cambio. Sin embargo, cuando se dibuja en una pantalla de alta resolución, su contenido se escala en consecuencia y se verá más bloqueado. El motivo de la aparición en bloque es que el comportamiento predeterminado de la clase CAEAGLLayer, que utiliza para respaldar sus compilaciones de renderizado de OpenGL ES, es el mismo que el de otros objetos de capa de Core Animation. En otras palabras, su factor de escala se establece en 1.0 inicialmente, lo que hace que el compositor Core Animation escale los contenidos de la capa en pantallas de alta resolución. Para evitar esta apariencia compacta, necesita aumentar el tamaño de sus compilaciones de renderizado de OpenGL ES para que coincida con el tamaño de la pantalla. (Con más píxeles, puede aumentar la cantidad de detalles que proporciona para su contenido). Sin embargo, como agregar más píxeles a sus renderbuffers tiene implicaciones de rendimiento, debe optar explícitamente para admitir pantallas de alta resolución.

Blockquote Para habilitar el dibujo de alta resolución, debe cambiar el factor de escala de la vista que usa para presentar el contenido de OpenGL ES. Cambiar la propiedad contentScaleFactor de su vista de 1.0 a 2.0 desencadena un cambio correspondiente al factor de escala del objeto CAEAGLLayer subyacente. El método renderbufferStorage: fromDrawable: que utiliza para vincular el objeto de capa a sus tasas de representación, calcula el tamaño del buffer de representación multiplicando los límites de la capa por su factor de escala. Por lo tanto, doblar el factor de escala duplica el ancho y alto del buffer de renderizado resultante, lo que le da más píxeles para su contenido. Después de eso, depende de usted proporcionar el contenido para esos píxeles adicionales.

Supongo que mi pregunta actualizada es ¿cómo doblo el factor de escala descrito anteriormente?

Edición 2:

Estoy casi allí ...

estoy usando este escalar dentro de mi EAGLView:

 // Adjust for retina displays 
    if ([self respondsToSelector:@selector(setContentScaleFactor:)]) 
    { 
      self.contentScaleFactor = [[UIScreen mainScreen] scale]; 
    } 

El único problema que queda ahora es el origen de alguna manera es hecho un desastre. Las imágenes de pantalla ahora se escalan según la resolución, pero en la resolución más grande, la imagen comienza en el medio de la pantalla.

Por favor ayuda!

Edit 3: Solved !!!! Estaba experimentando los problemas en mi orientación.

Debe asegurarse de que su traducción esté actualizada.Utilicé esto:

glTranslatef(width/2, height /2, 0); 
glRotatef(-90, 0, 0, 1); 
glTranslatef(-1 * (height/2),-1 * (width/2),0); 

Gracias por la apariencia. Espero que esto ayude a alguien.

+0

Ha habido suerte con el establecimiento de conten tScale = 2 en el iPad3 para compatibilidad con Retina? http://stackoverflow.com/questions/11276027/where-to-start-with-an-opengl-painter-for-the-retina-display –

+0

Todavía no he probado las pantallas de iPad retina. Cuando lo haga volveré a tocar. –

Respuesta

2

Consulte la guía de vista de la programación: Ver Geometría y Sistemas de coordenadas

http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html

valores de las coordenadas se representan utilizando números de punto flotante, que permiten para la disposición precisa y el posicionamiento de contenido independientemente de la resolución pantalla subyacente

Tha t significa que el punto que especifique (GCRect, etc.) no es píxeles; es un punto que se ajusta para retina/no retina

Finalmente, como señaló Cocoa Priest, puede mantener imágenes png y * @ 2x. png versión de sus imágenes:

Retina Display Images on iPhone

What is the point of the @2x for Retina display apps?

también, aquí está un artículo sobre el diseño de la retina: http://globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml

+2

Agradezco la respuesta. Definitivamente leeré sobre esa guía. No creo que esto funcione para mí (podría estar equivocado). Como debería haber mencionado primero, todas mis imágenes son de OpenGL ES y no de UIKit. –

-2

solo necesita tener @ 2x versiones de las imágenes en su paquete. IOS toma automáticamente el @ 2x-versión si se ejecuta en hardware retina

Cuestiones relacionadas