This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAP3530 OpenGLES Buffering configuration

Other Parts Discussed in Thread: OMAP3530

Hi,

I'm working on OMAP3530 board on WinCE 6.0 R2 with BSP 6.10 and I'd like to know if it's possible to determine whether OGLES is using single buffering or double buffering. For the moment we think that OGLES is rendering with a single buffer thanks to this little sample :

1. We clear with Red color 

2. Do a SwapBuffer => Screen is Red 
3. We clear with Green Color 
4. Do a SwapBuffer => Screen is Green 
5. We clear with Blue Color 
6. Do a SwapBuffer => Screen is Blue 
7. Do a SwapBuffer => Screen is still Blue 
8. Do a SwapBuffer 800 times => Screen goes on being blue

The same example on PC with double buffering gives a different result from step 7 (switch from blue to green). What is strange is that we never had tearing.

Is it a configuration in OS Design or with EGL API ? What are the possible drawbacks to use single buffering (performance, tearing ?). Do you advice us to switch in double buffering mode and how ?

Thanks for your help.

Best regards.

Bertrand Forestier.

  • Hi Bertrand,

    In WinCE the graphics displaying process is designed to go through the official composition process of the OS – therefore all OpenGL ES is rendered to an offscreen buffer and then DirectDraw is used to blit it on screen.  The drawbacks to this method are the increased memory bandwidth required vs a double buffered flip mode where you use the SGX engine to render directly to framebuffer then point the DSS hardware to that framebuffer during the VSync period.

    Regards,

    Mauricio

  • Hi Mauricio,

     

    Could you tell me why this architecture has been choosen (offscreen buffer and blitting) instead of double buffered flip mode ? Does TI plan to change the architecture in future BSP releases ?

     

  • Bertrand,

    I believe this is mostly a legacy issue in the way this way was approached for WinCE.  Latest architectures are a bit different, and are probably addressing the back buffering in a better way.  Just to understand clearly your problem:  Are you creating a Full-Screen application, or is your intention to use a Window for this?

    Thanks,

    Mauricio

  • Mauricio,

    We are creating a full screen application using a window handle (Compact Framework 3.5 Form Handle) that is used by OGLES to create a surface. I don't understand your question : "Are you creating a Full-Screen application, or is your intention to use a Window for this?". Is there a best way when purpose is to have a full screen application ?

    Moreover you are talking about latest architectures that are a bit different, what are those architectures : new BSP for WinCE or other OS like Linux ?

    Indeed we are meeting performance problem due to the current architecture that is using blitting instead of switching between back buffer and front buffer (pvr2d flip).

  • Bertrand,

    That is the answer I was looking for; the behavior is different when you use the full-screen vs. a window that does not use the full display dimensions; as you mentioned it is esentially a flip vs. a blit.

    The new architecture is for the Graphics module (along some enhancements in the BSP) for WinCE.

    I'd like to understand your performance issues, since a flip should be performed in that case (even in the driver that you're using).  How are you measuring the performance, and how do you know it is a blit happening insttead of a page flip?

    Thanks,

    Mauricio

  • Mauricio,

    Currently we are calling eglGetDisplay function with hDC got from a Window Handle that has been retrieved from a CF 3.5 Form resized to fit in full screen. Therefore according to you by this way, blit is used.

    If we are creating a FullScreen App (without window handle), does it mean automatically that DSS will use flipping with 2 screen buffers instead of blitting. Moreover what is the way to create a FullScreen App (calling  eglGetDisplay with EGL_DEFAULT_DISPLAY ?) with Wince Platform on OMAP3530 ?

    According to us we thought that flipping will drive to better performance than blitting (CPU is blocked while blitting is done, even if NEON is used whereas using flipping it is a hardware switch). What are you thinking about that ?

    Currently we suppose we are using blitting because first test done (see first post in this thread) lets think that only one buffer was used and performances are not very good. To measure performances we are using a home made FPS counter.

    Thanks for your help.

     

     

     

  • Bertrand,

    That sounds fine, but the test itself doesn't suggest blitting.  And you are right: the flipping is much efficient than the blitting.  Let me double-check your test application to verify what is going on; so I can give you a better answer. You can send it to me directly to msanchez@ti.com if you don't want to share the application publicly.  Have you checked the examples that are part of the SDK?  All these demos are based on Full Screen applications, and in all of them Flipping is performed.

    Mauricio