SDL не может отобразить изображение? - PullRequest
0 голосов
/ 28 марта 2019

Мой код ничего не отображает.Все, что я получаю, это окно без изображения.

#include <iostream>
#include <stdio.h>
#include <SDL2/SDL.h>

using namespace std;

SDL_Window *gWindow=NULL;
SDL_Surface *gScreenSurface=NULL;
SDL_Surface *gHelloWorld=NULL;

const int SCREEN_WIDTH=640, SCREEN_HEIGHT=480;
bool init(){
    bool success = true;

    if(SDL_Init (SDL_INIT_VIDEO) < 0 ) {
        printf("SDL could not initialize! SDL_Error : %s \n", SDL_GetError() );
        success=false;
    }
    else{
        gWindow = SDL_CreateWindow ( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
        if( gWindow == NULL ){
            printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
            success=false;
        }
        else {
            gScreenSurface = SDL_GetWindowSurface (gWindow);
        }
    }
    return success;
}

bool loadMedia(){
    bool success=true;

    gHelloWorld = SDL_LoadBMP ( "hello_world.bmp" );
    if (gHelloWorld == NULL ){
        printf( "Unable to load image %s! SDL Error: %s\n", "hello_world.bmp", SDL_GetError() );
        success=false;
    }
    return success;
}

void close(){
    SDL_FreeSurface( gHelloWorld );
    gHelloWorld=NULL;

    SDL_DestroyWindow( gWindow );
    gWindow=NULL;

    SDL_Quit();
}

int main(int argc, char* args[]){
    if(!init()){
        printf( "failed to initialize!\n" );
    }
    else {
        if( !loadMedia() ) {
            printf ("failed to laod media! \n");
        }
        else {
            SDL_BlitSurface( gHelloWorld, NULL, SDL_GetWindowSurface(gWindow), NULL );
            SDL_UpdateWindowSurface ( gWindow );
            SDL_Delay (2000);
        }
    }
    close();

Я ожидаю, что оно покажет мне изображение bmp, которое находится по пути, указанному здесь в функции loadBMP(), но все, что я получаю, это пустое прозрачное окно.

Я использую KDE Konsole, если это как-то связано с этим.

1 Ответ

1 голос
/ 28 марта 2019

KDE, а?Плазменные композиты по умолчанию;попробуйте отключить композитинг или добавьте правильный цикл обработки событий , чтобы у вашего процесса была возможность обрабатывать события перерисовки.

...