如何建立一个完全“空的”的Texture,也就是完全透明的,不会影响到使用SDL_RenderCopy画到上面的半透明图像的效果?
现在我做了如下的测试:
// 建立一个临时的Texture
pTempTexture =SDL_CreateTexture(pRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 500, 500);
//设置叠加模式,这里不是很明白,根据官方文档我觉得应该设置为SDL_BLENDMODE_NONE,可是这样会导致出现黑色的不透明底色
SDL_SetTextureBlendMode(pTempTexture,SDL_BLENDMODE_BLEND);
//切换渲染目标到pTempTexture
SDL_SetRenderTarget(pRenderer, pTempTexture);
// 清空Texture
SDL_SetRenderDrawColor(pRenderer, 0, 0, 0, 0);
SDL_RenderClear(pRenderer);
//复制到这个Texture
SDL_RenderCopyEx(pRenderer, pImg, NULL, &rArea, NULL, NULL, SDL_FLIP_NONE);
//渲染目标切换回默认
SDL_SetRenderTarget(pRenderer, NULL);
// 复制到屏幕缓冲
SDL_RenderCopyEx(pRenderer, pTempTexture,NULL, &rArea2, NULL, NULL, SDL_FLIP_NONE);
这样的方法会导致渲染出来的图像颜色明显偏黑;如图,左边是上面代码的效果,右边是正常的(预期的)的效果。
而如果清空临时Texture时,
使用SDL_SetRenderDrawColor(pRenderer,255, 255, 255, 0);会使图像明显偏白。
而SDL_SetRenderDrawColor(pRenderer,255, 0, 0, 0);会使图像偏红。
所以说明是清空Texture时使用的底色“漏出来”了,这个是为什么呢?
求解:是方法有什么问题?或者是颜色叠加模式的问题,或者是其他的?
现在我做了如下的测试:
// 建立一个临时的Texture
pTempTexture =SDL_CreateTexture(pRenderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 500, 500);
//设置叠加模式,这里不是很明白,根据官方文档我觉得应该设置为SDL_BLENDMODE_NONE,可是这样会导致出现黑色的不透明底色
SDL_SetTextureBlendMode(pTempTexture,SDL_BLENDMODE_BLEND);
//切换渲染目标到pTempTexture
SDL_SetRenderTarget(pRenderer, pTempTexture);
// 清空Texture
SDL_SetRenderDrawColor(pRenderer, 0, 0, 0, 0);
SDL_RenderClear(pRenderer);
//复制到这个Texture
SDL_RenderCopyEx(pRenderer, pImg, NULL, &rArea, NULL, NULL, SDL_FLIP_NONE);
//渲染目标切换回默认
SDL_SetRenderTarget(pRenderer, NULL);
// 复制到屏幕缓冲
SDL_RenderCopyEx(pRenderer, pTempTexture,NULL, &rArea2, NULL, NULL, SDL_FLIP_NONE);
这样的方法会导致渲染出来的图像颜色明显偏黑;如图,左边是上面代码的效果,右边是正常的(预期的)的效果。
而如果清空临时Texture时,
使用SDL_SetRenderDrawColor(pRenderer,255, 255, 255, 0);会使图像明显偏白。
而SDL_SetRenderDrawColor(pRenderer,255, 0, 0, 0);会使图像偏红。
所以说明是清空Texture时使用的底色“漏出来”了,这个是为什么呢?
求解:是方法有什么问题?或者是颜色叠加模式的问题,或者是其他的?