summaryrefslogtreecommitdiff
path: root/drivers/gles2
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gles2')
-rw-r--r--drivers/gles2/rasterizer_gles2.cpp24
-rw-r--r--drivers/gles2/rasterizer_gles2.h2
-rw-r--r--drivers/gles2/shaders/material.glsl4
3 files changed, 26 insertions, 4 deletions
diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp
index ba93a26a2d..1986ddced2 100644
--- a/drivers/gles2/rasterizer_gles2.cpp
+++ b/drivers/gles2/rasterizer_gles2.cpp
@@ -5210,7 +5210,6 @@ bool RasterizerGLES2::_setup_material(const Geometry *p_geometry,const Material
material_shader.set_conditional(MaterialShaderGLES2::USE_FOG,current_env && current_env->fx_enabled[VS::ENV_FX_FOG]);
//glDepthMask( true );
-
}
@@ -8196,7 +8195,7 @@ RasterizerGLES2::Texture* RasterizerGLES2::_bind_canvas_texture(const RID& p_tex
return NULL;
}
-void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) {
+void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased) {
_bind_canvas_texture(RID());
Color c=p_color;
@@ -8208,8 +8207,18 @@ void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,
Vector3(p_to.x,p_to.y,0)
};
+#ifdef GLEW_ENABLED
+ if (p_antialiased)
+ glEnable(GL_LINE_SMOOTH);
+#endif
glLineWidth(p_width);
_draw_primitive(2,verts,0,0,0);
+
+#ifdef GLEW_ENABLED
+ if (p_antialiased)
+ glDisable(GL_LINE_SMOOTH);
+#endif
+
_rinfo.ci_draw_commands++;
}
@@ -9135,7 +9144,7 @@ void RasterizerGLES2::_canvas_item_render_commands(CanvasItem *p_item,CanvasItem
case CanvasItem::Command::TYPE_LINE: {
CanvasItem::CommandLine* line = static_cast<CanvasItem::CommandLine*>(c);
- canvas_draw_line(line->from,line->to,line->color,line->width);
+ canvas_draw_line(line->from,line->to,line->color,line->width,line->antialiased);
} break;
case CanvasItem::Command::TYPE_RECT: {
@@ -10833,6 +10842,11 @@ void RasterizerGLES2::init() {
copy_shader.set_conditional(CopyShaderGLES2::USE_GLES_OVER_GL,true);
#endif
+#ifdef ANGLE_ENABLED
+ // Fix for ANGLE
+ material_shader.set_conditional(MaterialShaderGLES2::DISABLE_FRONT_FACING, true);
+#endif
+
shadow=NULL;
shadow_pass=0;
@@ -10920,7 +10934,11 @@ void RasterizerGLES2::init() {
srgb_supported=extensions.has("GL_EXT_sRGB");
+#ifndef ANGLE_ENABLED
s3tc_srgb_supported = s3tc_supported && extensions.has("GL_EXT_texture_compression_s3tc");
+#else
+ s3tc_srgb_supported = s3tc_supported;
+#endif
latc_supported = extensions.has("GL_EXT_texture_compression_latc");
anisotropic_level=1.0;
use_anisotropic_filter=extensions.has("GL_EXT_texture_filter_anisotropic");
diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h
index c9fc0c247d..b18f89d8e7 100644
--- a/drivers/gles2/rasterizer_gles2.h
+++ b/drivers/gles2/rasterizer_gles2.h
@@ -1633,7 +1633,7 @@ public:
virtual void canvas_begin_rect(const Matrix32& p_transform);
virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect);
virtual void canvas_end_rect();
- virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width);
+ virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased);
virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate);
virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width);
diff --git a/drivers/gles2/shaders/material.glsl b/drivers/gles2/shaders/material.glsl
index e68949b056..fd778f3442 100644
--- a/drivers/gles2/shaders/material.glsl
+++ b/drivers/gles2/shaders/material.glsl
@@ -811,7 +811,11 @@ void main() {
float specular_exp=1.0;
float glow=0.0;
float shade_param=0.0;
+#ifdef DISABLE_FRONT_FACING
+ float side=float(1)*2.0-1.0;
+#else
float side=float(gl_FrontFacing)*2.0-1.0;
+#endif
#if defined(ENABLE_TANGENT_INTERP)
vec3 binormal = normalize(binormal_interp)*side;
vec3 tangent = normalize(tangent_interp)*side;