Skip to content

Instantly share code, notes, and snippets.

@Creta5164
Last active October 26, 2017 03:35
Show Gist options
  • Save Creta5164/e5d3e83f0c2afb08295965a0a4498e69 to your computer and use it in GitHub Desktop.
Save Creta5164/e5d3e83f0c2afb08295965a0a4498e69 to your computer and use it in GitHub Desktop.
MSDF_shader_for_GameMakerStudio.fsh
//전처리 지시를 해야 합니다,
#ifdef GL_OES_standard_derivatives
#extension GL_OES_standard_derivatives : enable
// code that requires the extension
#else
// alternative code
#endif
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
uniform float pxRange; //최적의 값은 5입니다, 음수값으로 설정하면 배경색과 전경색을 반전시킬 수 있습니다.
uniform vec4 bgColor, fgColor; //배경 색과 전경 색입니다, r g b a순으로 지정하시면 됩니다.
uniform vec2 textureDem; //게임메이커 스튜디오가 textureSize 함수를 지원하지 않으므로, 직접 수동으로 텍스쳐 크기를 입력해야합니다.
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IMPORTANT!! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//텍스쳐 필터 모드로 색상 보간을 활성화해야합니다.
//운영체제 플랫폼 설정에서 Interpolate colours between pixels를 꼭 활성화 해야 함.
//안 그러면 보간 꼼수를 사용하는 이 셰이더는 픽셀화로 보여주게 됩니다. 꼭 진짜 안하면 벡터처럼 보이지 않음.
float median(float r, float g, float b) {
return max(min(r, g), min(max(r, g), b));
}
void main()
{
vec2 msdfUnit = pxRange/textureDem; //textureSize 함수를 지원하지 않습니다.
//uniform으로 직접 입력해야 함.
//으어어ㅓ어
vec3 t = (v_vColour * texture2D(gm_BaseTexture, v_vTexcoord)).rgb;
float sigDist = median(t.r, t.g, t.b) - 0.5;
sigDist *= dot(msdfUnit, 0.5 / fwidth(v_vTexcoord));
float opacity = clamp(sigDist + 0.5, 0.0, 1.0);
gl_FragColor = mix(bgColor, fgColor, opacity);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment