【问题标题】:Can't set video mode for SDL screen on embedded device无法在嵌入式设备上为 SDL 屏幕设置视频模式
【发布时间】:2010-12-18 05:23:32
【问题描述】:

在过去的几天里,我一直在破解基于 ARM 的设备(飞思卡尔 i.MX27 ADS),它带有内置屏幕。该设备运行经过修改的最小 GNU/Linux 系统,没有窗口管理或图形服务器。默认情况下,该设备应该只运行它附带的一个应用程序。

我以前从未做过任何图形编程,所以这对我来说是一次学习经历。我尝试编写一个简单的 SDL 程序在设备上运行,它会读取位图,并在嵌入式设备的屏幕上显示图像。

我遇到的问题是,无论我尝试什么分辨率、深度或标志,视频模式总是无法应用,我什么也得不到。

我知道我的代码不是问题,但我还是要发布它。

#include "SDL/SDL.h"

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define SCREEN_DEPTH 24

int main(int argc, char *argv[])
{
    SDL_Surface *screen;

    if(!SDL_Init(SDL_INIT_VIDEO))
    {
            printf("Unable to initialize SDL.\n");
            return 1;
    }

    // It always fails right here
    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
    if(screen == NULL)
    {
            printf("Unable to set video mode.\n");
            return 1;
    }

    SDL_Surface* image;
    SDL_Surface* temp;

    temp = SDL_LoadBMP("hello.bmp");
    if(temp == NULL)
    {
            printf("Unable to load bitmap.\n");
            return 1;
    }

    image = SDL_DisplayFormat(temp);
    SDL_FreeSurface(temp);

    SDL_Rect src, dest;

    src.x = 0;
    src.y = 0;
    src.w = image->w;
    src.h = image->h;

    dest.x = 100;
    dest.y = 100;
    dest.w = image->w;
    dest.h = image->h;

    SDL_BlitSurface(image, &src, screen, &dest);

    printf("Program finished.\n\n");

    return 0;
}

据我所知,应该在此设备上运行的应用程序使用 Qtopia。再说一次,我是图形编程的新手,所以我不知道应该如何在这样的嵌入式环境中控制图形输出。

有什么想法吗?

【问题讨论】:

  • 是否构建 SDL 以尝试使用帧缓冲设备 (/dev/fb...)?你能用fbset设置帧缓冲吗?
  • 我想通了。未设置视频模式,因为 SDL 未正确初始化。我没有发现 SDL 没有正确初始化的事实,因为我的代码仅在 SDL_Init 返回零时才打印错误消息,而不是在 SDL 不返回零时。 SDL 未初始化,因为此设备没有 X 服务器,也没有鼠标。我设置了环境变量 SDL_NOMOUSE,它起作用了。
  • 很高兴听到您解决了自己的问题!您能否将其作为答案发布并接受并从主题中删除“已解决”,这是这里的规范。谢谢。
  • 我第二个 marcog :写一个详细的答案并接受它作为正确的答案。它可以帮助其他人。
  • 此外,一旦您的问题发布了答案,您就可以选择其中一个作为官方接受的答案。无需在标题中添加诸如“SOLVED”之类的指标。

标签: c graphics embedded arm sdl


【解决方案1】:

我的代码隐藏了问题在于初始化 SDL 而不是设置视频模式的事实。 SDL 没有初始化,因为我的嵌入式系统没有 X 服务器,也没有鼠标。设置SDL_NOMOUSE后,问题解决了。

【讨论】:

    猜你喜欢
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多