You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
		
		
		
		
		
			
		
			
				
					
					
						
							45 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
	
	
							45 lines
						
					
					
						
							1.6 KiB
						
					
					
				| #include "../core/convert_func.hpp" | |
|  | |
| namespace gli | |
| { | |
| 	template <typename texture_type> | |
| 	inline texture_type convert(texture_type const& Texture, format Format) | |
| 	{ | |
| 		typedef float T; | |
| 		typedef typename texture::extent_type extent_type; | |
| 		typedef typename texture_type::size_type size_type; | |
| 		typedef typename extent_type::value_type component_type; | |
| 		typedef typename detail::convert<texture_type, T, defaultp>::fetchFunc fetch_type; | |
| 		typedef typename detail::convert<texture_type, T, defaultp>::writeFunc write_type; | |
| 
 | |
| 		GLI_ASSERT(!Texture.empty()); | |
| 		GLI_ASSERT(!is_compressed(Texture.format()) && !is_compressed(Format)); | |
| 
 | |
| 		fetch_type Fetch = detail::convert<texture_type, T, defaultp>::call(Texture.format()).Fetch; | |
| 		write_type Write = detail::convert<texture_type, T, defaultp>::call(Format).Write; | |
| 
 | |
| 		texture Storage(Texture.target(), Format, Texture.texture::extent(), Texture.layers(), Texture.faces(), Texture.levels(), Texture.swizzles()); | |
| 		texture_type Copy(Storage); | |
| 
 | |
| 		for(size_type Layer = 0; Layer < Texture.layers(); ++Layer) | |
| 		for(size_type Face = 0; Face < Texture.faces(); ++Face) | |
| 		for(size_type Level = 0; Level < Texture.levels(); ++Level) | |
| 		{ | |
| 			extent_type const& Dimensions = Texture.texture::extent(Level); | |
| 
 | |
| 			for(component_type k = 0; k < Dimensions.z; ++k) | |
| 			for(component_type j = 0; j < Dimensions.y; ++j) | |
| 			for(component_type i = 0; i < Dimensions.x; ++i) | |
| 			{ | |
| 				typename texture_type::extent_type const Texelcoord(extent_type(i, j, k)); | |
| 				Write( | |
| 					Copy, Texelcoord, Layer, Face, Level, | |
| 					Fetch(Texture, Texelcoord, Layer, Face, Level)); | |
| 			} | |
| 		} | |
| 
 | |
| 		return texture_type(Copy); | |
| 	} | |
| 
 | |
| }//namespace gli | |
| 
 | |
| 
 |