Hello. ?I seem to be having a problem drawing a texture with an alpha channel - the alpha channel is ignored.
If I set the draw color to FF000080 and call?SDL_RenderFillRect()?then I see a red rectangle blended into the black and white rectangles already there, as I expect. ?Next, if I make a texture, fill it with the color?FF000080, and then blend it in using?SDL_RenderCopy() over?a black and white rectangle, I expect to see a result visually identical to the first. ?Instead, I see a bright red rectangle completely wiping out the black and white ones there.
I created a simple test.py to show what I mean. ?It draws once using SDL_RenderFillRect() on the left and once using SDL_RenderCopy() on the right.
I think the two draws should appear the same, not differently. ?I’m probably?missing an important line somewhere but I’m just not seeing it. ?Thanks for any help.
-Roger
import sdl2
import ctypes
sdl2.SDL_Init(sdl2.SDL_INIT_VIDEO)
window = sdl2.SDL_CreateWindow(‘test’,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sdl2.SDL_WINDOWPOS_UNDEFINED,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?sdl2.SDL_WINDOWPOS_UNDEFINED,
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?640, 480, 0)
renderer = sdl2.SDL_CreateRenderer(window, -1, sdl2.SDL_RENDERER_ACCELERATED)
sdl2.SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255) # black
sdl2.SDL_RenderClear(renderer)
sdl2.SDL_RenderPresent(renderer)
size = 32
case 1 using SDL_RenderFillRect
sdl2.SDL_SetRenderDrawBlendMode(renderer, sdl2.SDL_BLENDMODE_NONE)
r = sdl2.SDL_Rect(0, 0, size / 2, size)
sdl2.SDL_SetRenderDrawColor(renderer, 0xff, 0xff, 0xff, 0xff)
sdl2.SDL_RenderFillRect(renderer, r)
sdl2.SDL_SetRenderDrawBlendMode(renderer, sdl2.SDL_BLENDMODE_BLEND)
r = sdl2.SDL_Rect(0, 0, size, size / 2)
sdl2.SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0x80)
sdl2.SDL_RenderFillRect(renderer, r)
case 2 using SDL_RenderCopy
sdl2.SDL_SetRenderDrawBlendMode(renderer, sdl2.SDL_BLENDMODE_NONE)
r = sdl2.SDL_Rect(size * 2, 0, size / 2, size)
sdl2.SDL_SetRenderDrawColor(renderer, 0xff, 0xff, 0xff, 0xff)
sdl2.SDL_RenderFillRect(renderer, r)
texture = sdl2.SDL_CreateTexture(renderer,?
? ? sdl2.SDL_PIXELFORMAT_RGBA8888, sdl2.SDL_TEXTUREACCESS_TARGET,?
? ? size, size)
sdl2.SDL_SetRenderTarget(renderer, texture)
sdl2.SDL_SetRenderDrawBlendMode(renderer, sdl2.SDL_BLENDMODE_NONE)
sdl2.SDL_SetRenderDrawColor(renderer, 0xff, 0, 0, 0x80)
sdl2.SDL_RenderClear(renderer)
sdl2.SDL_SetRenderTarget(renderer, None)
sdl2.SDL_SetRenderDrawBlendMode(renderer, sdl2.SDL_BLENDMODE_BLEND)
r = sdl2.SDL_Rect(size * 2, 0, size, size / 2)
sdl2.SDL_RenderCopy(renderer, texture, None, r)
sdl2.SDL_RenderPresent(renderer)
while window != None:
? ? e = sdl2.SDL_Event()
? ? if sdl2.SDL_PollEvent(ctypes.byref(e)) != 0:
? ? ? ? if e.type == sdl2.events.SDL_QUIT:
? ? ? ? ? ? sdl2.SDL_DestroyWindow(window)
? ? ? ? ? ? window = None
sdl2.SDL_DestroyTexture(texture)
sdl2.SDL_DestroyRenderer(renderer)
renderer = None
sdl2.SDL_Quit()