SDL: блин BMP на поверхность окна черный экран тайна - PullRequest
0 голосов
/ 27 января 2019

Я написал следующий код, чтобы загрузить изображение BMP как поверхность и затем перетащить это изображение в окно:

#include "stdafx.h"
#include "SDL.h"
#include <iostream>

int main(int argc, char *argv[])
{
    //init
    SDL_Init(SDL_INIT_VIDEO);
    SDL_Window* window = SDL_CreateWindow("Playground", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 500, 500, 0);
    std::cout << SDL_GetError() << std::endl;
    SDL_Surface* surface = SDL_GetWindowSurface(window);

    //load file and convert to texture
    SDL_Surface* bmp = SDL_LoadBMP("sample.bmp");
    std::cout << SDL_GetError() << std::endl;

    //render texture
    SDL_Rect area;
    area.x, area.y = 3;
    area.h, area.w = 25;
    SDL_BlitSurface(bmp, &area, surface, &area);
    std::cout << SDL_GetError() << std::endl;
    SDL_UpdateWindowSurface(window);
    std::cout << SDL_GetError() << std::endl;
    SDL_Delay(3000);

    //clean up
    SDL_FreeSurface(bmp);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

Когда я нажимаю клавишу F5 (я работаю в Visual Studio Express 2017) для создания и запуска программы, созданная программа запускается, создает окно, а затем окно остается полностью черным во время выполнения программы.Я не получаю сообщений об ошибках от VS, SDL_GetError () или Windows.Кажется, нет никаких проблем, но изображение просто теряется где-то, кажется.Кто-нибудь сможет мне помочь?

PS Вот bmp, который я пытаюсь отобразить:

the bmp I am trying to display

1 Ответ

0 голосов
/ 27 января 2019

Этот код не делает то, что вы думаете, он делает:

area.x, area.y = 3;
area.h, area.w = 25;

Вы должны изменить его на

area.x = area.y = 3;
area.h = area.w = 25;

, чтобы иметь несколько назначений.Или, что еще лучше, просто инициализируйте SDL_Rect inline:

SDL_Rect area = { 3, 3, 25, 25 };
...