android-developers
[Arriba] [Todas las Listas]

Re: [android-developers] Re: SurfaceHolder.setFormat() Sólo trabajando

To: android-developers@xxxxxxxxxxxxxxxx
Subject: Re: [android-developers] Re: SurfaceHolder.setFormat() Sólo trabajando cuándo llamado del *hilo* incorrecto?
From: Latimerius <l4t1m3r1us@xxxxxxxxx>
Date: Sat, 24 Aug 2013 00:14:07 +0200
Delivery-date: Fri, 23 Aug 2013 18:14:48 -0400
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :x-original-sender:x-original-authentication-results:reply-to :precedence:mailing-list:list-id:list-post:list-help:list-archive :sender:list-subscribe:list-unsubscribe:content-type; bh=Id9QZmEeDp25xCnRy1rsSH+GZJEoefg9mIOQSXWIRJM=; b=s6vgsWuWKWp4FYtSlu4c8KnmUnzkjU/oVzzLmUiWe0qvZSJPN8A6GegfaqgTsb39pk p76p2q1fdUJ3tvkrpCZXAibYoEWd+5iw0ezCgpac/D2vha8eMGccFzjFAbhCk4HZH6Fo jU0FdMYpJLad19UVNs8OrErT0GZyJmd08zQzTC4+4YHKLk0x0a+JKa1AVDCPXX1XmvfX 3rg0Bo0NbY/8obwEG11BnkQf0Ey6LMh8JMksgeWlq43lBNp4Sig2L/IcUKDK1lJRNQCD Pb2QG1BjrkqACqKNRsB7y9LAg1mrmb0f3T0k3jZgIp6DniR9LFfeOknfTbtWZ54Xj7vv BzNQ==
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :x-original-sender:x-original-authentication-results:reply-to :precedence:mailing-list:list-id:list-post:list-help:list-archive :sender:list-subscribe:list-unsubscribe:content-type; bh=Id9QZmEeDp25xCnRy1rsSH+GZJEoefg9mIOQSXWIRJM=; b=g0oKRG6cRJLdo81Tro8Lv9bQVEBUc2T5KUBhGzwZFYMzyRaMFQAQj3oNAkT4LaHr9w RkmYqEDXLvCSio131yZkJWw6AoUTqH/P+duyP4JxUXZkg9A5M4Dqnd41zZj2PIfUQu05 3abKvdyRt7k0W6TWMCAi53ufQFK5OrBXV/P8Rm+GKabQPWUlYjqdx9bZ0QEA90DBN9Wm /TEO69A8udAbtH6JXySxIKxPpcatC/j7CQoutrYUGDww/RE/1eN2EM/6kyLE875Pn+O6 yelCJDwW/yiC4Zg+hOxZFORbxSTt5tzI6KIy/V97zMoOpCHBrzdVzEURyFbriUNd1hiW 6utg==
Envelope-to: traductor@xxxxxxxxxxx
In-reply-to: <780e6a3b-8fbf-44b9-8345-7a3845407fc3@googlegroups.com>
List-archive: <http://groups.google.com/group/android-developers>
List-help: <http://groups.google.com/support/>, <mailto:android-developers+help@googlegroups.com>
List-id: <android-developers.googlegroups.com>
List-post: <http://groups.google.com/group/android-developers/post>, <mailto:android-developers@googlegroups.com>
List-subscribe: <http://groups.google.com/group/android-developers/subscribe>, <mailto:android-developers+subscribe@googlegroups.com>
List-unsubscribe: <http://groups.google.com/group/android-developers/subscribe>, <mailto:googlegroups-manage+364598216046+unsubscribe@googlegroups.com>
Mailing-list: list android-developers@xxxxxxxxxxxxxxxx; contact android-developers+owners@xxxxxxxxxxxxxxxx
References: <CAEzrvz62Jd1UbodA8NEq12rCuNHdZTE2G+LeRpZmXZhKGCDZ=g@mail.gmail.com> <780e6a3b-8fbf-44b9-8345-7a3845407fc3@googlegroups.com>
Reply-to: android-developers@xxxxxxxxxxxxxxxx
Sender: android-developers@xxxxxxxxxxxxxxxx
En *Fri, *Aug 23, 2013 en 11:03 PM, *Nobu Juegos <dev.nobu.games@xxxxxxxxx>escribió:

> no soy seguro si te entiendo correctamente cuándo exactamente pusiste
> el formato. Suena demasiado me tan si estás poniéndolo demasiado tarde", después de que el
> *OpenGL contexto de ES ha sido creado.
>

Sí, es después del contexto ha sido creado (pero ha no todavía sido corriente
hecha).  Creo que esto tendría que ser bien, *NDK las muestras hacen el mismo (en
código nativo - es hecho utilizando llamadas diferentes allí pero *semantics es el mismo),
cuando varias versiones de *GLSurfaceView parece para hacer, también.  Qué sentido
de marcas a mí después de todo, no esperaría una conexión entre un *EGL
contexto en una mano y un *pixel superficie/su formato en el otro...


