0

我的应用程序是用 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"))

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

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

谢谢

4

1 回答 1

1

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

于 2015-11-15T18:29:20.340 回答