Font shader;

This commit is contained in:
bjorn 2017-07-15 02:08:01 +09:00
parent 93c286afb6
commit 8ad3e64a2d
4 changed files with 27 additions and 0 deletions

View File

@ -79,6 +79,7 @@ void lovrGraphicsInit() {
state.skyboxShader = lovrShaderCreate(lovrSkyboxVertexShader, lovrSkyboxFragmentShader);
int uniformId = lovrShaderGetUniformId(state.skyboxShader, "cube");
lovrShaderSendInt(state.skyboxShader, uniformId, 1);
state.fontShader = lovrShaderCreate(lovrDefaultVertexShader, lovrFontFragmentShader);
state.fullscreenShader = lovrShaderCreate(lovrNoopVertexShader, lovrDefaultFragmentShader);
state.defaultTexture = lovrTextureCreate(lovrTextureDataGetBlank(1, 1, 0xff, FORMAT_RGBA));
@ -1029,6 +1030,17 @@ void lovrGraphicsSkybox(Skybox* skybox, float angle, float ax, float ay, float a
}
void lovrGraphicsPrint(const char* str, mat4 transform, float wrap, HorizontalAlign halign, VerticalAlign valign) {
Shader* lastShader = lovrGraphicsGetShader();
if (lastShader == state.defaultShader) {
lovrRetain(&lastShader->ref);
lovrGraphicsSetShader(state.fontShader);
}
lovrGraphicsEnsureFont();
lovrFontPrint(state.activeFont, str, transform, wrap, halign, valign);
if (lastShader == state.defaultShader) {
lovrGraphicsSetShader(lastShader);
lovrRelease(&lastShader->ref);
}
}

View File

@ -73,6 +73,7 @@ typedef struct {
Shader* activeShader;
Shader* defaultShader;
Shader* skyboxShader;
Shader* fontShader;
Shader* fullscreenShader;
Font* activeFont;
Font* defaultFont;

View File

@ -74,6 +74,19 @@ const char* lovrSkyboxFragmentShader = ""
"}"
"";
const char* lovrFontFragmentShader = ""
"float median(float r, float g, float b) { \n"
" return max(min(r, g), min(max(r, g), b)); \n"
"} \n"
"vec4 color(vec4 graphicsColor, sampler2D image, vec2 uv) { \n"
" vec3 sample = texture(image, uv).rgb; \n"
" float sdf = median(sample.r, sample.g, sample.b); \n"
" float w = fwidth(sdf); \n"
" float alpha = smoothstep(.5 - w, .5 + w, sdf); \n"
" return vec4(graphicsColor.rgb, alpha); \n"
"}"
"";
const char* lovrNoopVertexShader = ""
"vec4 position(mat4 projection, mat4 transform, vec4 vertex) { \n"
" return vertex; \n"

View File

@ -36,6 +36,7 @@ extern const char* lovrDefaultVertexShader;
extern const char* lovrDefaultFragmentShader;
extern const char* lovrSkyboxVertexShader;
extern const char* lovrSkyboxFragmentShader;
extern const char* lovrFontFragmentShader;
extern const char* lovrNoopVertexShader;
GLuint compileShader(GLuint type, const char* source);