标签: directfb

Android GUI架构 - Surface/view/window/canvas之间的关系

=========================

更新:经过几天的谷歌搜索和实验,我找到了大多数这些愚蠢问题的答案.查看我提交的答案.

=========

Android Window的责任是什么?

以下是一些问题:

  • 是否负责收集和发送输入?
  • 视图和窗口之间有什么关系?与DFB中的表面和窗口之间的关系相同?
  • 活动和窗口之间有什么关系?每个活动都有窗口吗?
  • 是否可以从应用程序创建一个窗口?什么时候有必要?
  • Android支持多窗口吗?

编辑:添加更多问题:

  1. 各种类的职责是什么,例如Window,View,Canvas,Surface以及它们如何相互协作?

  2. 通常一个Activity有多少个窗口?

3.一个活动中的所有视图都将附加到Window吗?附加是什么意思?

  1. 每个窗口都有表面?每个画布都有表面?

  2. View负责focus/keyEvent/manager,而Cavus只负责"绘图"操作.

  3. WindowManager负责Window堆叠?这与SurfaceFlinger有什么关系?

  4. View不拥有Surface,视图包含的Window拥有?

  5. 使用canvas通过调用surface.lockCanvas()得到View.

  6. 何时调用onDraw(Canvas)?如何以及谁传递画布参数?

  7. Canvas有尺寸吗?Window的表面总是全屏吗?

再次编辑:

看完Romain Guy http://www.youtube.com/watch?v=duefsFTJXzc&feature=feedwll&list=WL提供的精彩演示后,几个问题得到解决并添加了几个问题:)

  1. 每个Activity都有一个ViewRoot,因此有一个Window吗?
  2. 有没有必要明确地创建一个窗口?并且窗口的表面是否全屏?
  3. 状态栏是否会在另一个窗口中?
  4. 表面的大小是多少?这总是全屏吗?

android frameworks window view directfb

31
推荐指数
2
解决办法
7594
查看次数

为什么DirectFB在GNU/Linux中没有得到更广泛的使用?是否存在X11中不存在的严重限制?

据我了解,DirectFB为多种图形卡提供硬件加速.此外,它比X11更小,更快,占用的内存更少.为什么呢,它不是比现在更主流吗?

这是我真正不确定的:普通的GTK +/Qt程序需要移植到它吗?在DirectFB网站上,有一个将Firefox移植到它的项目.如果GTK +能够直接使用DirectFB,为什么这甚至是必要的呢?我(可能错误地)理解它的方式是Firefox应该输出到GTK +,它应该输出到DirectFB,它应该输出到硬件.如果我错了,请纠正我.

谢谢,

哈桑

x11 gtk graphics directfb

21
推荐指数
4
解决办法
2万
查看次数

如何在不离开X.11环境的情况下开发DirectFB应用程序

我正在尝试为嵌入式平台开发GUI应用程序,没有任何窗口,我正在使用DirectFB,这非常适合我的需求.

由于我开发的嵌入式功能并不强大,我真的想尝试在我自己的Ubuntu桌面上进行开发.问题是Framebuffer与X.org冲突导致我离开整个桌面,并关闭X.org只是为了查看我的更改结果.

有一个适合我需要的好的帧缓冲模拟器吗?Qt有一个名为QVFb,但它只适用于开发Qt应用程序,而DirectFB的VNC后端总是崩溃.

那么,有什么想法吗?

c++ linux user-interface framebuffer directfb

12
推荐指数
1
解决办法
1万
查看次数

如何在没有X11或/ dev/fb0的Linux下拍摄屏幕截图?

我正在研究基于Linux的嵌入式系统.它使用Qt进行窗口化,没有Xserver.我的目标是拍摄屏幕截图.

我尝试过使用FBgrab.它失败了,因为我没有,/dev/fb0因为内核中没有启用帧缓冲区.我们正在运行基于Qt的应用程序以在屏幕上显示UI(HDMI).我也在QT网站上尝试了使用QPixmap和抓取窗口的屏幕截图应用程序.这也是一个失败,因为我无法在系统中运行两个QAppliction,因为它会影响显示.

有没有其他方法来拍摄屏幕?

c++ linux embedded qt directfb

8
推荐指数
1
解决办法
1640
查看次数

OpenGL 直接到 Linux 帧缓冲区,无需 X-Server

我有一个使用 GLUT 开发的小型 OpenGL 应用程序。在没有 X-Server 的情况下,使用 OpenGL 直接渲染到 Linux 帧缓冲区 (fbdev) 的最佳选择是什么?我知道 GLUT 需要 X,所以我不是在寻找在没有 X 的情况下使用 GLUT 的方法。

我打算使用的帧缓冲设备已确认与fbi和一起使用mplayer

我已经完成(或者我认为我已经完成了)一项非常详尽的研究,并找到了一些可能有用的资源和库。但大部分信息都有些过时,我不确定该相信什么。

因此,虽然很多 SO 答案都提到 DirectFB 和 Mesa 作为解决方案,但我无法让自己对这些选项充满信心,因为可以找到的材料很少。

所以,如果你能在这里指出我正确的方向,给我任何例子,我将不胜感激。我错过了什么?


由于问题被标记为重复而进行编辑:

相关问题的答案建议使用 DRM。我打算在尚不支持主线 Linux 内核的基于 Allwinner H3 的嵌入式计算机上运行我的代码。目前,它在内核版本 3.14 上运行,我认为它不支持 DRM。

那么,有没有其他选择?

linux opengl framebuffer directfb mesa

6
推荐指数
0
解决办法
2800
查看次数

来自内存缓冲区的DirectFB数据

我需要一种非常快速的方式来显示屏幕上的数据缓冲区.我首先尝试访问linux framebuffer,事实证明这是非常好的.然后我了解了directFB,我喜欢它提供的额外功能(如快速memcpy,动态调整图像大小,不需要额外的代码等).但后来我遇到了麻烦 - 所有的例子都是从文件中加载的图像.据我所知,它的'DataBuffer'类型没有示例/教程.在查看了文档和源代码之后,我设法编译了这样的东西:

DFBSurfaceDescription sdsc;
DFBDataBufferDescription ddsc;
DFBDataBufferDescriptionFlags ddscf = (DFBDataBufferDescriptionFlags)DBDESC_MEMORY;
IDirectFBDataBuffer *dbuffer;
IDirectFBImageProvider *provider;

ddsc.flags = ddscf;
ddsc.file = NULL;
ddsc.memory.data = m_z;
ddsc.memory.length = 640*480;

DFBCHECK (DirectFBInit (&argc, &argv));
DFBCHECK (DirectFBCreate (&dfb));
DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));
sdsc.flags = DSDESC_CAPS;
sdsc.caps  = (DFBSurfaceCapabilities)(DSCAPS_PRIMARY | DSCAPS_FLIPPING);
DFBCHECK (dfb->CreateSurface( dfb, &sdsc, &primary ));
DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));

DFBCHECK (dfb->CreateDataBuffer(dfb, &ddsc, &dbuffer));
DFBCHECK (dbuffer->CreateImageProvider(dbuffer, &provider));
DFBCHECK (provider->GetSurfaceDescription (provider, &sdsc));

DFBCHECK (dfb->CreateSurface( dfb, &sdsc, &fbwindow ));
DFBCHECK (provider->RenderTo (provider, fbwindow, NULL)); …
Run Code Online (Sandbox Code Playgroud)

framebuffer directfb

5
推荐指数
1
解决办法
8163
查看次数

Openwrt:如何在新包中添加特定的库依赖项

我正在尝试为directfb教程添加一个包.我按照http://wiki.openwrt.org/doc/devel/packages中的说明进行操作.目前包已成功下载到dl文件夹,甚至在build目录中编译,但是当我将install部分添加到makefile时,我得到了依赖性错误:

Package directfb_tutorials is missing dependencies for the following libraries:
libdirect-1.4.so.0
libdirectfb-1.4.so.0
libfusion-1.4.so.0
libpthread.so.0
Run Code Online (Sandbox Code Playgroud)

包Makefile(我把它放在package/utils/directfb_tutorials /下):

include $(TOPDIR)/rules.mk
PKG_NAME:=DFBTutorials
PKG_VERSION:=0.5.0
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://www.directfb.org/downloads/Extras/
PKG_MD5SUM:=13e443a64bddd68835b574045d9025e9
PKG_LICENSE:=LGPLv2.1
PKG_LICENSE_FILES:=COPYING
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
define Package/directfb_tutorials
    TITLE:=directfb_tutorials
    SECTION:=utils
    CATEGORY:=Utilities
    URL:=http://directfb.org
    DEPENDS:=+libdirectfb
endef
define Package/directfb_tutorials/description
    DirectFB Tutorials
endef

define Build/Configure
    $(call Build/Configure/Default,)
endef
define Package/directfb_tutorials/Build/Compile
    $(MAKE) -C $(PKG_BUILD_DIR)
endef
define Package/directfb_tutorials/install
    $(INSTALL_DIR) $(1)/bin/dfb_tutorials
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/image/image $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/simple/simple $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/keybuffer/keybuffer $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/text/text $(1)/bin/dfb_tutorials/
    $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/sprite/sprite $(1)/bin/dfb_tutorials/
endef
$(eval $(call BuildPackage,directfb_tutorials))
Run Code Online (Sandbox Code Playgroud)

将+ …

openwrt makefile package directfb

4
推荐指数
1
解决办法
9722
查看次数

开罗“在 pkg-config 搜索路径中找不到 libpng”

我正在尝试安装 GTK-DFB,并且需要 cairo。当我尝试从源代码构建它时,它抛出:

checking for cairo's PNG functions feature... 
configure: WARNING: Could not find libpng in the pkg-config search path
checking whether cairo's PNG functions feature could be enabled... no
configure: error: recommended PNG functions feature could not be enabled
Run Code Online (Sandbox Code Playgroud)

想法?

谢谢

gtk directfb cairo

4
推荐指数
2
解决办法
1万
查看次数

将两位颜色转换为八位颜色

我的颜色值有六位,红色,绿色和蓝色各有两位.所以黑色表示为二进制000000,红色110000,蓝色000011,黄色111100等.

我必须将此颜色转换为24位rgb值,以将其传递给图形层(DirectFB).由于三个(二进制11)将变为255(0xFF),我使用以下公式,其中85(= 255/3)作为转换因子.

r = (color_6bit >> 4) * FACTOR;
g = ((color_6bit >> 2) & 0x3) * FACTOR;
b = (color_6bit & 0x3) * FACTOR;

color_32bit = (r << 16)| (g << 8) | b;
Run Code Online (Sandbox Code Playgroud)

这样可以正确转换颜色(白色[0x3F - > 0xFFFFFF],红色[0x30 - > 0xFF0000]等).

现在,这些颜色是要在电视上显示的字幕的文本和背景颜色,我们有测试流,其中嵌入了视频中的参考调色板.当我将使用此公式获得的八位颜色绘制到屏幕上时,它与视频中存在的参考颜色不完全匹配 - 它相当接近,但存在差异.

我是否正确进行转换或是否有任何标准算法将两位rgb颜色值转换为八位rgb值?DirectFB可以在内部使用一些不同的表示(如RGB565)吗?

对于它的价值,当因子85被替换为48(通过反复试验找到的值)时,颜色几乎完全匹配.

c rgb colors directfb

3
推荐指数
1
解决办法
425
查看次数