| 703 | } |
| 704 | |
| 705 | void MapDrawerGL::LoadSprites( const std::vector<ObjSprite>& sprites, std::vector<GLuint>& out_textures ) |
| 706 | { |
| 707 | const Palette& palette= game_resources_->palette; |
| 708 | |
| 709 | std::vector<unsigned char> data_rgba; |
| 710 | |
| 711 | out_textures.resize( sprites.size() ); |
| 712 | glGenTextures( out_textures.size(), out_textures.data() ); |
| 713 | for( unsigned int i= 0u; i < out_textures.size(); i++ ) |
| 714 | { |
| 715 | const ObjSprite& sprite= sprites[i]; |
| 716 | |
| 717 | data_rgba.clear(); |
| 718 | data_rgba.resize( sprite.data.size() * 4u, 0u ); |
| 719 | |
| 720 | for( unsigned int j= 0u; j < sprite.data.size(); j++ ) |
| 721 | { |
| 722 | const unsigned char color_index= sprite.data[j]; |
| 723 | |
| 724 | unsigned char* const dst= data_rgba.data() + 4u * j; |
| 725 | |
| 726 | dst[0]= palette[ 3u * color_index + 0u ]; |
| 727 | dst[1]= palette[ 3u * color_index + 1u ]; |
| 728 | dst[2]= palette[ 3u * color_index + 2u ]; |
| 729 | dst[3]= color_index == 255u ? 0u : 255u; |
| 730 | } |
| 731 | |
| 732 | if( filter_textures_ ) |
| 733 | { |
| 734 | for( unsigned int j= 0u; j < sprite.frame_count; j++ ) |
| 735 | FillAlphaTexelsColorRGBA( |
| 736 | sprite.size[0], sprite.size[1], |
| 737 | data_rgba.data() + 4u * sprite.size[0] * sprite.size[1] * j ); |
| 738 | } |
| 739 | |
| 740 | glBindTexture( GL_TEXTURE_2D_ARRAY, out_textures[i] ); |
| 741 | glTexImage3D( |
| 742 | GL_TEXTURE_2D_ARRAY, 0, GL_RGBA8, |
| 743 | sprite.size[0], sprite.size[1], sprite.frame_count, |
| 744 | 0, GL_RGBA, GL_UNSIGNED_BYTE, data_rgba.data() ); |
| 745 | |
| 746 | if( filter_textures_ ) |
| 747 | { |
| 748 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); |
| 749 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); |
| 750 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); |
| 751 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); |
| 752 | } |
| 753 | else |
| 754 | { |
| 755 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); |
| 756 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR ); |
| 757 | } |
| 758 | glGenerateMipmap( GL_TEXTURE_2D_ARRAY ); |
| 759 | } |
| 760 | } |
| 761 | |
| 762 | void MapDrawerGL::PrepareSkyGeometry() |
nothing calls this directly
no test coverage detected