相关疑难解决方法(0)

SDL2:生成完全透明的纹理

如何使用SDL_CreateTexture创建透明纹理?默认情况下我用这样的代码创建texure:

SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET, x, y);
Run Code Online (Sandbox Code Playgroud)

然后我在这个纹理上痛苦,将输出重定向到这个纹理.但是最后我想在屏幕上呈现这个(未更新的)像素是黑色的.

我尝试过使用以下方法:

 SDL_RenderClear(_Renderer);
Run Code Online (Sandbox Code Playgroud)

甚至与绘图和创建的纹理与绘画透明矩形与不同的混合模式,但我所有的结果仍然是不透明的纹理:/

   SDL_Rect rect={0,0,Width,Height};
   SDL_SetRenderDrawBlendMode(_Renderer,SDL_BLENDMODE_BLEND);
   SDL_SetRenderDrawColor(_Renderer,255,255,255,0);
   SDL_RenderFillRect(_Renderer,&rect);
Run Code Online (Sandbox Code Playgroud)

更具体:

    //this->texDefault.get()->get() = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET, x, y);
    SDL_SetRenderTarget(_Renderer.get()->get(), this->texDefault.get()->get());
    SDL_SetRenderDrawBlendMode(this->_Renderer.get()->get(),SDL_BLENDMODE_NONE);
    SDL_SetRenderDrawColor(this->_Renderer.get()->get(),255,0,255,0);
    SDL_RenderClear(this->_Renderer.get()->get());
    //SDL_Rect rect={0,0,Width,Height};
    //SDL_SetRenderDrawColor(this->_Renderer.get()->get(),255,255,255,255);
    //SDL_RenderFillRect(this->_Renderer.get()->get(),&rect);
    //SDL_RenderClear(this->_Renderer.get()->get());
    //SDL_SetRenderDrawBlendMode(this->_Renderer.get()->get(),SDL_BLENDMODE_NONE);
    SDL_SetRenderTarget(_Renderer.get()->get(), NULL);
    SDL_Rect rect= {relTop+Top,relLeft+Left,Height,Width};
    SDL_SetRenderDrawBlendMode(this->_Renderer.get()->get(),SDL_BLENDMODE_BLEND);
    SDL_RenderCopy(this->_Renderer.get()->get(), this->texDefault->get(), NULL, &rect);
Run Code Online (Sandbox Code Playgroud)

这段代码总是产生不透明的纹理,与我为混合和alpha设置的不同

结果是:

在此输入图像描述

也许还有一些其他简单的方法可以在SDL2中创建透明的空纹理,比如x/y大小的完全透明的png,但在文件中加载这样的图像有点无意义:/

c++ opengl sdl graphic

9
推荐指数
1
解决办法
9282
查看次数

标签 统计

c++ ×1

graphic ×1

opengl ×1

sdl ×1