mirror of https://github.com/bjornbytes/lovr.git
Font shader;
This commit is contained in:
parent
93c286afb6
commit
8ad3e64a2d
|
@ -79,6 +79,7 @@ void lovrGraphicsInit() {
|
||||||
state.skyboxShader = lovrShaderCreate(lovrSkyboxVertexShader, lovrSkyboxFragmentShader);
|
state.skyboxShader = lovrShaderCreate(lovrSkyboxVertexShader, lovrSkyboxFragmentShader);
|
||||||
int uniformId = lovrShaderGetUniformId(state.skyboxShader, "cube");
|
int uniformId = lovrShaderGetUniformId(state.skyboxShader, "cube");
|
||||||
lovrShaderSendInt(state.skyboxShader, uniformId, 1);
|
lovrShaderSendInt(state.skyboxShader, uniformId, 1);
|
||||||
|
state.fontShader = lovrShaderCreate(lovrDefaultVertexShader, lovrFontFragmentShader);
|
||||||
state.fullscreenShader = lovrShaderCreate(lovrNoopVertexShader, lovrDefaultFragmentShader);
|
state.fullscreenShader = lovrShaderCreate(lovrNoopVertexShader, lovrDefaultFragmentShader);
|
||||||
state.defaultTexture = lovrTextureCreate(lovrTextureDataGetBlank(1, 1, 0xff, FORMAT_RGBA));
|
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) {
|
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();
|
lovrGraphicsEnsureFont();
|
||||||
lovrFontPrint(state.activeFont, str, transform, wrap, halign, valign);
|
lovrFontPrint(state.activeFont, str, transform, wrap, halign, valign);
|
||||||
|
|
||||||
|
if (lastShader == state.defaultShader) {
|
||||||
|
lovrGraphicsSetShader(lastShader);
|
||||||
|
lovrRelease(&lastShader->ref);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,7 @@ typedef struct {
|
||||||
Shader* activeShader;
|
Shader* activeShader;
|
||||||
Shader* defaultShader;
|
Shader* defaultShader;
|
||||||
Shader* skyboxShader;
|
Shader* skyboxShader;
|
||||||
|
Shader* fontShader;
|
||||||
Shader* fullscreenShader;
|
Shader* fullscreenShader;
|
||||||
Font* activeFont;
|
Font* activeFont;
|
||||||
Font* defaultFont;
|
Font* defaultFont;
|
||||||
|
|
|
@ -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 = ""
|
const char* lovrNoopVertexShader = ""
|
||||||
"vec4 position(mat4 projection, mat4 transform, vec4 vertex) { \n"
|
"vec4 position(mat4 projection, mat4 transform, vec4 vertex) { \n"
|
||||||
" return vertex; \n"
|
" return vertex; \n"
|
||||||
|
|
|
@ -36,6 +36,7 @@ extern const char* lovrDefaultVertexShader;
|
||||||
extern const char* lovrDefaultFragmentShader;
|
extern const char* lovrDefaultFragmentShader;
|
||||||
extern const char* lovrSkyboxVertexShader;
|
extern const char* lovrSkyboxVertexShader;
|
||||||
extern const char* lovrSkyboxFragmentShader;
|
extern const char* lovrSkyboxFragmentShader;
|
||||||
|
extern const char* lovrFontFragmentShader;
|
||||||
extern const char* lovrNoopVertexShader;
|
extern const char* lovrNoopVertexShader;
|
||||||
|
|
||||||
GLuint compileShader(GLuint type, const char* source);
|
GLuint compileShader(GLuint type, const char* source);
|
||||||
|
|
Loading…
Reference in New Issue