Я хотел бы отобразить текстуру файла BMP (light.bmp) с прозрачностью.
Я написал этот пример кода, который должен отображать bmp-текстуру «light.bmp» с прозрачностью, но на самом деле ничего не отображает:
Код: Выделить всё
#include
#include
//#include
const int WIN_WIDTH = 640;
const int WIN_HEIGHT = 480;
int main(int argc, char* argv[])
{
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
{
SDL_Log("SDL_Init failed: %s", SDL_GetError());
return 1;
}
SDL_Window* win = SDL_CreateWindow("Rendering to a texture!",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, WIN_WIDTH, WIN_HEIGHT, 0);
SDL_Renderer* renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
//Put your own bmp image here
SDL_Surface* pngSurf = SDL_LoadBMP("light.bmp"); //IMG_Load("light.png");
if (pngSurf == NULL)
{
SDL_Log("IMG_Load('light.bmp') failed: %s", SDL_GetError());
return 2;
}
SDL_Texture* pngTex = SDL_CreateTextureFromSurface(renderer, pngSurf);
SDL_FreeSurface(pngSurf);
//Make a target texture to render too
SDL_Texture* texTarget = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_TARGET, WIN_WIDTH, WIN_HEIGHT);
//Now render to the texture
SDL_SetRenderTarget(renderer, texTarget);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer, pngTex, NULL, NULL);
//Detach the texture
SDL_SetRenderTarget(renderer, NULL);
SDL_RenderClear(renderer);
//SDL_RenderCopyEx(renderer, texTarget, NULL, NULL, 0, NULL, SDL_FLIP_VERTICAL);
SDL_RenderCopy(renderer, texTarget, NULL, NULL);
SDL_RenderPresent(renderer);
SDL_Delay(3000);
SDL_DestroyTexture(texTarget);
texTarget = NULL;
SDL_DestroyTexture(pngTex);
pngTex = NULL;
SDL_DestroyRenderer(renderer);
renderer = NULL;
SDL_DestroyWindow(win);
win = NULL;
SDL_Quit();
return 0;
}
Прикрепляю файл Light.bmp:
Light.bmp с прозрачным кружком
Я ожидаю увидеть текстуру «light.bmp» с ее прозрачностью.
Подробнее здесь: https://stackoverflow.com/questions/790 ... ed-in-sdl2