设置图层表面后是否可以显示窗口?

时间:2015-11-14 17:59:11

标签: directfb

My application在C中编写,并将DirectFB暴露给Lua代码。这就是为什么代码可能看起来很奇怪,但它或多或少可以直接在C中完成。

所以,首先,我正在获取主要层,然后是表面:

layer = SelLayer.GetLayer(0)    -- Get primary layer
layer:SetCooperativeLevel( SelLayer.CooperativeLevelConst('ADMINISTRATIVE') )
psrf = layer:GetSurface()

然后在上面做一些图形。 好的,没问题,它正在运作。

然后,我想在它上面创建一个窗口:

local window = layer:CreateWindow {
    pos = {50,50}, size = {200,200},
    caps=SelWindow.CapsConst('NONE'),
    stacking=SelWindow.StackingConst("UPPER"),
    surface_caps=SelSurface.CapabilityConst('NONE')
}
window:SetOpacity(0xff)         -- Make it visible
rdc_srf = window:GetSurface()   -- Get its surface

但如果我正在做一些图片

rdc_srf:Clear(60,60,60,100)
rdc_srf:Flip(SelSurface.FlipFlagsConst("BLIT"))

永远不会显示:只显示图层的表面。我尝试了不同的翻转选项,但它从未奏效。

我的错误在哪里?我不能直接在图层表面上工作并在其上面放置一个窗口吗?

由于

1 个答案:

答案 0 :(得分:1)

我发现它:SetCooperativeLevel()必须设置为NORMAL标志而不是" FULLSCREEN"。该文档令人困惑,因为它说"应用程序抓取主要层"而在我的情况下,所有图形都是由同一个应用程序创建的。 似乎FULLSCREEN意味着我们拥有主要层,而其他任何东西(包括我们自己的对象)都无法访问它。