> Qué está poniendo el formato en la Actividad *onCreate método en
> el *UI hilo antes del *OpenGL el contexto es *initialized y antes de que un *renderer
> ha sido puesto. Quizás vuestro *setFormat la llamada es aplazada en una manera así que pierdes
> el *OpenGL el contexto y él fuerza un *re-creación?
>

Esto era lo que utilicé inicialmente pero hay problemas con esto.
 *onCreate() No sabe todavía que *EGL *configs es disponible, ni cuál
de ellos la aplicación preferirá.  También, no soy seguro si *lifetime de vuestra
Actividad y vuestra ventana nativa son ligadas - en otras palabras, probablemente
podría pasar que la ventana es destruida y *recreated durante un caso
de Actividad solo *lifetime. (?)


> Lo adivino justo trabaja para ti en dispositivos diferentes porque vuestra llamada a *setFormat
>  no de hecho cambiar el formato, así que nada pasa. Vuestro
> más viejo 2.2 *Android el dispositivo puede tener un diferente *default formato para
> la vista de superficie (como *RGB565) comparado a dispositivos más nuevos.
>

Estoy probando esto en 3 *legacy dispositivos (llamo *EGL de código nativo en
cualquier cosa >9 así que este *Java la versión sólo se preocupa dispositivos viejos): Deseo, Galaxia
*S y *Optimus Uno.  El formato inicial de la ventana nativa es -1 en todo
tres.  El formato de objetivo es 4 en Deseo y *Optimus, 1 en Galaxia (nunca
importar la diferencia - es porque justo tomo el primer decente *config por ahora)
así que diría ellos todo probablemente formatos de cambio.  Mira aun así como
el *Optimus hace algo *differently.

Adivino lo que soy de hecho interesado dentro es: supone estoy corriendo en
el *render hilo, aproximadamente para pasar una ventana nativa (*SurfaceHolder)
a *eglCreateWindowSurface().  Aun así yo aviso todavía necesito manipular
el formato de la ventana nativa antes de aquello.  Qué es la manera correcta de conseguir
aquello?



>
>
>
> En viernes, agosto 23, 2013 1:11:57 PM *UTC-5, *latimerius escribió:
>>
>> En un probando programa estoy jugando con actualmente, quiero utilizar
>> *setFormat() para adaptar el *pixel formato de mi superficie al escogido *EGL
>> *config antes de que paso el titular de superficie a *eglCreateWindowSurface().
>>
>> Ahora, llamo *EGL de mi *render el hilo y yo
>> saben *SurfaceHolder.*setFormat() Es documentado para tener que ser "llamado del mismo
>> hilo que corre el *SurfaceView ventana", el cual tomo para ser el hilo
>> principal.  A *comply, envuelvo mi *setFormat() llamada en un *Runnable que paso
>> a *runOnUiThread() y esperar() hasta que es de hecho ejecutado.
>>
>> Esto trabaja perfectamente en algunos dispositivos, aun así me da fracasos
>> intermitentes en *Optimus Un (con *Android 2.2)  - en inicio de programa-arriba, tres
>> tiempo fuera de cuatro la pantalla es justo negro.  Incluso si inicio-arriba va bien,
>> el primer cambio de configuración hace la pantalla va negra.  El programa
>> carreras quietas y ningún GL o *EGL las llamadas señalan cualesquier errores.
>>
>> Aquí la parte más extraña - si omito el *runOnUiThread() material y sencillamente
>> llamada *setFormat() de mi *render hilo, fija el problema y el
>> programa corre #100% sólido en *Optimus ningún asunto mucho batiendo doy él -
>> *randomly pulsando Casa y Atrás mientras *rotating el dispositivo *wildly, poniéndolo para dormir y despertándolo respalda arriba, el *renderer siempre maneja los cambios
>> de ventana nativos correctamente y *renders justo bien.
>>
>> Soy en una pérdida,  cualquiera tiene una explicación?
>>
>>  --
> Recibiste este mensaje porque eres *subscribed al *Google
> Grupos "*Android *Developers" grupo.
> A correo a este grupo, envía *email a *android-developers@xxxxxxxxxxxxxxxx
> A *unsubscribe de este grupo, envía *email a *android-*developers+unsubscribe@xxxxxxxxxxxxxxxx
> 
> Puesto que más opciones, visita este grupo en
> *http://grupos.*google.*com/Grupo/*android-*developers?*hl=*en
> ---
> Recibiste este mensaje porque eres *subscribed al *Google Grupos
> "*Android *Developers" grupo.
> A *unsubscribe de este grupo y la parón que recibe *emails de él, enviar un
> *email a *android-*developers+unsubscribe@xxxxxxxxxxxxxxxx.
> Puesto que más opciones, visita *https://grupos.*google.*com/Los Grupos/optan_fuera.
>

