implementing color wheel and new color picker
This commit is contained in:
@@ -180,11 +180,47 @@ void App::initShaders()
|
||||
"uniform mediump vec4 col;"
|
||||
"in mediump vec3 uv;"
|
||||
"out mediump vec4 frag;"
|
||||
"void main(){"
|
||||
" mediump vec4 gradient_x = mix(col, vec4(1.0, 1.0, 1.0, 1.0), uv.x);"
|
||||
" frag = mix(gradient_x, vec4(0.0, 0.0, 0.0, 1.0), uv.y);"
|
||||
"mediump vec3 rgb2hsv(mediump vec3 c) {"
|
||||
" mediump vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);"
|
||||
" mediump vec4 p = mix(vec4(c.bg, k.wz), vec4(c.gb, k.xy), step(c.b, c.g));"
|
||||
" mediump vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));"
|
||||
" mediump float d = q.x - min(q.w, q.y);"
|
||||
" mediump float e = 1.0e-10;"
|
||||
" return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);"
|
||||
"}"
|
||||
"mediump vec3 hsv2rgb(mediump vec3 c) {"
|
||||
" mediump vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);"
|
||||
" mediump vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);"
|
||||
" return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);"
|
||||
"}"
|
||||
"void main() {"
|
||||
" mediump float hue = rgb2hsv(col.rgb).x;"
|
||||
" frag = vec4(hsv2rgb(vec3(hue, uv.x, 1.0 - uv.y)), 1.0);"
|
||||
"}";
|
||||
|
||||
// COLOR TRI
|
||||
static const char* shader_color_tri_f =
|
||||
SHADER_VERSION
|
||||
"uniform mediump vec4 col;" // in HSV
|
||||
"in mediump vec3 uv;"
|
||||
"out mediump vec4 frag;"
|
||||
"mediump vec3 rgb2hsv(mediump vec3 c) {"
|
||||
" mediump vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);"
|
||||
" mediump vec4 p = mix(vec4(c.bg, k.wz), vec4(c.gb, k.xy), step(c.b, c.g));"
|
||||
" mediump vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));"
|
||||
" mediump float d = q.x - min(q.w, q.y);"
|
||||
" mediump float e = 1.0e-10;"
|
||||
" return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);"
|
||||
"}"
|
||||
"mediump vec3 hsv2rgb(mediump vec3 c) {"
|
||||
" mediump vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);"
|
||||
" mediump vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);"
|
||||
" return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);"
|
||||
"}"
|
||||
"void main() {"
|
||||
" mediump float sat = tan(atan(uv.y, uv.x)) *.5 + .5;"
|
||||
" frag = vec4(hsv2rgb(vec3(col.r, sat, uv.x)), 1.0);"
|
||||
"}";
|
||||
|
||||
// HUE
|
||||
static const char* shader_color_hue_v =
|
||||
SHADER_VERSION
|
||||
@@ -199,15 +235,24 @@ void App::initShaders()
|
||||
static const char* shader_color_hue_f =
|
||||
SHADER_VERSION
|
||||
"uniform mediump vec4 col;"
|
||||
"uniform bool dir;" // 0:horizontal, 1:vertical
|
||||
"in mediump vec3 uv;"
|
||||
"out mediump vec4 frag;"
|
||||
"mediump vec3 rgb2hsv(mediump vec3 c) {"
|
||||
" mediump vec4 k = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);"
|
||||
" mediump vec4 p = mix(vec4(c.bg, k.wz), vec4(c.gb, k.xy), step(c.b, c.g));"
|
||||
" mediump vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));"
|
||||
" mediump float d = q.x - min(q.w, q.y);"
|
||||
" mediump float e = 1.0e-10;"
|
||||
" return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);"
|
||||
"}"
|
||||
"mediump vec3 hsv2rgb(mediump vec3 c) {"
|
||||
" mediump vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);"
|
||||
" mediump vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);"
|
||||
" return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);"
|
||||
"}"
|
||||
"void main(){"
|
||||
" frag = vec4(hsv2rgb(vec3(uv.y, 1.0, 1.0)), 1.0);"
|
||||
" frag = vec4(hsv2rgb(vec3(dir?uv.y:uv.x, 1.0, 1.0)), 1.0);"
|
||||
"}";
|
||||
|
||||
// FONT
|
||||
@@ -373,6 +418,27 @@ void App::initShaders()
|
||||
" frag = vec4(col.rgb, a);"
|
||||
"}";
|
||||
|
||||
// VERTEX COLOR
|
||||
static const char* shader_vertcol_v =
|
||||
SHADER_VERSION
|
||||
"uniform mat4 mvp;"
|
||||
"in vec4 pos;"
|
||||
"in vec4 col;"
|
||||
"out vec4 c;"
|
||||
"void main(){"
|
||||
" c = col;"
|
||||
" gl_Position = mvp * pos;"
|
||||
" gl_PointSize = 5.0;"
|
||||
"}";
|
||||
static const char* shader_vertcol_f =
|
||||
SHADER_VERSION
|
||||
"in mediump vec4 c;"
|
||||
"out mediump vec4 frag;"
|
||||
"void main(){"
|
||||
" frag = c;"
|
||||
"}";
|
||||
|
||||
|
||||
LOG("initializing shaders");
|
||||
if (!ShaderManager::create(kShader::Texture, shader_v, shader_f))
|
||||
LOG("Failed to create shader Texture");
|
||||
@@ -388,6 +454,8 @@ void App::initShaders()
|
||||
LOG("Failed to create shader Color");
|
||||
if (!ShaderManager::create(kShader::ColorQuad, shader_color_quad_v, shader_color_quad_f))
|
||||
LOG("Failed to create shader ColorQuad");
|
||||
if (!ShaderManager::create(kShader::ColorTri, shader_color_quad_v, shader_color_tri_f))
|
||||
LOG("Failed to create shader ColorTri");
|
||||
if (!ShaderManager::create(kShader::ColorHue, shader_color_hue_v, shader_color_hue_f))
|
||||
LOG("Failed to create shader ColorHue");
|
||||
if (!ShaderManager::create(kShader::UVs, shader_v, shader_uv_f))
|
||||
@@ -404,6 +472,8 @@ void App::initShaders()
|
||||
LOG("Failed to create shader Equirect");
|
||||
if (!ShaderManager::create(kShader::BrushStroke, shader_stroke_inst_v, shader_stroke_inst_f))
|
||||
LOG("Failed to create shader BrushStroke");
|
||||
if (!ShaderManager::create(kShader::VertexColor, shader_vertcol_v, shader_vertcol_f))
|
||||
LOG("Failed to create shader VertexColor");
|
||||
LOG("shaders initialized");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user