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"))
永远不会显示:只显示图层的表面。我尝试了不同的翻转选项,但它从未奏效。
我的错误在哪里?我不能直接在图层表面上工作并在其上面放置一个窗口吗?
由于
答案 0 :(得分:1)
我发现它:SetCooperativeLevel()必须设置为NORMAL标志而不是" FULLSCREEN"。该文档令人困惑,因为它说"应用程序抓取主要层"而在我的情况下,所有图形都是由同一个应用程序创建的。 似乎FULLSCREEN意味着我们拥有主要层,而其他任何东西(包括我们自己的对象)都无法访问它。