-- 
Recibiste este mensaje porque eres *subscribed al *Google
Grupos "*Android *Developers" grupo.
A correo a este grupo, envía *email a *android-developers@xxxxxxxxxxxxxxxx
A *unsubscribe de este grupo, envía *email a *android-*developers+unsubscribe@xxxxxxxxxxxxxxxx

Puesto que más opciones, visita este grupo en
*http://grupos.*google.*com/Grupo/*android-*developers?*hl=*en
--- 
Recibiste este mensaje porque eres *subscribed al *Google Grupos "*Android *Developers" grupo.
A *unsubscribe de este grupo y la parón que recibe *emails de él, enviar un *email a *android-*developers+unsubscribe@xxxxxxxxxxxxxxxx.
Puesto que más opciones, visita *https://grupos.*google.*com/Los Grupos/optan_fuera.
On Fri, Aug 23, 2013 at 11:03 PM, Nobu Games <dev.nobu.games@xxxxxxxxx>wrote:

> I'm not sure if I understand you correctly when exactly you set the
> format. It sounds too me as if you're setting it "too late", after the
> OpenGL ES context has been created.
>

Yes, it's after the context has been created (but has not yet been made
current).  I believe this should be fine, NDK samples do the same (in
native code - it's done using different calls there but semantics are the
same), as various versions of GLSurfaceView seem to do, too.  Which makes
sense to me after all, I wouldn't expect a connection between an EGL
context on one hand and a pixel surface/its format on the other...


> What I do is setting the format in the Activity's onCreate method on the
> UI thread before the OpenGL context is initialized and before a renderer
> has been set. Maybe your setFormat call is postponed in a way so you lose
> the OpenGL context and it forces a re-creation?
>

This was what I used initially but there are problems with this.
 onCreate() does not know yet which EGL configs are available, nor which
one of them the application will prefer.  Also, I'm not sure if lifetime of
your Activity and your native window are tied - in other words, it likely
could happen that the window is destroyed and recreated during a single
Activity instance lifetime. (?)


> I guess it just works for you on different devices because your call to
> setFormat does not actually change the format, so nothing happens. Your
> older 2.2 Android device may have a different default format for the
> surface view (such as RGB565) compared to newer devices.
>

I'm testing this on 3 legacy devices (I call EGL from native code on
anything >9 so this Java version only concerns old devices): Desire, Galaxy
S and Optimus One.  The initial format of the native window is -1 on all
three.  The target format is 4 on Desire and Optimus, 1 on Galaxy (never
mind the difference - it's because I just take the first decent config for
now) so I'd say they all probably change formats.  It does look though like
the Optimus does something differently.

I guess what I'm actually interested in is: suppose I'm running on the
render thread, about to pass a native window (SurfaceHolder)
to eglCreateWindowSurface().  However I notice I still need to manipulate
the native window's format before that.  What is the correct way to achieve
that?



>
>
>
> On Friday, August 23, 2013 1:11:57 PM UTC-5, latimerius wrote:
>>
>> In a testing program I'm playing with currently, I want to use
>> setFormat() to adapt the pixel format of my surface to the chosen EGL
>> config before I pass the surface holder to eglCreateWindowSurface().
>>
>> Now, I call EGL from my render thread and I know
>> SurfaceHolder.setFormat() is documented to have to be "called from the same
>> thread running the SurfaceView's window", which I take to be the main
>> thread.  To comply, I wrap my setFormat() call in a Runnable which I pass
>> to runOnUiThread() and wait() until it's actually executed.
>>
>> This works perfectly on some devices, however it gives me intermittent
>> failures on Optimus One (with Android 2.2)  - on program start-up, three
>> times out of four the screen is just black.  Even if start-up goes right,
>> the first configuration change makes the screen go black.  The program
>> still runs and no GL or EGL calls signal any errors.
>>
>> Here's the weirdest part - if I omit the runOnUiThread() stuff and simply
>> call setFormat() from my render thread, it fixes the problem and the
>> program runs 100% solid on Optimus no matter much beating I give it -
>> randomly pressing Home and Back while rotating the device wildly, putting
>> it to sleep and waking it back up, the renderer always handles the native
>> window changes correctly and renders just fine.
>>
>> I'm at a loss, does anyone have an explanation?
>>
>>  --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to android-developers@xxxxxxxxxxxxxxxx
> To unsubscribe from this group, send email to
> android-developers+unsubscribe@xxxxxxxxxxxxxxxx
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Android Developers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to android-developers+unsubscribe@xxxxxxxxxxxxxxxx.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@xxxxxxxxxxxxxxxx
To unsubscribe from this group, send email to
android-developers+unsubscribe@xxxxxxxxxxxxxxxx
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
--- 
You received this message because you are subscribed to the Google Groups "Android Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to android-developers+unsubscribe@xxxxxxxxxxxxxxxx.
For more options, visit https://groups.google.com/groups/opt_out.
<Anterior por Tema] Tema Actual [Siguiente por Tema>