Skip to content

Instantly share code, notes, and snippets.

@matkatmusic matkatmusic/corner shaders.shad Secret
Created Mar 18, 2018

Embed
What would you like to do?
const std::map<OpenGLData::OpenGLAttributes, String> OpenGLData::OpenGLAttributesMap =
{
{OpenGLAttributes::Position, "position"}
};
const std::map<OpenGLData::OpenGLUniforms, String> OpenGLData::OpenGLUniformsMap =
{
{ OpenGLUniforms::Bounds, "bounds" },
{ OpenGLUniforms::Color1, "color1" },
{ OpenGLUniforms::Color2, "color2" }
};
#define NEW_LINE "\n"
String makeFragmentShaderHeader()
{
return "uniform vec4 " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ";" NEW_LINE
"uniform vec4 " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color1) + ";" NEW_LINE
"uniform vec4 " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color2) + ";" NEW_LINE;
}
const std::vector<std::vector<String>> FragmentShaders =
{
//linear shaders
{
//UP
{
// "uniform vec4 " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ";" NEW_LINE
// "uniform vec4 " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color1) + ";" NEW_LINE
// "uniform vec4 " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color2) + ";" NEW_LINE
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
"vec2 pos = gl_FragCoord.xy / " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".xy;" NEW_LINE
"gl_FragColor = vec4(mix(" + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color1) + ", " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color2) + ", pos.y));" NEW_LINE
"}" NEW_LINE
},
//DOWN
{
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
"vec2 pos = gl_FragCoord.xy / " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".xy;" NEW_LINE
"gl_FragColor = vec4(mix(" + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color2) + ", " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color1) + ", pos.y));" NEW_LINE
"}" NEW_LINE
},
//LEFT
{
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
"vec2 pos = gl_FragCoord.xy / " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".xy;" NEW_LINE
"gl_FragColor = vec4(mix(" + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color1) + ", " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color2) + ", pos.x));" NEW_LINE
"}" NEW_LINE
},
//RIGHT
{
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
"vec2 pos = gl_FragCoord.xy / " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".xy;" NEW_LINE
" gl_FragColor = vec4(mix(" + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color2) + ", " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Color1) + ", pos.x));" NEW_LINE
"}" NEW_LINE
},
},
//radial shaders
{
//UP from LR clockwise
/*
a |-------|b
| |
c |-------|d
*/
{
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
" float x = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".x * 1.0/sqrt(2.0);" NEW_LINE
" float y = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".y * 1.0/sqrt(2.0);" NEW_LINE
//lower right
" float alpha = distance( vec2(x,0), gl_FragCoord.xy) / distance( vec2(0,0), vec2(x,y) );" NEW_LINE
" gl_FragColor = mix (color1, color2, alpha);" NEW_LINE
"}" NEW_LINE
},
//DOWN from UL clockwise
{
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
" float x = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".x * 1.0/sqrt(2.0);" NEW_LINE
" float y = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".y * 1.0/sqrt(2.0);" NEW_LINE
" float alpha = distance( vec2(0,y), gl_FragCoord.xy) / distance( vec2(0,0), vec2(x,y) );" NEW_LINE
" gl_FragColor = mix (color1, color2, alpha);" NEW_LINE
"}" NEW_LINE
},
//LEFT from UR clockwise
{
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
" float x = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".x * 1.0/sqrt(2.0);" NEW_LINE
" float y = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".y * 1.0/sqrt(2.0);" NEW_LINE
" float alpha = distance( vec2(x,y), gl_FragCoord.xy) / distance( vec2(0,0), vec2(x,y) );" NEW_LINE
" gl_FragColor = mix (color1, color2, alpha);" NEW_LINE
"}" NEW_LINE
},
//RIGHT from LL clockwise
{
makeFragmentShaderHeader() +
"void main()" NEW_LINE
"{" NEW_LINE
"float x = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".x * 1.0/sqrt(2.0);" NEW_LINE
"float y = " + OpenGLData::OpenGLUniformsMap.at(OpenGLData::OpenGLUniforms::Bounds) + ".y * 1.0/sqrt(2.0);" NEW_LINE
//lower left:
" float alpha = distance( vec2(0,0), gl_FragCoord.xy) / distance( vec2(0,0), vec2(x,y) );" NEW_LINE
" gl_FragColor = mix (color1, color2, alpha);" NEW_LINE
"}" NEW_LINE
}
},
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.