mirror of
				https://github.com/ArthurSonzogni/FTXUI.git
				synced 2025-10-31 18:48:11 +08:00 
			
		
		
		
	Optimize performance. (#189)
Screen::ApplyShader accounted for 60% of the computation. This patch optimize it. Performance on a 80x80 frame improved from 1400 draw/s to 7000 draw/s.
This commit is contained in:
		| @@ -227,21 +227,28 @@ void Screen::ApplyShader() { | |||||||
|   // Merge box characters togethers. |   // Merge box characters togethers. | ||||||
|   for (int y = 1; y < dimy_; ++y) { |   for (int y = 1; y < dimy_; ++y) { | ||||||
|     for (int x = 1; x < dimx_; ++x) { |     for (int x = 1; x < dimx_; ++x) { | ||||||
|       std::string& left = at(x - 1, y); |       // Box drawing character uses exactly 3 byte. | ||||||
|       std::string& top = at(x, y - 1); |       std::string& cur = pixels_[y][x].character; | ||||||
|       std::string& cur = at(x, y); |       if (cur.size() != 3u) | ||||||
|  |         continue; | ||||||
|  |  | ||||||
|       // Left vs current |       // Left vs current. | ||||||
|       if (cur == "│" && left == "─") cur = "┤"; |       std::string& left = pixels_[y][x-1].character; | ||||||
|       if (cur == "─" && left == "│") left = "├"; |       if (left.size() == 3u) { | ||||||
|       if (cur == "├" && left == "─") cur = "┼"; |         if (cur == "│" && left == "─") cur = "┤"; | ||||||
|       if (cur == "─" && left == "┤") left = "┼"; |         if (cur == "├" && left == "─") cur = "┼"; | ||||||
|  |         if (cur == "─" && left == "│") left = "├"; | ||||||
|  |         if (cur == "─" && left == "┤") left = "┼"; | ||||||
|  |       } | ||||||
|  |  | ||||||
|       // Top vs current |       // Top vs current. | ||||||
|       if (cur == "─" && top == "│") cur = "┴"; |       std::string& top = pixels_[y-1][x].character; | ||||||
|       if (cur == "│" && top == "─") top = "┬"; |       if (top.size() == 3u) { | ||||||
|       if (cur == "┬" && top == "│") cur = "┼"; |         if (cur == "─" && top == "│") cur = "┴"; | ||||||
|       if (cur == "│" && top == "┴") top = "┼"; |         if (cur == "┬" && top == "│") cur = "┼"; | ||||||
|  |         if (cur == "│" && top == "─") top = "┬"; | ||||||
|  |         if (cur == "│" && top == "┴") top = "┼"; | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Arthur Sonzogni
					Arthur Sonzogni