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.
		
		
		
		
		
			
		
			
				
					
					
						
							74 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							74 lines
						
					
					
						
							2.1 KiB
						
					
					
				/////////////////////////////////////////////////////////////////////////////////////////////////// | 
						|
// OpenGL Image Copyright (c) 2008 - 2011 G-Truc Creation (www.g-truc.net) | 
						|
/////////////////////////////////////////////////////////////////////////////////////////////////// | 
						|
// Created : 2008-12-19 | 
						|
// Updated : 2010-01-09 | 
						|
// Licence : This source is under MIT License | 
						|
// File    : gli/gtx/gradient.inl | 
						|
/////////////////////////////////////////////////////////////////////////////////////////////////// | 
						|
 | 
						|
namespace gli{ | 
						|
namespace gtx{ | 
						|
namespace gradient | 
						|
{ | 
						|
	inline texture2D radial | 
						|
	( | 
						|
		texture2D::dimensions_type const & Size,  | 
						|
		texture2D::texcoord_type const & Center, | 
						|
		float const & Radius, | 
						|
		texture2D::texcoord_type const & Focal | 
						|
	) | 
						|
	{ | 
						|
		image2D Result(texture2D::dimensions_type(Size), gli::RGB8U); | 
						|
		glm::u8vec3 * DstData = (glm::u8vec3 *)Result.data(); | 
						|
 | 
						|
		for(std::size_t y = 0; y < Result.dimensions().y; ++y) | 
						|
		for(std::size_t x = 0; x < Result.dimensions().x; ++x) | 
						|
		{ | 
						|
			float Value = glm::radialGradient( | 
						|
				Center * glm::vec2(Size),  | 
						|
				Radius,  | 
						|
				Focal * glm::vec2(Size), | 
						|
				glm::vec2(x, y)); | 
						|
 | 
						|
			std::size_t Index = x + y * Result.dimensions().x; | 
						|
 | 
						|
			*(DstData + Index) = glm::u8vec3(glm::u8(glm::clamp(Value * 255.f, 0.f, 255.f))); | 
						|
		} | 
						|
 | 
						|
		gli::texture2D Image(1); | 
						|
		Image[0] = Result; | 
						|
		return Image; | 
						|
	} | 
						|
 | 
						|
	inline texture2D linear | 
						|
	( | 
						|
		texture2D::dimensions_type const & Size,  | 
						|
		texture2D::texcoord_type const & Point0,  | 
						|
		texture2D::texcoord_type const & Point1 | 
						|
	) | 
						|
	{ | 
						|
		image2D Result(texture2D::dimensions_type(Size), gli::RGB8U); | 
						|
		glm::u8vec3 * DstData = (glm::u8vec3 *)Result.data(); | 
						|
 | 
						|
		for(std::size_t y = 0; y < Result.dimensions().y; ++y) | 
						|
		for(std::size_t x = 0; x < Result.dimensions().x; ++x) | 
						|
		{ | 
						|
			float Value = glm::linearGradient( | 
						|
				Point0 * glm::vec2(Size),  | 
						|
				Point1 * glm::vec2(Size), | 
						|
				texture2D::texcoord_type(x, y)); | 
						|
 | 
						|
			std::size_t Index = x + y * Result.dimensions().x; | 
						|
 | 
						|
			*(DstData + Index) = glm::u8vec3(glm::u8(glm::clamp(Value * 255.f, 0.f, 255.f))); | 
						|
		} | 
						|
 | 
						|
		gli::texture2D Image(1); | 
						|
		Image[0] = Result; | 
						|
		return Image; | 
						|
	} | 
						|
 | 
						|
}//namespace gradient | 
						|
}//namespace gtx | 
						|
}//namespace gli
 | 
						|
 |