Как настроить фокус ввода на свое приложение SDL2?

У меня довольно простая программа. Я просто пытаюсь признать события клавиатуры /мыши, но я не получаю никаких выходных данных журнала (внутри цикла SDL_PollEvent). Я запускаю только базовый Raspian (нет X).

#include <bcm_host.h>
#include <SDL.h>
#include <SDL_opengles2.h>
#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
    bcm_host_init();
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_DisplayMode mode;
    SDL_GetDesktopDisplayMode(0, &mode);
    cout << mode.w << 'x' << mode.h << endl;

    auto window = SDL_CreateWindow(
        "Test",
        0,
        0,
        mode.w,
        mode.h,
        SDL_WINDOW_OPENGL);
    if (!window)
    {
        cerr << "failed to make window: " << SDL_GetError() << '\n';
    }
    else
    {
        cout << "window created!\n";
        SDL_SetWindowFullscreen(window, SDL_TRUE);
        auto context = SDL_GL_CreateContext(window);
        if (context)
        {
            cout << (const char*)glGetString(GL_VERSION) << endl;
            glClearColor(0.0f, 0.5f, 0.5f, 1.0f);
            SDL_Event event;
            bool running = true;
            int n = 0;
            while (running && n < 10)
            {
                glClear(GL_COLOR_BUFFER_BIT);
                SDL_GL_SwapWindow(window);
                cout << "pulse " << ++n << endl;
                while (SDL_PollEvent(&event))
                {
                    cout << "EVENT" << endl;
                    if (event.type == SDL_MOUSEMOTION) cout << "mouse move" << endl;
                    if (event.type == SDL_MOUSEBUTTONDOWN ||
                        event.type == SDL_KEYDOWN) running = false;
                }
                SDL_Delay(500);
            }
            SDL_GL_DeleteContext(context);
        }
        else
        {
            cerr << "failed to make context: " << SDL_GetError() << '\n';
        }
        SDL_DestroyWindow(window);
    }
    SDL_Quit();
    return 0;
}

Я попытался испортить флаги, переданные в SDL_CreateWindow (например, SDL_WINDOW_INPUT_FOCUS и SDL_WINDOW_MOUSE_FOCUS) без везения. OpenGL работает просто отлично: я получаю свой цветной экран (и даже видимый указатель мыши в верхнем левом углу).

3 голоса | спросил TheBuzzSaw 11 Jam1000000amMon, 11 Jan 2016 02:32:20 +030016 2016, 02:32:20

1 ответ


3

Убедитесь, что установлены файлы разработки libudev.

sudo apt-get install libudev-dev

Затем переустановите и переустановите SDL 2. Вход для мыши /клавиатуры начал работать для меня после того, как я это сделал.

ответил Josh 17 Jam1000000amSun, 17 Jan 2016 00:57:46 +030016 2016, 00:57:46

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132