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
|
|
|