【问题标题】:Use root X11 window as the main SDL2 window使用根 X11 窗口作为 SDL2 主窗口
【发布时间】:2015-12-22 22:55:08
【问题描述】:

我试图让 SDL2 使用根 X 窗口来显示内容,但它似乎不起作用 - 窗口不会以任何方式改变。此外,由于某种原因,整个程序在SDL_Delay() 之后并没有退出。不可能吗?我做错了吗?

#include <SDL.h>

#include <X11/Xlib.h>

#include <stdio.h>

// clang -lSDL2 -lX11 -I/usr/include/SDL2 -Weverything x11.c -o x11

int main(void)
{
    Display *x11_d;
    int x11_s;
    Window x11_w;
    SDL_Window *w;
    SDL_Renderer *r;

    x11_d = XOpenDisplay(NULL);

    if(!x11_d) {
        fprintf(stderr, "couldn't open display\n");
        return 1;
    }

    x11_s = DefaultScreen(x11_d);
    x11_w = RootWindow(x11_d, x11_s);

    if(SDL_Init(SDL_INIT_VIDEO) != 0) {
        fprintf(stderr, "couldn't initialize SDL: %s\n", SDL_GetError());
        return 1;
    }

    w = SDL_CreateWindowFrom((void *)x11_w);

    XCloseDisplay(x11_d);

    if(!w) {
        fprintf(stderr, "couldn't attach to the root X11 window: %s\n", SDL_GetError());
        return 1;
    }

    r = SDL_CreateRenderer(w, -1, 0);

    SDL_SetRenderDrawColor(r, 255, 0, 0, 255);
    SDL_RenderClear(r);
    SDL_RenderPresent(r);

    SDL_Delay(5700);

    SDL_Quit();
    return 0;
}

【问题讨论】:

    标签: c x11 sdl-2 xlib


    【解决方案1】:

    您在创建 SDL 窗口后立即关闭 X 显示,因此您失去了连接。这显然没有帮助,但你也 left out about 95% of the code required to get X working。教程here.

    【讨论】:

    • 我正在尝试使用尽可能少的 Xlib,仅够获得根窗口,将其传递给 SDL_CreateWindowFrom() 并将其余部分留给 SDL。除了过早关闭显示器之外,我的代码究竟是什么?创建 X 事件循环似乎没有任何改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多