From 2ea0114ae2ba234f0b1b21353c88dde8335c58ac Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Mon, 7 Nov 2022 20:43:22 -0800 Subject: [PATCH] GBA Video: Ignore disabled backgrounds as OBJ blend target (fixes #2489) --- CHANGES | 1 + .../baseline_0000.png | Bin 0 -> 2190 bytes .../blend/disabled-bg-semitrans-blend/config.ini | 3 +++ .../blend/disabled-bg-semitrans-blend/test.gba | Bin 0 -> 5288 bytes src/gba/renderers/software-obj.c | 8 ++++---- 5 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 cinema/gba/blend/disabled-bg-semitrans-blend/baseline_0000.png create mode 100644 cinema/gba/blend/disabled-bg-semitrans-blend/config.ini create mode 100644 cinema/gba/blend/disabled-bg-semitrans-blend/test.gba diff --git a/CHANGES b/CHANGES index e20cf3b5b..76b3b451f 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,7 @@ Features: - Debugger: Add range watchpoints Emulation fixes: - GB Serialize: Don't write BGP/OBP when loading SCGB state (fixes mgba.io/i/2694) + - GBA Video: Ignore disabled backgrounds as OBJ blend target (fixes mgba.io/i/2489) Other fixes: - Qt: Manually split filename to avoid overzealous splitting (fixes mgba.io/i/2681) - Qt: Expand criteria for tag branch names (fixes mgba.io/i/2679) diff --git a/cinema/gba/blend/disabled-bg-semitrans-blend/baseline_0000.png b/cinema/gba/blend/disabled-bg-semitrans-blend/baseline_0000.png new file mode 100644 index 0000000000000000000000000000000000000000..f90f448c4f4370b0457759cc9891539d6d667ded GIT binary patch literal 2190 zcmcIm>pv3=8^)vOokLEMLyy)oq?V=wR*0853<;G~TB2r(%(NWBR+w{obui{^j$y?J z6XL0yGg~&&sHb8WV1M@(JbeSdW=N*6%8_MohcIAEq;bvp3!1oDBJ zil?_iz(v)etHg#&Z?#@t8!>x%e3V{s98y>ICUJ*rS641lf;nG(N`hOfVoo%b565@% zMeY}H?Zi0w`c0-kP>ybrm~v2Y=Q)5um4?OXKSS~y=|>2qfyxelY5y}~Yseq??~N+K zi&nd2po%8U0T!j>gPY@ZbKjZHS2yY8CU~IItq8@pfO5OMy>RD}c7g#1N|D z8vth^{^Y8Cw+tODIOghCmR7jVr~#^$bAjp}3BNWLdyct5-cL&R_KVg5qL$gY+LETI z_3tVP8Qe!=!nG z=dpg(VV|a#u-oyFIdp=mp@0A17BdH4oYdAI+;p)+Nf;wC;NeTQMaZpD{B~<|u;#p} zWPDwBKJ!M?y^YFlvl-vH6hSL9p8O5X$hl-Vp+T4zu1 z)TPz?bTZ691K_#|m*~h2y#)f0WSN9LltsV&_8kG0BdjOxuPYk6?7snAWm_wIEuqQy z{P@#k+={WhOs2>=6WD|aX}jy$!A$KK)kT?61f0)G?Uq%4tp7TGkb0MUfmo;erFpgn z$Su6MT@XCEFGJYFFj?q@+xw?}+w;}d0IdDWhztyi@)RSsj_nh|f0`i{FN72#@|`=c%aN8321+ zxb)Omlub83u?ZG6_V(_5?$tKjA(7{SxNOE#j<`E@-a<_w!MlJ(BD$6TwKYv@=H}{{ zUMa^N$q{*w_6?U!fr~D0S_bqrQU=>mGL7Y;fSSg=)hw;WuliM~RO?8_wLS(VhdZnZ z=0+%138~ddjbVe?R^%q0+IMzG$6Z*=M|B}Nb=izujCl0e>AmTe5_ICW-bYw=r*YMYVy%Li@u~<-hbHh0Mx3ZN>Zu1O(38+R^mNF(*6v?AnV?b$w(K&qt8?xfu05~cIc97hOv(-UeAt)<%=(V5|*%7Eu&by{uj<}udc zbqpTP5^{d-wAasuFQz4>oMtq2pdJ8}l zBZ>vL(s-za_p_7MPe&v?tB0&BmKp4QTmv%E`$cJB z0&*kk#=?iTu7l@m`QJ8^K-_y|Vg#<8SqIT`m0WwZTQlE&wz{egjgF`Zj&?KP!FM{G3vB07PIh;MEhx&n(U` zL)!9j!9n~eS{8jhcrn7(%e25;;{SB+Fa&8!9DqAHIgWjO{ht=KIcwoG#0rLMd+6&V z^bZSPwtu$zL7I<(_5e8NrGa4$7x*Wr+M4>K?+_VJ(WQqX$1~A^xO!646l`Alqo6bN zMzU1@)O0l{^6oBKx^f_)F*@!6(+T}f-;?^;UJr(;>Du@icORNzo-9Jku>FtI;lhJy z7eJta&m9UC=B=4!HYw=MJES)N1kA&ra7f^M<4KEMrJ*i}iE1Uc^fPb8b#k5UcTMU) zQvv>9pf}dfNwtVgcsWBU_NPloBIWNO<$I%(qE5S*)zHnDlH8OZkI0m`Z3Za%Xmiw+ zqst4eF(NNJ%-C<-*EbWT^4LAitoi^*RV*`A>yN@r_<;9wj5w)LTwOlp_iIffC$JEB z-^!D&0}z$=u3R}~O(U7(Zu=Ev_vqxmvd((N+cEOa&G+-l=Oad(`e&brTKKxSl=x14wuYn(n$Iad~*$vn{U+Fa6d!YaT1ZcfwPd z7{eengfr?rr%PQ-QA;^#v4Sw-f?Y?mx(WNKw>7X2je_6LC{UMD@?hH^^I*TtSpKuJ ul=W`Vir?7@aflu1dh-9LkYyeM{4VK9o!yCfak4){&dvFZ6UFgb;(r0GGD403 literal 0 HcmV?d00001 diff --git a/cinema/gba/blend/disabled-bg-semitrans-blend/config.ini b/cinema/gba/blend/disabled-bg-semitrans-blend/config.ini new file mode 100644 index 000000000..f26f6d8b1 --- /dev/null +++ b/cinema/gba/blend/disabled-bg-semitrans-blend/config.ini @@ -0,0 +1,3 @@ +[testinfo] +skip=10 +frames=1 diff --git a/cinema/gba/blend/disabled-bg-semitrans-blend/test.gba b/cinema/gba/blend/disabled-bg-semitrans-blend/test.gba new file mode 100644 index 0000000000000000000000000000000000000000..91cb67e5f614b4a906973c9741a331d7a7bae870 GIT binary patch literal 5288 zcmeHLZERa-6+YM3zH!pla<_qkySDL1w{FoOW%ox11BKojC$X2xq`p=(@o}fd7ol}q zv`VAWka{Vpa5^NqQMNRjsMR92L}RqlG9l5e7k+eu*-;9p;=?vc+CYaI%SfQPG+>@{ zZKq|6lm0+xop`0^J?EbDzUQ9jyzk9v{c)ndgetFm{;Olh{ht{=&@z0n`A6$RPmNmN z*zZ5l|Hj9@+dS3g4M!s7JGWgPc=OV|2QEyVIrz6f9+`?Z|LjQOkag?hFD@P%?%R9f zmtzkNJa^*GMRD|r;Knx}5}mIk&TJp1&KEuZtn~j&eC&H2e|_$%bx=QVZW-VGhA8aZ zK6mA~T>0r|MRgw?emk}PQ%924*LQ!bbpMafZ@Ku?_Li3)_y4BcMDH0L+n&80U(-$!qMny7Stxud(&-z>f*P^rBf>1pWw4kl|%YoitB=~@BgBF73FGKe3 z@;Ro15h`sc2W$3^KnwM_^-z>bo-(zOKLD+{ECxnepH{?a3OFt2eT(OYx?8(X_{6pi zt>1)I_=WIu=clj2YK7DLNhAi58*mI0i9Y~XXB@tb-2D71uogOOBCkn9XRw`ReSI3w zL{7&eBDo)Nkh?r-h0CYir@tQ_>h?}HJrLYS?M>&TD78DLT|G2IXM|vI$a`8iP2C(9 zambB$uBdmC+Qn&SZ*^65g%xIh3hQ`{8Qc>2gL7!or;CAL)Mo~xp@`26*|Qu7!BW*v zL4SsPCe>E8e9~v8g8}UInf_=XVzv29GxThrEowPi^|s!&=raO1m-@;9+SI$bXLBEw zddl7a>r_(8Gr>)~SAW6W81uleUUF(+-lX0>pTX7ezKdbc^0$$t*?1#JI zxJmq85LgzCc-QR>iNDWbWr#9)vhqdBT_$VcQObG9AS;u}I19WwO^h zt`(pF&rA&v_7<$o`r2vI1GLMHi%A<0f8k~FG-iUYI&WA|3MeL)7AmW#glHpsFSWE-$WNumMNjCl#p2}MnaVhgGkd1QWZ^-RW+$7 zYFw4&xS}e%WLb@)c!+_B{2CT@zyJ>==Ch>#2|RVa57&b$!C3y@*X?zljU+fqRp^ij zMl$CK1Bt<$2mFkL25R7>%Alv{s(P<3D=Kv6C~HQSvP%Q$ctTT^q#>)xK}AUps_~?u zYDQR18b&gqX$ehHG*wlwO;!~}=~87i(WR(dUX+JqO_H!j$6i7VQsPO9!$t)1I*O3E znAIUAeztl4clqPoby}d9o+}ca#W${>&6#dwhQwp20S?(nP|<@AbfK8vlgsYWU`-9g zHDgdSB&l{yXdMb)z;wBg&m&Ax2X|~WVqk)!B}tN|U9sr}{K1$iA`sqyBHJ!wrbtpD zU(~WjzG!G?a|crzu3MF-gtJdlf#Suigl&}FBaxw*+^=us`!{j^j1(|>9n92-TN@oa zYK~8&+~Xr|nm|(?LsZ5Hf*<5JU@tHVaTH+lOEnwLE~B|)nt`n`*p^01P17=lW@s+c zMJD$D$4FP7%mID{2R#a96gUK(Z9Ft{H03@zK4PXO#t>o*6ef_vcom!zd9l_;3KDUa z!1fyNW&0oZwk0z4gzdLhrw>T)V~!|Ex?Yl{3^_mM2*a{iE&ruJ|5t9H0w37^e*?L% zxWt0@X72whl3Ue@=693#|5YijwBSR~|5u{7s;|!fChq^Ma>N3&2DC`KXL3(rd>Hz_ z{cims)q<_mu}9e)6#w_P+kL!jt@q22qpcm^QcEWeMxBRpSxPA94a-veo3&tFz2RITiul2%C=4T?X13U4et~0 zc}M6-&kCJD4A6lgzyuDbXa6Bq<1KPLu^P{TSp3Yf?&d_&B=zFAsExqj!=LMCKK};0 C4c~nL literal 0 HcmV?d00001 diff --git a/src/gba/renderers/software-obj.c b/src/gba/renderers/software-obj.c index 8d67199ec..3b44d86a5 100644 --- a/src/gba/renderers/software-obj.c +++ b/src/gba/renderers/software-obj.c @@ -169,10 +169,10 @@ int GBAVideoSoftwareRendererPreprocessSprite(struct GBAVideoSoftwareRenderer* re (renderer->blendEffect == BLEND_BRIGHTEN || renderer->blendEffect == BLEND_DARKEN); if (GBAObjAttributesAGetMode(sprite->a) == OBJ_MODE_SEMITRANSPARENT || (renderer->target1Obj && renderer->blendEffect == BLEND_ALPHA) || objwinSlowPath) { int target2 = renderer->target2Bd; - target2 |= renderer->bg[0].target2; - target2 |= renderer->bg[1].target2; - target2 |= renderer->bg[2].target2; - target2 |= renderer->bg[3].target2; + target2 |= renderer->bg[0].target2 && renderer->bg[0].enabled; + target2 |= renderer->bg[1].target2 && renderer->bg[1].enabled; + target2 |= renderer->bg[2].target2 && renderer->bg[2].enabled; + target2 |= renderer->bg[3].target2 && renderer->bg[3].enabled; if (target2) { renderer->forceTarget1 = true; flags |= FLAG_REBLEND;