소스 검색

Fixed alpha composition when destination alpha is transparent.

Jianyu Guan

I found I make a big mistake that when dstA==0, I just simply let *dstp=*srcp and forgot to make dstRGB = srcRGB*srcA.

The if consition "(*dstp & amask) == 0" in BlitRGBtoRGBPixelAlphaMMX and BlitRGBtoRGBPixelAlphaMMX3dNow should be removed.
Sam Lantinga 12 년 전
부모
커밋
76b7b1e96c
1개의 변경된 파일2개의 추가작업 그리고 2개의 파일을 삭제
  1. 2 2
      src/video/SDL_blit_A.c

+ 2 - 2
src/video/SDL_blit_A.c

@@ -352,7 +352,7 @@ BlitRGBtoRGBPixelAlphaMMX(SDL_BlitInfo * info)
 		Uint32 alpha = *srcp & amask;
 		if (alpha == 0) {
 			/* do nothing */
-		} else if (alpha == amask || (*dstp & amask) == 0) {
+		} else if (alpha == amask) {
 			*dstp = *srcp;
 		} else {
 			src1 = _mm_cvtsi32_si64(*srcp); /* src(ARGB) -> src1 (0000ARGB)*/
@@ -545,7 +545,7 @@ BlitRGBtoRGBPixelAlphaMMX3DNOW(SDL_BlitInfo * info)
 		alpha = *srcp & amask;
 		if (alpha == 0) {
 			/* do nothing */
-		} else if (alpha == amask || (*dstp & amask) == 0) {
+		} else if (alpha == amask) {
 			*dstp = *srcp;
 		} else {
 			src1 = _mm_cvtsi32_si64(*srcp); /* src(ARGB) -> src1 (0000ARGB)*/