From 03f8528315fa46c95991a34f3325d7b33ae5538c Mon Sep 17 00:00:00 2001
From: Edward Rudd <urkle@outoforder.cc>
Date: Sat, 02 May 2020 21:48:36 +0000
Subject: [PATCH] Update source to SDL2 2.0.12
---
source/src/video/sdlgenblit.pl | 128 ++++++++++++++++++++++++++++++++++++------
1 files changed, 110 insertions(+), 18 deletions(-)
diff --git a/source/src/video/sdlgenblit.pl b/source/src/video/sdlgenblit.pl
index d89ae2a..6206ec2 100755
--- a/source/src/video/sdlgenblit.pl
+++ b/source/src/video/sdlgenblit.pl
@@ -68,8 +68,8 @@
);
my %get_rgba_string = (
- "RGB888" => $get_rgba_string_ignore_alpha{"RGB888"} . " _A = 0xFF;",
- "BGR888" => $get_rgba_string_ignore_alpha{"BGR888"} . " _A = 0xFF;",
+ "RGB888" => $get_rgba_string_ignore_alpha{"RGB888"},
+ "BGR888" => $get_rgba_string_ignore_alpha{"BGR888"},
"ARGB8888" => $get_rgba_string_ignore_alpha{"ARGB8888"} . " _A = (Uint8)(_pixel >> 24);",
"RGBA8888" => $get_rgba_string_ignore_alpha{"RGBA8888"} . " _A = (Uint8)_pixel;",
"ABGR8888" => $get_rgba_string_ignore_alpha{"ABGR8888"} . " _A = (Uint8)(_pixel >> 24);",
@@ -77,12 +77,12 @@
);
my %set_rgba_string = (
- "RGB888" => "_pixel = ((Uint32)_R << 16) | ((Uint32)_G << 8) | _B;",
- "BGR888" => "_pixel = ((Uint32)_B << 16) | ((Uint32)_G << 8) | _R;",
- "ARGB8888" => "_pixel = ((Uint32)_A << 24) | ((Uint32)_R << 16) | ((Uint32)_G << 8) | _B;",
- "RGBA8888" => "_pixel = ((Uint32)_R << 24) | ((Uint32)_G << 16) | ((Uint32)_B << 8) | _A;",
- "ABGR8888" => "_pixel = ((Uint32)_A << 24) | ((Uint32)_B << 16) | ((Uint32)_G << 8) | _R;",
- "BGRA8888" => "_pixel = ((Uint32)_B << 24) | ((Uint32)_G << 16) | ((Uint32)_R << 8) | _A;",
+ "RGB888" => "_pixel = (_R << 16) | (_G << 8) | _B;",
+ "BGR888" => "_pixel = (_B << 16) | (_G << 8) | _R;",
+ "ARGB8888" => "_pixel = (_A << 24) | (_R << 16) | (_G << 8) | _B;",
+ "RGBA8888" => "_pixel = (_R << 24) | (_G << 16) | (_B << 8) | _A;",
+ "ABGR8888" => "_pixel = (_A << 24) | (_B << 16) | (_G << 8) | _R;",
+ "BGRA8888" => "_pixel = (_B << 24) | (_G << 16) | (_R << 8) | _A;",
);
sub open_file {
@@ -92,7 +92,7 @@
/* DO NOT EDIT! This file is generated by sdlgenblit.pl */
/*
Simple DirectMedia Layer
- Copyright (C) 1997-2018 Sam Lantinga <slouken\@libsdl.org>
+ Copyright (C) 1997-2020 Sam Lantinga <slouken\@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@@ -112,6 +112,8 @@
*/
#include "../SDL_internal.h"
+#if SDL_HAVE_BLIT_AUTO
+
/* *INDENT-OFF* */
__EOF__
@@ -121,6 +123,8 @@
my $name = shift;
print FILE <<__EOF__;
/* *INDENT-ON* */
+
+#endif /* SDL_HAVE_BLIT_AUTO */
/* vi: set ts=4 sw=4 expandtab: */
__EOF__
@@ -212,6 +216,8 @@
my $dst = shift;
my $modulate = shift;
my $blend = shift;
+ my $is_modulateA_done = shift;
+ my $A_is_const_FF = shift;
my $s = "";
my $d = "";
@@ -243,7 +249,7 @@
${s}B = (${s}B * modulateB) / 255;
}
__EOF__
- if (not $ignore_dst_alpha) {
+ if (!$ignore_dst_alpha && !$is_modulateA_done) {
print FILE <<__EOF__;
if (flags & SDL_COPY_MODULATE_ALPHA) {
${s}A = (${s}A * modulateA) / 255;
@@ -252,7 +258,8 @@
}
}
if ( $blend ) {
- print FILE <<__EOF__;
+ if (!$A_is_const_FF) {
+ print FILE <<__EOF__;
if (flags & (SDL_COPY_BLEND|SDL_COPY_ADD)) {
/* This goes away if we ever use premultiplied alpha */
if (${s}A < 255) {
@@ -261,17 +268,35 @@
${s}B = (${s}B * ${s}A) / 255;
}
}
- switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD)) {
+__EOF__
+ }
+ print FILE <<__EOF__;
+ switch (flags & (SDL_COPY_BLEND|SDL_COPY_ADD|SDL_COPY_MOD|SDL_COPY_MUL)) {
case SDL_COPY_BLEND:
+__EOF__
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}R = ${s}R;
+ ${d}G = ${s}G;
+ ${d}B = ${s}B;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
${d}R = ${s}R + ((255 - ${s}A) * ${d}R) / 255;
${d}G = ${s}G + ((255 - ${s}A) * ${d}G) / 255;
${d}B = ${s}B + ((255 - ${s}A) * ${d}B) / 255;
__EOF__
-
+ }
if ( $dst_has_alpha ) {
- print FILE <<__EOF__;
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}A = 0xFF;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
${d}A = ${s}A + ((255 - ${s}A) * ${d}A) / 255;
__EOF__
+ }
}
print FILE <<__EOF__;
@@ -285,6 +310,35 @@
${d}R = (${s}R * ${d}R) / 255;
${d}G = (${s}G * ${d}G) / 255;
${d}B = (${s}B * ${d}B) / 255;
+ break;
+ case SDL_COPY_MUL:
+__EOF__
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}R = (${s}R * ${d}R) / 255;
+ ${d}G = (${s}G * ${d}G) / 255;
+ ${d}B = (${s}B * ${d}B) / 255;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
+ ${d}R = ((${s}R * ${d}R) + (${d}R * (255 - ${s}A))) / 255; if (${d}R > 255) ${d}R = 255;
+ ${d}G = ((${s}G * ${d}G) + (${d}G * (255 - ${s}A))) / 255; if (${d}G > 255) ${d}G = 255;
+ ${d}B = ((${s}B * ${d}B) + (${d}B * (255 - ${s}A))) / 255; if (${d}B > 255) ${d}B = 255;
+__EOF__
+ }
+ if ( $dst_has_alpha ) {
+ if ($A_is_const_FF) {
+ print FILE <<__EOF__;
+ ${d}A = 0xFF;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
+ ${d}A = ((${s}A * ${d}A) + (${d}A * (255 - ${s}A))) / 255; if (${d}A > 255) ${d}A = 255;
+__EOF__
+ }
+ }
+
+ print FILE <<__EOF__;
break;
}
__EOF__
@@ -306,6 +360,11 @@
my $dst_has_alpha = ($dst =~ /A/) ? 1 : 0;
my $ignore_dst_alpha = !$dst_has_alpha && !$blend;
+
+ my $src_has_alpha = ($src =~ /A/) ? 1 : 0;
+
+ my $is_modulateA_done = 0;
+ my $A_is_const_FF = 0;
output_copyfuncname("static void", $src, $dst, $modulate, $blend, $scale, 1, "\n");
print FILE <<__EOF__;
@@ -331,7 +390,25 @@
if ( $blend ) {
print FILE <<__EOF__;
Uint32 srcpixel;
+__EOF__
+ if (!$ignore_dst_alpha && !$src_has_alpha) {
+ if ($modulate){
+ $is_modulateA_done = 1;
+ print FILE <<__EOF__;
+ const Uint32 srcA = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+__EOF__
+ } else {
+ $A_is_const_FF = 1;
+ }
+ print FILE <<__EOF__;
+ Uint32 srcR, srcG, srcB;
+__EOF__
+ } else {
+ print FILE <<__EOF__;
Uint32 srcR, srcG, srcB, srcA;
+__EOF__
+ }
+ print FILE <<__EOF__;
Uint32 dstpixel;
__EOF__
if ($dst_has_alpha) {
@@ -347,7 +424,22 @@
print FILE <<__EOF__;
Uint32 pixel;
__EOF__
- if (!$ignore_dst_alpha) {
+ if (!$ignore_dst_alpha && !$src_has_alpha) {
+ if ($modulate){
+ $is_modulateA_done = 1;
+ print FILE <<__EOF__;
+ const Uint32 A = (flags & SDL_COPY_MODULATE_ALPHA) ? modulateA : 0xFF;
+__EOF__
+ } else {
+ $A_is_const_FF = 1;
+ print FILE <<__EOF__;
+ const Uint32 A = 0xFF;
+__EOF__
+ }
+ print FILE <<__EOF__;
+ Uint32 R, G, B;
+__EOF__
+ } elsif (!$ignore_dst_alpha) {
print FILE <<__EOF__;
Uint32 R, G, B, A;
__EOF__
@@ -392,7 +484,7 @@
print FILE <<__EOF__;
}
__EOF__
- output_copycore($src, $dst, $modulate, $blend);
+ output_copycore($src, $dst, $modulate, $blend, $is_modulateA_done, $A_is_const_FF);
print FILE <<__EOF__;
posx += incx;
++dst;
@@ -410,7 +502,7 @@
int n = info->dst_w;
while (n--) {
__EOF__
- output_copycore($src, $dst, $modulate, $blend);
+ output_copycore($src, $dst, $modulate, $blend, $is_modulateA_done, $A_is_const_FF);
print FILE <<__EOF__;
++src;
++dst;
@@ -465,7 +557,7 @@
}
}
if ( $blend ) {
- $flag = "SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD";
+ $flag = "SDL_COPY_BLEND | SDL_COPY_ADD | SDL_COPY_MOD | SDL_COPY_MUL";
if ( $flags eq "" ) {
$flags = $flag;
} else {
--
Gitblit v1.9.3