don't allocate backbuffer for dummy surfaces
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41426 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
		@@ -294,14 +294,23 @@ struct wxIDirectFBSurface : public wxDfbWrapper<IDirectFBSurface>
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    wxIDirectFBSurfacePtr Clone();
 | 
					    wxIDirectFBSurfacePtr Clone();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /// Flags for CreateCompatible()
 | 
				
			||||||
 | 
					    enum CreateCompatibleFlags
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        /// Don't create double-buffered surface
 | 
				
			||||||
 | 
					        CreateCompatible_NoBackBuffer = 1
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
        Creates a surface compatible with this one, i.e. surface with the same
 | 
					        Creates a surface compatible with this one, i.e. surface with the same
 | 
				
			||||||
        capabilities and pixel format, but with different and size.
 | 
					        capabilities and pixel format, but with different and size.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @param size Size of the surface to create. If wxDefaultSize, use the
 | 
					        @param size  Size of the surface to create. If wxDefaultSize, use the
 | 
				
			||||||
                    size of this surface.
 | 
					                     size of this surface.
 | 
				
			||||||
 | 
					        @param flags Or-combination of CreateCompatibleFlags values
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    wxIDirectFBSurfacePtr CreateCompatible(const wxSize& size = wxDefaultSize);
 | 
					    wxIDirectFBSurfacePtr CreateCompatible(const wxSize& size = wxDefaultSize,
 | 
				
			||||||
 | 
					                                           int flags = 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
private:
 | 
					private:
 | 
				
			||||||
    // this is private because we want user code to use FlipToFront()
 | 
					    // this is private because we want user code to use FlipToFront()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,7 +74,11 @@ wxIDirectFBSurfacePtr CreateDummySurface(wxWindow *win, const wxRect *rect)
 | 
				
			|||||||
    wxLogTrace(TRACE_PAINT, _T("%p ('%s'): creating dummy DC surface"),
 | 
					    wxLogTrace(TRACE_PAINT, _T("%p ('%s'): creating dummy DC surface"),
 | 
				
			||||||
               win, win->GetName().c_str());
 | 
					               win, win->GetName().c_str());
 | 
				
			||||||
    wxSize size(rect ? rect->GetSize() : win->GetSize());
 | 
					    wxSize size(rect ? rect->GetSize() : win->GetSize());
 | 
				
			||||||
    return win->GetDfbSurface()->CreateCompatible(size);
 | 
					    return win->GetDfbSurface()->CreateCompatible
 | 
				
			||||||
 | 
					           (
 | 
				
			||||||
 | 
					             size,
 | 
				
			||||||
 | 
					             wxIDirectFBSurface::CreateCompatible_NoBackBuffer
 | 
				
			||||||
 | 
					           );
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
@@ -191,8 +195,14 @@ wxWindowDC::~wxWindowDC()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    if ( m_shouldFlip )
 | 
					    if ( m_shouldFlip )
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // FIXME: flip only modified parts of the surface
 | 
					        DFBSurfaceCapabilities caps = DSCAPS_NONE;
 | 
				
			||||||
        surface->FlipToFront();
 | 
					        surface->GetCapabilities(&caps);
 | 
				
			||||||
 | 
					        if ( caps & DSCAPS_DOUBLE )
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // FIXME: flip only modified parts of the surface
 | 
				
			||||||
 | 
					            surface->FlipToFront();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        // else: the surface is not double-buffered and so cannot be flipped
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // else: don't flip the surface, wxTLW will do it when it finishes
 | 
					    // else: don't flip the surface, wxTLW will do it when it finishes
 | 
				
			||||||
    //       painting of its invalidated areas
 | 
					    //       painting of its invalidated areas
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -116,7 +116,8 @@ int wxIDirectFBSurface::GetDepth()
 | 
				
			|||||||
    return DFB_BITS_PER_PIXEL(format);
 | 
					    return DFB_BITS_PER_PIXEL(format);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
wxIDirectFBSurfacePtr wxIDirectFBSurface::CreateCompatible(const wxSize& sz)
 | 
					wxIDirectFBSurfacePtr
 | 
				
			||||||
 | 
					wxIDirectFBSurface::CreateCompatible(const wxSize& sz, int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    wxSize size(sz);
 | 
					    wxSize size(sz);
 | 
				
			||||||
    if ( size == wxDefaultSize )
 | 
					    if ( size == wxDefaultSize )
 | 
				
			||||||
@@ -135,6 +136,17 @@ wxIDirectFBSurfacePtr wxIDirectFBSurface::CreateCompatible(const wxSize& sz)
 | 
				
			|||||||
    desc.width = size.x;
 | 
					    desc.width = size.x;
 | 
				
			||||||
    desc.height = size.y;
 | 
					    desc.height = size.y;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // filter out caps that don't make sense for a new compatible surface:
 | 
				
			||||||
 | 
					    int caps = desc.caps;
 | 
				
			||||||
 | 
					    caps &= ~DSCAPS_PRIMARY;
 | 
				
			||||||
 | 
					    caps &= ~DSCAPS_SUBSURFACE;
 | 
				
			||||||
 | 
					    if ( flags & CreateCompatible_NoBackBuffer )
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        caps &= ~DSCAPS_DOUBLE;
 | 
				
			||||||
 | 
					        caps &= ~DSCAPS_TRIPLE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    desc.caps = (DFBSurfaceCapabilities)caps;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wxIDirectFBSurfacePtr snew(wxIDirectFB::Get()->CreateSurface(&desc));
 | 
					    wxIDirectFBSurfacePtr snew(wxIDirectFB::Get()->CreateSurface(&desc));
 | 
				
			||||||
    if ( !snew )
 | 
					    if ( !snew )
 | 
				
			||||||
        return NULL;
 | 
					        return NULL;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user