MCPcopy Create free account
hub / github.com/Panzerschrek/Chasm-Reverse / LoadSprites

Method LoadSprites

PanzerChasm/client/map_drawer_gl.cpp:705–760  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

703}
704
705void 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
762void MapDrawerGL::PrepareSkyGeometry()

Callers

nothing calls this directly

Calls 1

FillAlphaTexelsColorRGBAFunction · 0.85

Tested by

no test coverage detected