| 841 | } |
| 842 | |
| 843 | void MapDrawerGL::LoadFloorsTextures( const MapData& map_data ) |
| 844 | { |
| 845 | const Palette& palette= game_resources_->palette; |
| 846 | |
| 847 | const unsigned int texture_texels= MapData::c_floor_texture_size * MapData::c_floor_texture_size; |
| 848 | |
| 849 | glBindTexture( GL_TEXTURE_2D_ARRAY, floor_textures_array_id_ ); |
| 850 | glTexImage3D( |
| 851 | GL_TEXTURE_2D_ARRAY, 0, GL_RGBA8, |
| 852 | MapData::c_floor_texture_size, MapData::c_floor_texture_size, MapData::c_floors_textures_count, |
| 853 | 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr ); |
| 854 | |
| 855 | for( unsigned int t= 0u; t < MapData::c_floors_textures_count; t++ ) |
| 856 | { |
| 857 | const unsigned char* const in_data= map_data.floor_textures_data[t]; |
| 858 | |
| 859 | unsigned char texture_data[ 4u * texture_texels ]; |
| 860 | |
| 861 | for( unsigned int i= 0u; i < texture_texels; i++ ) |
| 862 | { |
| 863 | const unsigned char color_index= in_data[i]; |
| 864 | for( unsigned int j= 0u; j < 3u; j++ ) |
| 865 | texture_data[ (i << 2u) + j ]= palette[ color_index * 3u + j ]; |
| 866 | texture_data[ (i << 2u) + 3u ]= 255u; |
| 867 | } |
| 868 | |
| 869 | glTexSubImage3D( |
| 870 | GL_TEXTURE_2D_ARRAY, 0, |
| 871 | 0, 0, t, |
| 872 | MapData::c_floor_texture_size, MapData::c_floor_texture_size, 1, |
| 873 | GL_RGBA, GL_UNSIGNED_BYTE, |
| 874 | texture_data ); |
| 875 | |
| 876 | } // for textures |
| 877 | |
| 878 | if( filter_textures_ ) |
| 879 | { |
| 880 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); |
| 881 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); |
| 882 | } |
| 883 | else |
| 884 | { |
| 885 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST ); |
| 886 | glTexParameteri( GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR ); |
| 887 | } |
| 888 | |
| 889 | glGenerateMipmap( GL_TEXTURE_2D_ARRAY ); |
| 890 | } |
| 891 | |
| 892 | void MapDrawerGL::LoadWallsTextures( const MapData& map_data ) |
| 893 | { |
nothing calls this directly
no outgoing calls
no test coverage detected