0

私のアプリケーションは C で書かれており、DirectFB を Lua コードに公開しています。そのため、コードが奇妙に見えるかもしれませんが、多かれ少なかれ C で直接実行できることです。

したがって、まず第一に、プライマリ レイヤーを取得し、それから surface を取得します。

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

その上にいくつかのグラフィックを作成します。OK、問題ありません。動作しています。

次に、その上にウィンドウを作成したいと思います:

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()は「FULLSCREEN」ではなくNORMALフラグに設定する必要があります。私の場合、すべてのグラフィックが同じアプリケーションによって作成されるのに対し、「アプリケーションがプライマリレイヤーを取得する」と記載されているため、ドキュメントは混乱しています。FULLSCREEN は、私たちがプライマリ レイヤーを所有していて、それ以外 (私たち自身のオブジェクトを含む) がそれにアクセスできないことを意味しているようです。

于 2015-11-15T18:29:20.340 に答える