如何使用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,但在文件中加载这样的图像有点无意义:/