public SimpleCanvas(int view_width, int view_height) { FillColor = Color.Black; StrokeColor = Color.Black; //dimension _view_width = view_width; _view_height = view_height; _max = Math.Max(view_width, view_height); //------------ //matrix ////square viewport _orthoView = MyMat4.ortho(0, _max, 0, _max, 0, 1); _flipVerticalView = MyMat4.scale(1, -1) * MyMat4.translate(new OpenTK.Vector3(0, -_max, 0)); _orthoAndFlip = _orthoView * _flipVerticalView; //----------------------------------------------------------------------- //shader _shaderRes = new CanvasToShaderSharedResource(); _shaderRes.OrthoView = _orthoView; // _fillShader = new GlyphFillShader(_shaderRes); //------------ //tools Tesselate.Tesselator tt = new Tesselate.Tesselator(); _tessTool = new TessTool(tt); _curveFlattener = new SimpleCurveFlattener(); ClearColor = Color.White; //-------- //set blend mode GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); }
public GlyphFillShader(CanvasToShaderSharedResource canvasShareResource) : base(canvasShareResource) { //---------------- //vertex shader source string vs = @" attribute vec2 a_position; uniform mat4 u_mvpMatrix; uniform vec4 u_solidColor; uniform vec2 u_2d_offset; varying vec4 v_color; void main() { gl_Position = u_mvpMatrix* vec4(a_position[0] +u_2d_offset[0],a_position[1]+ u_2d_offset[1],0,1); v_color= u_solidColor; } "; //fragment source string fs = @" precision mediump float; varying vec4 v_color; void main() { gl_FragColor = v_color; } "; if (!shaderProgram.Build(vs, fs)) { throw new NotSupportedException(); } a_position = shaderProgram.GetAttrV2f("a_position"); u_matrix = shaderProgram.GetUniformMat4("u_mvpMatrix"); u_solidColor = shaderProgram.GetUniform4("u_solidColor"); u_2d_offset = shaderProgram.GetUniform2("u_2d_offset"); }
public ShaderBase(CanvasToShaderSharedResource canvasShareResource) { _canvasShareResource = canvasShareResource; }