LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: gosapphire

如何使用framebuffer,在文本模式下显示图片??

[复制链接]
发表于 2005-6-23 15:16:59 | 显示全部楼层
有没有人真的搞过,怎么都是空话。服了你们了。这样的话就换论坛混了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-24 09:57:00 | 显示全部楼层
sdl了库我前一段时间就尝试了一下,但是我写了个十分简单的程序测试程序看能否在我的系统下正确运行。代码如下:
#testSDL.c
#include"SDL.h"
#include"stdlib.h"
#include"stdio.h"

int main(int argc,char * argv[])
{
    if(-1==(SDL_Init(SDL_INIT_VIDEO)))
         {
            printf("SDL cannot be initialized.\n");
         }
    printf("SDL initialized\n");
    SDL_Quit();
}

但是无论在debian .lfs下面只要执行编译好的程序,分辨率马上变成320X200,kernel2.4 2.6下也都试过了,是不是我这代码差点什么步骤啊???我发到sdl邮件列表上,也没有得到什么有用的信息~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-24 10:56:49 | 显示全部楼层
刚才刚看邮箱,一位朋友说如果只是调用SDL_Init(SDL_INIT_VIDEO)的话,可能设置分辨率到一个默认的情况下,所以应该使用一些其他的函数设置分辨率,于是我修改代码如下:
// testSDL.c
#include<SDL.h>
#include<stdlib.h>
#include<stdio.h>

int main(int argc,char *argv[])
{
        if(-1==(SDL_Init(SDL_INIT_VIDEO)))
        {
                printf("Cannot initialize video\n");
                exit(EXIT_FAILURE);
        }
        printf("video initilized success!\n");

/*        SDL_Surface *myScreen;
        myScreen = SDL_SetVideoMode(800,600,0,SDL_HWSURFACE);
        if(myScreen == NULL)
        {
                printf("Cannot set video mode to 800x600\n");
                exit(EXIT_FAILURE);
        }
        printf("set video mode to 800x600\n");
        SDL_UpdateRect(myScreen,0,0,0,0);*/
        atexit(SDL_Quit);
}

现在编译通过,但是执行后,显示“Cannot initialize video”,初始化也通不过了,然后试着注释掉SDL_SetVideoMode到SDL_UpdateRect,再编译还是无法初始化~~~~~
回复 支持 反对

使用道具 举报

发表于 2005-6-24 11:53:26 | 显示全部楼层
如果使用vesafb, 那么应用程序不能在运行时切换显示模式, sdl初始化失败也很正常. 所以要么在启动时就设置好模式, 要么使用针对显示芯片的fb, 比如i810fb, radeonfb, sisfb, ...  或者新的vesafb-tng. 觉得fb的文档少了点, 很多时候靠自己根据google上的只言片语去揣摩, 结果至今也搞不定fb的硬件加速功能, 只能用可怜巴巴的软件渲染.
回复 支持 反对

使用道具 举报

发表于 2005-6-24 12:10:47 | 显示全部楼层
Post by redfoxbsd
有没有人真的搞过,怎么都是空话。服了你们了。这样的话就换论坛混了。



realtang的代码你编译了吗? 调试了吗? 扩展了吗? 原来你混论坛是找现成答案来了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-24 13:41:12 | 显示全部楼层
Post by danath
如果使用vesafb, 那么应用程序不能在运行时切换显示模式, sdl初始化失败也很正常. 所以要么在启动时就设置好模式, 要么使用针对显示芯片的fb, 比如i810fb, radeonfb, sisfb, ...  或者新的vesafb-tng. 觉得fb的文档少了点, 很多时候靠自己根据google上的只言片语去揣摩, 结果至今也搞不定fb的硬件加速功能, 只能用可怜巴巴的软件渲染.


同感,同感,资料太少了,只好前两天在libsdl.org上下点源代码在看~~~《Linux程序设计权威指南》关于framebuffer编程也只有一小段,不过上面有个例子就是直接写屏显示图片的,介绍的实现方式跟这个页面http://www.opencjk.org/~yumj/project-unigrasp.html里的冬冬实现方式一样。

"使用vesafb,应用程序不能在运行时切换模式"----你的意思是如果我的程序需要用800x600,那么进入系统之前就应该设置为800x600???但是我上面那段小程序,开始只是初始化SDL,并没有改变模式啊,从执行的结果来看,也的确是到
if(-1==(SDL_Init(SDL_INIT_VIDEO)))
{
printf("Cannot initialize video\n");
exit(EXIT_FAILURE);
}
这里就停了。更奇怪的是前几天我编译得程序确实在运行时自动将640x480的分辨率改成了320x200,这应该算是把模式切换掉了啊~但是同一段代码,我没有做任何修改,今天上午编译运行的时候就显示不能初始化了~~~
回复 支持 反对

使用道具 举报

发表于 2005-6-24 16:57:24 | 显示全部楼层
Post by danath
realtang的代码你编译了吗? 调试了吗? 扩展了吗? 原来你混论坛是找现成答案来了.

我错了    你看看 我发帖子上边的人都在说什么  我想下手也没方向呀。最近正在研究
curses 编程,工作有太忙,能不能说的详细一点,我应该去研究那些东西 :thank
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表