diff options
author | twinaphex | 2014-12-12 01:15:13 +0100 |
---|---|---|
committer | twinaphex | 2014-12-12 01:15:13 +0100 |
commit | f25f7472333223763a72d5548a26f1c213ba7de2 (patch) | |
tree | 4a9aaad8f286fb1d488aeaba3c37fe5d0d1005c5 | |
parent | f19051b039f56066217baddc5fedad834ebf94f0 (diff) | |
download | picogpsp-f25f7472333223763a72d5548a26f1c213ba7de2.tar.gz picogpsp-f25f7472333223763a72d5548a26f1c213ba7de2.tar.bz2 picogpsp-f25f7472333223763a72d5548a26f1c213ba7de2.zip |
And another one pt. 4
-rw-r--r-- | video.c | 128 |
1 files changed, 126 insertions, 2 deletions
@@ -1942,7 +1942,69 @@ static void render_scanline_text_transparent_color32(u32 layer, */ /* Render a single scanline of text tiles */ - tile_render(8bpp, transparent, color32); + u32 vertical_pixel_offset = (vertical_offset % 8) * + tile_width_8bpp; + u32 vertical_pixel_flip = + ((tile_size_8bpp - tile_width_8bpp) - + vertical_pixel_offset) - vertical_pixel_offset; + tile_extra_variables_8bpp(); + u8 *tile_base = vram + (((bg_control >> 2) & 0x03) * (1024 * 16)) + + vertical_pixel_offset; + u32 pixel_run = 256 - (horizontal_offset % 256); + u32 current_tile; + + map_base += ((vertical_offset % 256) / 8) * 32; + partial_tile_offset = (horizontal_offset % 8); + + if(pixel_run >= end) + { + if(partial_tile_offset) + { + partial_tile_run = 8 - partial_tile_offset; + if(end < partial_tile_run) + { + partial_tile_run = end; + partial_tile_mid_map(transparent, 8bpp, color32); + return; + } + else + { + end -= partial_tile_run; + partial_tile_right_map(transparent, 8bpp, color32); + } + } + + tile_run = end / 8; + multiple_tile_map(transparent, 8bpp, color32); + + partial_tile_run = end % 8; + + if(partial_tile_run) + { + partial_tile_left_map(transparent, 8bpp, color32); + } + } + else + { + if(partial_tile_offset) + { + partial_tile_run = 8 - partial_tile_offset; + partial_tile_right_map(transparent, 8bpp, color32); + } + + tile_run = (pixel_run - partial_tile_run) / 8; + multiple_tile_map(transparent, 8bpp, color32); + map_ptr = second_ptr; + end -= pixel_run; + tile_run = end / 8; + multiple_tile_map(transparent, 8bpp, color32); + + partial_tile_run = end % 8; + if(partial_tile_run) + { + partial_tile_left_map(transparent, 8bpp, color32); + } + } } else { @@ -1952,7 +2014,69 @@ static void render_scanline_text_transparent_color32(u32 layer, */ /* Render a single scanline of text tiles */ - tile_render(4bpp, transparent, color32); + u32 vertical_pixel_offset = (vertical_offset % 8) * + tile_width_4bpp; + u32 vertical_pixel_flip = + ((tile_size_4bpp - tile_width_4bpp) - + vertical_pixel_offset) - vertical_pixel_offset; + tile_extra_variables_4bpp(); + u8 *tile_base = vram + (((bg_control >> 2) & 0x03) * (1024 * 16)) + + vertical_pixel_offset; + u32 pixel_run = 256 - (horizontal_offset % 256); + u32 current_tile; + + map_base += ((vertical_offset % 256) / 8) * 32; + partial_tile_offset = (horizontal_offset % 8); + + if(pixel_run >= end) + { + if(partial_tile_offset) + { + partial_tile_run = 8 - partial_tile_offset; + if(end < partial_tile_run) + { + partial_tile_run = end; + partial_tile_mid_map(transparent, 4bpp, color32); + return; + } + else + { + end -= partial_tile_run; + partial_tile_right_map(transparent, 4bpp, color32); + } + } + + tile_run = end / 8; + multiple_tile_map(transparent, 4bpp, color32); + + partial_tile_run = end % 8; + + if(partial_tile_run) + { + partial_tile_left_map(transparent, 4bpp, color32); + } + } + else + { + if(partial_tile_offset) + { + partial_tile_run = 8 - partial_tile_offset; + partial_tile_right_map(transparent, 4bpp, color32); + } + + tile_run = (pixel_run - partial_tile_run) / 8; + multiple_tile_map(transparent, 4bpp, color32); + map_ptr = second_ptr; + end -= pixel_run; + tile_run = end / 8; + multiple_tile_map(transparent, 4bpp, color32); + + partial_tile_run = end % 8; + if(partial_tile_run) + { + partial_tile_left_map(transparent, 4bpp, color32); + } + } } } |