| 90 | }; |
| 91 | |
| 92 | inline static void RenderLine(BYTE **dst, BYTE **src, int n, BYTE *tbl, DWORD mask) |
| 93 | { |
| 94 | int i; |
| 95 | |
| 96 | #ifdef NO_OVERDRAW |
| 97 | if (*dst < gpBufStart || *dst > gpBufEnd) { |
| 98 | *src += n; |
| 99 | *dst += n; |
| 100 | return; |
| 101 | } |
| 102 | #endif |
| 103 | |
| 104 | if (mask == 0xFFFFFFFF) { |
| 105 | if (light_table_index == lightmax) { |
| 106 | memset(*dst, 0, n); |
| 107 | (*src) += n; |
| 108 | (*dst) += n; |
| 109 | } else if (light_table_index == 0) { |
| 110 | memcpy(*dst, *src, n); |
| 111 | (*src) += n; |
| 112 | (*dst) += n; |
| 113 | } else { |
| 114 | for (i = 0; i < n; i++, (*src)++, (*dst)++) { |
| 115 | (*dst)[0] = tbl[(*src)[0]]; |
| 116 | } |
| 117 | } |
| 118 | } else { |
| 119 | if (light_table_index == lightmax) { |
| 120 | (*src) += n; |
| 121 | for (i = 0; i < n; i++, (*dst)++, mask <<= 1) { |
| 122 | if (mask & 0x80000000) { |
| 123 | (*dst)[0] = 0; |
| 124 | } |
| 125 | } |
| 126 | } else if (light_table_index == 0) { |
| 127 | for (i = 0; i < n; i++, (*src)++, (*dst)++, mask <<= 1) { |
| 128 | if (mask & 0x80000000) { |
| 129 | (*dst)[0] = (*src)[0]; |
| 130 | } |
| 131 | } |
| 132 | } else { |
| 133 | for (i = 0; i < n; i++, (*src)++, (*dst)++, mask <<= 1) { |
| 134 | if (mask & 0x80000000) { |
| 135 | (*dst)[0] = tbl[(*src)[0]]; |
| 136 | } |
| 137 | } |
| 138 | } |
| 139 | } |
| 140 | } |
| 141 | |
| 142 | #if defined(__clang__) || defined(__GNUC__) |
| 143 | __attribute__((no_sanitize("shift-base"))) |