Skip to content
Snippets Groups Projects
Commit eef5e2e3 authored by DarkGod's avatar DarkGod
Browse files

text outline test

parent a0a6df90
No related branches found
No related tags found
No related merge requests found
......@@ -26,8 +26,6 @@ local Slider = require "engine.ui.Slider"
--- Module that handles message history in a mouse wheel scrollable zone
module(..., package.seeall, class.inherit(engine.ui.Base))
local shader = Shader.new("textoutline")
--- Creates the log zone
function _M:init(x, y, w, h, max, fontname, fontsize, color, bgcolor)
self.color = color or {255,255,255}
......@@ -57,7 +55,7 @@ function _M:enableShadow(v)
end
function _M:enableFading(v)
-- self.fading = v
self.fading = v
end
--- Resize the display area
......@@ -225,6 +223,7 @@ function _M:display()
return
end
local shader = Shader.new("textoutline")
function _M:toScreen()
self:display()
......@@ -248,8 +247,8 @@ function _M:toScreen()
self.dlist[i].dh = h
if self.shadow then
if shader.shad then
shader.shad:use(true)
shader.shad:paramNumber2("textSize", item._tex_w, item._tex_h)
shader.shad:use(true)
else
item._tex:toScreenFull(self.display_x+2, h+2, item.w, item.h, item._tex_w, item._tex_h, 0,0,0, self.shadow * fade)
end
......
uniform sampler2D tex;
uniform vec2 textSize;
uniform float intensity;
uniform vec2 outlineSize;
uniform vec4 outlineColor;
void main(void)
{
gl_FragColor = texture2D(tex, gl_TexCoord[0].xy);
}
\ No newline at end of file
float xOffset = outlineSize.x / textSize.x;
float yOffset = outlineSize.y / textSize.y;
gl_FragColor = texture2D(tex, gl_TexCoord[0].xy); //default text color
//sobel distance to glyph base line approximation
vec4 col02 = texture2D(tex, gl_TexCoord[0].xy + vec2(xOffset, -yOffset));
vec4 col12 = texture2D(tex, gl_TexCoord[0].xy + vec2(xOffset, 0.0 ));
vec4 col22 = texture2D(tex, gl_TexCoord[0].xy + vec2(xOffset, yOffset));
vec4 col01 = texture2D(tex, gl_TexCoord[0].xy + vec2(0.0, -yOffset));
vec4 col21 = texture2D(tex, gl_TexCoord[0].xy + vec2(0.0, yOffset));
vec4 col00 = texture2D(tex, gl_TexCoord[0].xy + vec2(-xOffset, -yOffset));
vec4 col10 = texture2D(tex, gl_TexCoord[0].xy + vec2(-xOffset, 0.0 ));
vec4 col20 = texture2D(tex, gl_TexCoord[0].xy + vec2(-xOffset, yOffset));
float xDist = 0.0 - col00.a - col01.a * 2.0 - col02.a + col20.a + col21.a * 2.0 + col22.a;
float yDist = 0.0 - col00.a + col02.a - col10.a * 2.0 + col12.a * 2.0 - col20.a + col22.a;
//transperency of current outline pixel
float alpha = min(1.0, sqrt(xDist * xDist + yDist * yDist) * intensity);
//outlineColor = vec4(0, 0, 0, 1);
//blending character glyph over its outline
gl_FragColor = gl_FragColor * gl_FragColor.a + outlineColor * alpha * (1.0 - gl_FragColor.a);
gl_FragColor.a *= gl_Color.a;
}
......@@ -23,7 +23,9 @@ return {
args = {
tex = { texture = 0 },
textSize = textSize or {1, 1},
outlineColor = outlineColor or {1,0,0,0.8},
intensity = intensity or 0.5,
outlineSize = outlineSize or {1.5, 1.5},
outlineColor = outlineColor or {0, 0, 0, 1},
},
clone = false,
}
......@@ -264,10 +264,10 @@ static GLenum sdl_gl_texture_format(SDL_Surface *s) {
// allocate memory for a texture without copying pixels in
// caller binds texture
void make_texture_for_surface(SDL_Surface *s, int *fw, int *fh) {
void make_texture_for_surface(SDL_Surface *s, int *fw, int *fh, bool clamp) {
// Paramtrage de la texture.
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, clamp ? GL_CLAMP_TO_EDGE : GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, clamp ? GL_CLAMP_TO_EDGE : GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
// get the number of channels in the SDL surface
......@@ -764,7 +764,7 @@ static font_make_texture_line(lua_State *L, SDL_Surface *s, int id, bool is_sepa
glGenTextures(1, t);
tfglBindTexture(GL_TEXTURE_2D, *t);
int fw, fh;
make_texture_for_surface(s, &fw, &fh);
make_texture_for_surface(s, &fw, &fh, true);
copy_surface_to_texture(s);
lua_pushliteral(L, "_tex_w");
......@@ -1209,7 +1209,7 @@ int init_blank_surface()
glGenTextures(1, &gl_tex_white);
tfglBindTexture(GL_TEXTURE_2D, gl_tex_white);
int fw, fh;
make_texture_for_surface(s, &fw, &fh);
make_texture_for_surface(s, &fw, &fh, false);
copy_surface_to_texture(s);
return gl_tex_white;
}
......@@ -1516,7 +1516,7 @@ static int sdl_surface_toscreen(lua_State *L)
glGenTextures(1, &t);
tfglBindTexture(GL_TEXTURE_2D, t);
make_texture_for_surface(*s, NULL, NULL);
make_texture_for_surface(*s, NULL, NULL, false);
copy_surface_to_texture(*s);
draw_textured_quad(x,y,(*s)->w,(*s)->h);
......@@ -1583,7 +1583,7 @@ static int sdl_surface_to_texture(lua_State *L)
tfglBindTexture(GL_TEXTURE_2D, *t);
int fw, fh;
make_texture_for_surface(*s, &fw, &fh);
make_texture_for_surface(*s, &fw, &fh, false);
copy_surface_to_texture(*s);
lua_pushnumber(L, fw);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment