//-------------------------------- bool LoadShaders() { //-------------------------------------- //create shader program shaderProgram = new MiniShaderProgram(); //-------------------------------------- string vs = @" attribute vec3 a_position; attribute vec4 a_color; uniform mat4 u_mvpMatrix; uniform vec4 u_solidColor; uniform int u_useSolidColor; varying vec4 v_color; varying vec4 a_position_output; void main() { a_position_output = u_mvpMatrix* vec4(a_position[0],a_position[1],0,1); gl_Position = a_position_output; v_color= vec4(1,0,0,1); } "; //fragment source // string fs = @"void main() // { // gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); // } // "; string fs = @" precision mediump float; varying vec4 v_color; varying vec4 a_position_output; void main() { if(a_position_output[1]>0.5){ gl_FragColor = vec4(0,1,1,1); }else{ gl_FragColor= vec4(0,1,0,1); } } "; if (!shaderProgram.Build(vs, fs)) { throw new NotSupportedException(); } a_position = shaderProgram.GetAttrV3f("a_position"); a_color = shaderProgram.GetAttrV4f("a_color"); u_matrix = shaderProgram.GetUniformMat4("u_mvpMatrix"); u_useSolidColor = shaderProgram.GetUniform1("u_useSolidColor"); u_solidColor = shaderProgram.GetUniform4("u_solidColor"); return(true); }
protected override void OnInitGLProgram(object sender, EventArgs handler) { shaderProgram = new MiniShaderProgram(); string vs = @" attribute vec3 a_position; attribute vec2 a_texCoord; varying vec2 v_texCoord; void main() { gl_Position = vec4(a_position[0],a_position[1],0,1); v_texCoord = a_texCoord; } "; string fs = @" precision mediump float; varying vec2 v_texCoord; uniform sampler2D s_texture; void main() { gl_FragColor = texture2D(s_texture, v_texCoord); } "; if (!shaderProgram.Build(vs, fs)) { } //------------------------------------------- // Get the attribute locations a_position = shaderProgram.GetAttrV3f("a_position");// GL.GetAttribLocation(mProgram, "a_position"); a_textCoord = shaderProgram.GetAttrV2f("a_texCoord"); // Get the sampler location s_texture = shaderProgram.GetUniform1("s_texture"); //// Load the texture mTexture = ES2Utils2.CreateSimpleTexture2D(); GL.ClearColor(0, 0, 0, 0); //================================================================================ }
protected override void OnInitGLProgram(object sender, EventArgs args) { string vs = @" attribute vec4 a_position; attribute vec4 a_color; uniform mat4 u_mvpMatrix; uniform vec4 u_solidColor; uniform int u_useSolidColor; uniform float u_linewidth; varying vec4 v_color; varying float v_distance; varying float p0; void main() { float rad = a_position[3]; v_distance= a_position[2]; float n_x = sin(rad); float n_y = cos(rad); vec4 delta; if(v_distance <1.0){ delta = vec4(-n_x * u_linewidth,n_y * u_linewidth,0,0); }else{ delta = vec4(n_x * u_linewidth,-n_y * u_linewidth,0,0); } if(u_linewidth <= 0.5){ p0 = 0.5; }else if(u_linewidth <=1.0){ p0 = 0.45; }else if(u_linewidth>1.0 && u_linewidth<3.0){ p0 = 0.25; }else{ p0= 0.1; } vec4 pos = vec4(a_position[0],a_position[1],0,1) + delta; gl_Position = u_mvpMatrix* pos; if(u_useSolidColor !=0) { v_color= u_solidColor; } else { v_color = a_color; } } "; //fragment source string fs = @" precision mediump float; varying vec4 v_color; varying float v_distance; varying float p0; void main() { float d0= v_distance; float p1= 1.0-p0; float factor= 1.0 /p0; if(d0 < p0){ gl_FragColor =vec4(v_color[0],v_color[1],v_color[2], v_color[3] *(d0 * factor)); }else if(d0> p1){ gl_FragColor =vec4(v_color[0],v_color[1],v_color[2], v_color[3] *((1.0-d0)* factor)); } else{ gl_FragColor =v_color; } } "; if (!shaderProgram.Build(vs, fs)) { throw new NotSupportedException(); } a_position = shaderProgram.GetVtxAttrib("a_position"); a_color = shaderProgram.GetVtxAttrib("a_color"); u_matrix = shaderProgram.GetUniformMat4("u_mvpMatrix"); u_useSolidColor = shaderProgram.GetUniform1("u_useSolidColor"); u_solidColor = shaderProgram.GetUniform4("u_solidColor"); u_linewidth = shaderProgram.GetUniform1("u_linewidth"); //-------------------------------------------------------------------------------- GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.ClearColor(1, 1, 1, 1); //setup viewport size int max = Math.Max(this.Width, this.Height); //square viewport GL.Viewport(0, 0, max, max); orthoView = MyMat4.ortho(0, max, 0, max, 0, 1); //-------------------------------------------------------------------------------- //load image }
public void InitShader() { if (isInited) { return; } //---------------- //vertex shader source string vs = @" attribute vec3 a_position; attribute vec4 a_color; attribute vec2 a_texcoord; uniform mat4 u_mvpMatrix; uniform vec4 u_solidColor; uniform int u_useSolidColor; uniform int u_useAggColor; varying vec4 v_color; varying vec2 v_texcoord; void main() { float a= a_position[2]; //before matrix op gl_Position = u_mvpMatrix* vec4(a_position[0],a_position[1],0,1); if(u_useAggColor !=0) { v_color= vec4(u_solidColor.r /255.0,u_solidColor.g /255.0,u_solidColor.b/255.0, a/255.0); } else if(u_useSolidColor !=0) { v_color= u_solidColor; } else { v_color = a_color; } v_texcoord= a_texcoord; } "; //fragment source string fs = @" precision mediump float; varying vec4 v_color; varying vec2 v_texcoord; void main() { gl_FragColor= v_color; } "; if (!shaderProgram.Build(vs, fs)) { throw new NotSupportedException(); } a_position = shaderProgram.GetVtxAttrib("a_position"); a_color = shaderProgram.GetVtxAttrib("a_color"); a_textureCoord = shaderProgram.GetVtxAttrib("a_texcoord"); u_matrix = shaderProgram.GetUniformMat4("u_mvpMatrix"); u_useSolidColor = shaderProgram.GetUniform1("u_useSolidColor"); u_useAggColor = shaderProgram.GetUniform1("u_useAggColor"); u_solidColor = shaderProgram.GetUniform4("u_solidColor"); shaderProgram.UseProgram(); isInited = true; }
protected override void OnReadyForInitGLShaderProgram() { //---------------- //vertex shader source string vs = @" precision mediump float; attribute vec2 a_position; attribute vec3 a_color; attribute vec2 a_texcoord; uniform mat4 u_mvpMatrix; uniform vec4 u_solidColor; uniform int u_useSolidColor; varying vec4 v_color; varying vec2 v_texcoord; void main() { gl_Position = u_mvpMatrix* vec4(a_position[0],a_position[1],0.0,1.0); if(u_useSolidColor !=0) { v_color= u_solidColor; } else { v_color = vec4(a_color,1.0); } v_texcoord= a_texcoord; } "; //fragment source string fs = @" precision mediump float; varying vec4 v_color; varying vec2 v_texcoord; void main() { //gl_FragColor = vec4(1,v_texcoord.y,0,1); gl_FragColor= v_color; } "; if (!shaderProgram.Build(vs, fs)) { throw new NotSupportedException(); } a_position = shaderProgram.GetAttrV2f("a_position"); a_color = shaderProgram.GetAttrV3f("a_color"); a_textureCoord = shaderProgram.GetAttrV2f("a_texcoord"); u_matrix = shaderProgram.GetUniformMat4("u_mvpMatrix"); u_useSolidColor = shaderProgram.GetUniform1("u_useSolidColor"); u_solidColor = shaderProgram.GetUniform4("u_solidColor"); //-------------------------------------------------------------------------------- GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.ClearColor(1, 1, 1, 1); //setup viewport size int max = Math.Max(this.Width, this.Height); //square viewport GL.Viewport(0, 0, max, max); orthoView = MyMat4.ortho(0, max, 0, max, 0, 1); //-------------------------------------------------------------------------------- //load image }
public static void Start() { if (!Glfw.Init()) { Console.WriteLine("can't init glfw"); return; } //--------------------------------------------------- //at this, point no opengl func binding //--------------------------------------------------- //1. we specific which verision we want, //here => OpenGLES 2.0 Glfw.WindowHint(WindowHint.GLFW_CLIENT_API, (int)OpenGLAPI.OpenGLESAPI); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_CREATION_API, (int)OpenGLContextCreationAPI.GLFW_EGL_CONTEXT_API); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MAJOR, 3); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MINOR, 0); //--------------------------------------------------- OpenTK.Platform.Factory.GetCustomPlatformFactory = () => OpenTK.Platform.Egl.EglAngle.NewFactory(); OpenTK.Toolkit.Init(new OpenTK.ToolkitOptions { Backend = OpenTK.PlatformBackend.PreferNative, }); OpenTK.Graphics.PlatformAddressPortal.GetAddressDelegate = OpenTK.Platform.Utilities.CreateGetAddress(); GlfwMonitorPtr monitor = new GlfwMonitorPtr(); //default monitor GlfwWindowPtr winPtr = new GlfwWindowPtr(); //default window GlfwWindowPtr glWindow = Glfw.CreateWindow(800, 600, "Test Glfw", monitor, winPtr); /* Make the window's context current */ Glfw.MakeContextCurrent(glWindow); Glfw.SwapInterval(1); GlfwWindowPtr currentContext = Glfw.GetCurrentContext(); var contextHandler = new OpenTK.ContextHandle(currentContext.inner_ptr); //faster: create external context var glfwContext = new GLFWContextForOpenTK(contextHandler); var context = OpenTK.Graphics.GraphicsContext.CreateExternalContext(glfwContext); //--------------------------- //slow ... use create dummy context //var context = OpenTK.Graphics.GraphicsContext.CreateDummyContext(contextHandler); //and you need to load gles2 binding points manaually (below) bool isCurrent = context.IsCurrent; PixelFarm.GlfwWinInfo winInfo = new PixelFarm.GlfwWinInfo(glWindow); context.MakeCurrent(winInfo); //-------------------------------------- //bind open gl funcs here.. //this not need if we use glfwcontext for opentk //new OpenTK.Graphics.ES20.GL().LoadEntryPoints(); //-------------------------------------- //create shader program var shaderProgram = new MiniShaderProgram(); //-------------------------------------- ShaderVtxAttrib3f a_position; ShaderVtxAttrib4f a_color; ShaderUniformMatrix4 u_matrix; ShaderUniformVar1 u_useSolidColor; ShaderUniformVar4 u_solidColor; MyMat4 orthoView; string vs = @" attribute vec3 a_position; attribute vec4 a_color; uniform mat4 u_mvpMatrix; uniform vec4 u_solidColor; uniform int u_useSolidColor; varying vec4 v_color; varying vec4 a_position_output; void main() { a_position_output = u_mvpMatrix* vec4(a_position[0],a_position[1],0,1); gl_Position = a_position_output; v_color= vec4(1,0,0,1); } "; //fragment source // string fs = @"void main() // { // gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); // } // "; string fs = @" precision mediump float; varying vec4 v_color; varying vec4 a_position_output; void main() { if(a_position_output[1]>0.5){ gl_FragColor = vec4(0,1,1,1); }else{ gl_FragColor= vec4(0,1,0,1); } } "; if (!shaderProgram.Build(vs, fs)) { throw new NotSupportedException(); } a_position = shaderProgram.GetAttrV3f("a_position"); a_color = shaderProgram.GetAttrV4f("a_color"); u_matrix = shaderProgram.GetUniformMat4("u_mvpMatrix"); u_useSolidColor = shaderProgram.GetUniform1("u_useSolidColor"); u_solidColor = shaderProgram.GetUniform4("u_solidColor"); //-------------------------------------------------------------------------------- GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.ClearColor(1, 1, 1, 1); //setup viewport size int ww_w = 800; int ww_h = 600; int max = Math.Max(ww_w, ww_h); //square viewport GL.Viewport(0, 0, max, max); orthoView = MyMat4.ortho(0, max, 0, max, 0, 1); //-------------------------------------------------------------------------------- //load image /* Loop until the user closes the window */ //int width, height; //Glfw.GetFramebufferSize(glWindow, out width, out height); //float ratio = (float)width / (float)height; GL.Viewport(0, 0, 800, 600); shaderProgram.UseProgram(); while (!Glfw.WindowShouldClose(glWindow)) { //set clear color to white GL.ClearColor(1f, 1, 1, 1); GL.Clear(ClearBufferMask.ColorBufferBit); //--------------------------------- //--------------------------------------------------------- u_matrix.SetData(orthoView.data); //--------------------------------------------------------- //DrawLines(0, 0, 300, 300); float x1 = 50, y1 = 20, x2 = 300, y2 = 20; float[] vtxs = new float[] { x1, y1, 1, x2, y2, 1, 50, 300, 1 }; u_useSolidColor.SetValue(1); u_solidColor.SetValue(1f, 0f, 0f, 1f);//use solid color a_position.LoadPureV3f(vtxs); GL.DrawArrays(BeginMode.Triangles, 0, 3); //--------------------------------------------------------- //GL.MatrixMode(MatrixMode.Modelview); //GL.LoadIdentity(); //GL.Begin(BeginMode.Triangles); //GL.Color3(1f, 0, 0); //GL.Vertex3(-0.6f, -0.4f, 0f); //GL.Color3(0f, 1f, 0); //GL.Vertex3(0.6f, -0.4f, 0f); //GL.Color3(0f, 0, 1f); //GL.Vertex3(0.0f, 0.6f, 0f); //GL.End(); //--------------------------------- /* Render here */ /* Swap front and back buffers */ Glfw.SwapBuffers(glWindow); /* Poll for and process events */ Glfw.PollEvents(); } Glfw.Terminate(); }
public static void Start() { if (!Glfw.Init()) { Console.WriteLine("can't init glfw"); return; } //--------------------------------------------------- //specific OpenGLES //Glfw.WindowHint(WindowHint.GLFW_CLIENT_API, (int)OpenGLAPI.OpenGLESAPI); //Glfw.WindowHint(WindowHint.GLFW_CONTEXT_CREATION_API, (int)OpenGLContextCreationAPI.GLFW_EGL_CONTEXT_API); //Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MAJOR, 2); //Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MINOR, 0); //--------------------------------------------------- GlfwMonitorPtr monitor = new GlfwMonitorPtr(); GlfwWindowPtr winPtr = new GlfwWindowPtr(); GlfwWindowPtr glWindow = Glfw.CreateWindow(800, 600, "Test Glfw", monitor, winPtr); /* Make the window's context current */ Glfw.MakeContextCurrent(glWindow); Glfw.SwapInterval(1); GL.Hello(); //-------------------------------------- //create shader program var shaderProgram = new MiniShaderProgram(); ShaderVtxAttrib3f a_position; ShaderVtxAttrib4f a_color; ShaderUniformMatrix4 u_matrix; ShaderUniformVar1 u_useSolidColor; ShaderUniformVar4 u_solidColor; MyMat4 orthoView; string vs = @" attribute vec3 a_position; attribute vec4 a_color; uniform mat4 u_mvpMatrix; uniform vec4 u_solidColor; uniform int u_useSolidColor; varying vec4 v_color; varying vec4 a_position_output; void main() { a_position_output = u_mvpMatrix* vec4(a_position[0],a_position[1],0,1); gl_Position = a_position_output; v_color= vec4(1,0,0,1); } "; //fragment source // string fs = @"void main() // { // gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0); // } // "; string fs = @" //precision mediump float; //need for OpenGLES2 varying vec4 v_color; varying vec4 a_position_output; void main() { if(a_position_output[1]>0.5){ gl_FragColor = vec4(0,1,1,1); }else{ gl_FragColor= vec4(0,1,0,1); } } "; if (!shaderProgram.Build(vs, fs)) { throw new NotSupportedException(); } a_position = shaderProgram.GetAttrV3f("a_position"); a_color = shaderProgram.GetAttrV4f("a_color"); u_matrix = shaderProgram.GetUniformMat4("u_mvpMatrix"); u_useSolidColor = shaderProgram.GetUniform1("u_useSolidColor"); u_solidColor = shaderProgram.GetUniform4("u_solidColor"); //-------------------------------------------------------------------------------- GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.ClearColor(1, 1, 1, 1); //setup viewport size int ww_w = 800; int ww_h = 600; int max = Math.Max(ww_w, ww_h); //square viewport GL.Viewport(0, 0, max, max); orthoView = MyMat4.ortho(0, max, 0, max, 0, 1); //-------------------------------------------------------------------------------- //load image /* Loop until the user closes the window */ int width, height; Glfw.GetFramebufferSize(glWindow, out width, out height); float ratio = (float)width / (float)height; GL.Viewport(0, 0, 800, 600); shaderProgram.UseProgram(); while (!Glfw.WindowShouldClose(glWindow)) { //set clear color to white GL.ClearColor(1f, 1, 1, 1); GL.Clear(ClearBufferMask.ColorBufferBit); //--------------------------------- //--------------------------------------------------------- u_matrix.SetData(orthoView.data); //--------------------------------------------------------- //DrawLines(0, 0, 300, 300); float x1 = 50, y1 = 20, x2 = 300, y2 = 20; float[] vtxs = new float[] { x1, y1, 1, x2, y2, 1, 50, 300, 1 }; u_useSolidColor.SetValue(1); u_solidColor.SetValue(1f, 0f, 0f, 1f);//use solid color a_position.LoadPureV3f(vtxs); GL.DrawArrays(BeginMode.Triangles, 0, 3); //--------------------------------------------------------- //GL.MatrixMode(MatrixMode.Modelview); //GL.LoadIdentity(); //GL.Begin(BeginMode.Triangles); //GL.Color3(1f, 0, 0); //GL.Vertex3(-0.6f, -0.4f, 0f); //GL.Color3(0f, 1f, 0); //GL.Vertex3(0.6f, -0.4f, 0f); //GL.Color3(0f, 0, 1f); //GL.Vertex3(0.0f, 0.6f, 0f); //GL.End(); //--------------------------------- /* Render here */ /* Swap front and back buffers */ Glfw.SwapBuffers(glWindow); /* Poll for and process events */ Glfw.PollEvents(); } Glfw.Terminate(); }