Ejemplo n.º 1
0
        private void openGLControl1_OpenGLInitialized(object sender, EventArgs e)
        {
            gl = openGLControl1.OpenGL;
            gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f);
            gl.LineWidth(1.5f);
            gl.PointSize(6.0f);

            //

            viewMatrix = new mat4(1.0f);

            /**
             * 使用sharpGL封装过的方式创建openGL Program   不用执行编译shader到链接一系列操作
             * 两program 他们实际上是共用变换矩阵 emmm 可能会有一些小问题
             */

            mainGlProgram = new ShaderProgram();
            mainGlProgram.Create(gl, vertexShaderSource, simpleFragmentShaderSource, null);
            mainGlProgram.BindAttributeLocation(gl, index_in_vPosition, "vPosition");
            mainGlProgram.AssertValid(gl);

            axisGlProgram = new ShaderProgram();
            axisGlProgram.Create(gl, vertexShaderSource, colorFragmentShaderSource, null);
            axisGlProgram.BindAttributeLocation(gl, index_in_vPosition, "vPosition");
            axisGlProgram.BindAttributeLocation(gl, index_in_vColor, "vColor");
            axisGlProgram.AssertValid(gl);


            arcBallManipulater.Bind(openGLControl1, viewMatrix, new Action <mat4>((mat4 => { viewMatrix = mat4; })));
        }
Ejemplo n.º 2
0
        private ShaderProgram InitShader(OpenGL gl, RenderMode renderMode)
        {
            String        vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"Grids.HexahedronGrid.vert");
            String        fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"Grids.HexahedronGrid.frag");
            ShaderProgram shaderProgram        = new ShaderProgram();

            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            //shaderProgram.BindAttributeLocation(gl, ATTRIB_INDEX_POSITION, in_position);
            //shaderProgram.BindAttributeLocation(gl, ATTRIB_INDEX_COLOUR, in_uv);
            {
                int location = shaderProgram.GetAttributeLocation(gl, in_Position);
                if (location < 0)
                {
                    throw new ArgumentException();
                }
                this.ATTRIB_INDEX_POSITION = (uint)location;
            }
            {
                int location = shaderProgram.GetAttributeLocation(gl, in_uv);
                if (location < 0)
                {
                    throw new ArgumentException();
                }
                this.ATTRIB_INDEX_UV = (uint)location;
            }
            shaderProgram.AssertValid(gl);
            return(shaderProgram);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Инициализация OpenGL.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        private void OpenGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            OpenGL gl = openGLControl.OpenGL;

            gl.ClearColor(0.23529f, 0.23529f, 0.46666f, 0);


            //  Create the shader program.
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile("Shader2.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("Shader2.frag");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
            shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
            shaderProgram.BindAttributeLocation(gl, attributeIndexNormal, "in_Norm");
            shaderProgram.AssertValid(gl);

            //  Create a perspective projection matrix.
            const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f;

            projectionMatrix = glm.perspective(rads, (float)gl.RenderContextProvider.Width /
                                               (float)gl.RenderContextProvider.Height, 0.01f, 600.0f);

            //  Create a view matrix to move us back a bit.
            viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f));

            //  Create a model matrix rotate model.
            modelMatrix = glm.rotate(mat4.identity(), 1.1f, new vec3(0, 1, 0));
        }
Ejemplo n.º 4
0
        private void InitializeOpenGL(OpenGL gl, int width, int height)
        {
            //  Set a blue clear colour.
            this.gl = gl;
            gl.ClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            gl.PolygonMode(SharpGL.Enumerations.FaceMode.Front, SharpGL.Enumerations.PolygonMode.Lines);
            gl.Enable(OpenGL.GL_CULL_FACE);
            gl.CullFace(OpenGL.GL_BACK);

            //  Create the shader program.
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile("OpenGLRenderer\\Shaders\\VertexShader - Copy.glsl");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("OpenGLRenderer\\Shaders\\FragmentShader - Copy.glsl");

            //for(int i = 0; i<100; i++) {
            shaderProgram = new ShaderProgram();
            //var shaderTime = _stopwatch.ElapsedMilliseconds;
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            //File.AppendAllText("shader" + ".txt", (_stopwatch.ElapsedMilliseconds - shaderTime).ToString() + "\n");
            //}

            shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
            shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
            shaderProgram.BindAttributeLocation(gl, attributeIndexNormal, "in_Normal");
            shaderProgram.AssertValid(gl);
            //  Now create the geometry for the square.
            _poStructs = new List <poStruct>();
            foreach (var po in _primordialObject)
            {
                _poStructs.Add(new poStruct
                {
                    _vertexBufferArray = CreateVertexBufferArray(gl, po),
                    _primordialObject  = po
                });
            }
        }
        protected void InitializeShader(out ShaderProgram shaderProgram)
        {
            var    vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"DemoSimplePointSpriteElement.vert");
            string fragmentShaderSource = string.Empty;

            switch (this.fragShaderType)
            {
            case FragShaderType.Simple:
                fragmentShaderSource = ManifestResourceLoader.LoadTextFile(
                    @"DemoSimplePointSpriteElement_Simple.frag");
                break;

            case FragShaderType.Analytic:
                fragmentShaderSource = ManifestResourceLoader.LoadTextFile(
                    @"DemoSimplePointSpriteElement_Analytic.frag");
                break;

            default:
                throw new NotImplementedException();
            }

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.AssertValid();
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Initialises the scene.
        /// </summary>
        /// <param name="gl">The OpenGL instance.</param>
        /// <param name="width">The width of the screen.</param>
        /// <param name="height">The height of the screen.</param>
        public void Initialise(OpenGL gl, float width, float height)
        {
            //  Set a blue clear colour.
            gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f);

            //  Create the shader program.
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile("Shader.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("Shader.frag");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
            shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
            shaderProgram.AssertValid(gl);

            //  Create a perspective projection matrix.
            const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f;

            projectionMatrix = glm.perspective(rads, width / height, 0.1f, 100.0f);

            //  Create a view matrix to move us back a bit.
            viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f));

            //  Create a model matrix to make the model a little bigger.
            modelMatrix = glm.scale(new mat4(1.0f), new vec3(2.5f));

            //  Now create the geometry for the square.
            CreateVerticesForSquare(gl);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Initialises the scene.
        /// </summary>
        /// <param name="gl">The OpenGL instance.</param>
        public void Initialise(OpenGL gl)
        {
            time = DateTime.Now.Millisecond / 1000;
            //  Set a blue clear colour.
            //gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f);

            //  Create the shader program.
            var vertexShaderSource = ResourceHelper.LoadTextFromRecource("cymatics.Shaders.Main.vert");

            try
            {
                shaderProgram = new ShaderProgram();
                shaderProgram.Create(gl, vertexShaderSource, FragmentShaderSource, null);
                shaderProgram.BindAttributeLocation(gl, AttributeIndexPosition, "position");
                shaderProgram.AssertValid(gl);
            }
            catch (ShaderCompilationException se)
            {
                CompilationFailureText =
                    $"-----------\r\n{se.Message}\r\n----------\r\n {se.CompilerOutput} \r\n {se.HelpLink}";
                Debug.WriteLine(" shader compilation failure");
                Debug.WriteLine(" -------------- ");
                Debug.WriteLine(CompilationFailureText);
                Debug.WriteLine(" -------------- ");
                isValid       = false;
                _needsRefresh = false;
                OnCompilationEvent(new EventArgs());
                return;
            }
            catch (Exception e)
            {
                Debug.WriteLine(e);
                isValid       = false;
                _needsRefresh = true;
                OnCompilationEvent(new EventArgs());
                return;
            }

            //Generate Textures
            //gl.GenTextures(2, _glTextureArray);
            //shaderProgram.BindAttributeLocation(gl, glTextureArray[0], "iChannel0");
            //shaderProgram.BindAttributeLocation(gl, glTextureArray[1], "iChannel1");
            //var ch0Loc = shaderProgram.GetUniformLocation(gl, "iChannel0");
            //gl.ActiveTexture(OpenGL.GL_TEXTURE0);
            //gl.BindTexture(OpenGL.GL_TEXTURE_2D, _glTextureArray[0]);
            //gl.Uniform1(ch0Loc, 0);

            //var ch1Loc = shaderProgram.GetUniformLocation(gl, "iChannel1");
            //gl.ActiveTexture(OpenGL.GL_TEXTURE1);
            //gl.BindTexture(OpenGL.GL_TEXTURE_2D, _glTextureArray[1]);
            //gl.Uniform1(ch1Loc, 1);

            //  Now create the geometry for the square.
            CreateVerticesForSquare(gl);

            _needsRefresh = false;
            isValid       = true;
            OnCompilationEvent(new EventArgs());
        }
Ejemplo n.º 8
0
        protected void InitializeShader(OpenGL gl, out ShaderProgram shaderProgram)
        {
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"TexturedCube.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"TexturedCube.frag");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            shaderProgram.AssertValid(gl);
        }
Ejemplo n.º 9
0
        protected void InitializeShader(out ShaderProgram shaderProgram)
        {
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"SceneElements.AxisElement.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"SceneElements.AxisElement.frag");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.AssertValid();
        }
Ejemplo n.º 10
0
        private void InitShaderProgram()
        {
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"SceneElements.FontElement.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"SceneElements.FontElement.frag");
            var shaderProgram        = new ShaderProgram();

            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.AssertValid();

            this.shaderProgram = shaderProgram;
        }
Ejemplo n.º 11
0
        protected ShaderProgram InitializeShader()
        {
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIRect.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIRect.frag");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.AssertValid();

            return(shaderProgram);
        }
Ejemplo n.º 12
0
        private void InitShaderProgram()
        {
            //  Create the shader program.
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"PointSpriteStringElement.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"PointSpriteStringElement.frag");
            var shaderProgram        = new ShaderProgram();

            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);
            this.attributeIndexPosition = shaderProgram.GetAttributeLocation("in_Position");
            shaderProgram.AssertValid();
            this.shaderProgram = shaderProgram;
        }
Ejemplo n.º 13
0
        public static ShaderProgram GetPickingShaderProgram()
        {
            var    vertexShaderSource   = GetShaderSource(ShaderTypes.VertexShader);
            string fragmentShaderSource = GetShaderSource(ShaderTypes.FragmentShader);

            var shaderProgram = new ShaderProgram();

            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.AssertValid();

            return(shaderProgram);
        }
Ejemplo n.º 14
0
        //static readonly object synObj = new object();

        public static ShaderProgram GetPickingShaderProgram()
        {
            var    vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"ColorCodedPicking.PickingShader.vert");
            string fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"ColorCodedPicking.PickingShader.frag");

            var shaderProgram = new ShaderProgram();

            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.AssertValid();

            return(shaderProgram);
        }
        protected ShaderProgram InitializeShader()
        {
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"DemoColorCodedPickingElement.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"DemoColorCodedPickingElement.frag");

            var shaderProgram = new ShaderProgram();

            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.AssertValid();

            return(shaderProgram);
        }
Ejemplo n.º 16
0
        } // end sub

        #endregion

        protected override void DoInitialize()
        {
            // Now create a simple program to visualize the result
            basicShaderProgram = new ShaderProgram();
            basicShaderProgram.Create(basicVertexShader, basicFragmentShader, null);
            basicShaderProgram.AssertValid();
            base_model_matrix_pos      = GL.GetUniformLocation(basicShaderProgram.ShaderProgramObject, "model_matrix");
            base_projection_matrix_pos = GL.GetUniformLocation(basicShaderProgram.ShaderProgramObject, "projection_matrix");

            fur_prog = GL.CreateProgram();
            ShaderHelper.vglAttachShaderSource(fur_prog, ShaderType.VertexShader, furVertexShader);
            ShaderHelper.vglAttachShaderSource(fur_prog, ShaderType.GeometryShader, furGeometryShader);
            ShaderHelper.vglAttachShaderSource(fur_prog, ShaderType.FragmentShader, furFragmentShader);
            GL.LinkProgram(fur_prog);
            GL.UseProgram(fur_prog);
            fur_model_matrix_pos      = GL.GetUniformLocation(fur_prog, "model_matrix");
            fur_projection_matrix_pos = GL.GetUniformLocation(fur_prog, "projection_matrix");

            GL.GenTextures(1, fur_texture);
            UnmanagedArray <byte> tex = new UnmanagedArray <byte>(1024 * 1024 * 4);
            Random random             = new Random();

            for (int n = 0; n < 256; n++)
            {
                for (int m = 0; m < 1270; m++)
                {
                    int x = random.Next() & 0x3FF;
                    int y = random.Next() & 0x3FF;
                    tex[(y * 1024 + x) * 4 + 0] = (byte)((random.Next() & 0x3F) + 0xC0);
                    tex[(y * 1024 + x) * 4 + 1] = (byte)((random.Next() & 0x3F) + 0xC0);
                    tex[(y * 1024 + x) * 4 + 2] = (byte)((random.Next() & 0x3F) + 0xC0);
                    tex[(y * 1024 + x) * 4 + 3] = (byte)(n);
                    //tex[(y * 1024 + x) * 4 + 0] = (byte)(random.Next());
                    //tex[(y * 1024 + x) * 4 + 1] = (byte)(random.Next());
                    //tex[(y * 1024 + x) * 4 + 2] = (byte)(random.Next());
                    //tex[(y * 1024 + x) * 4 + 3] = (byte)(random.Next());
                }
            }
            GL.BindTexture(GL.GL_TEXTURE_2D, fur_texture[0]);
            GL.TexImage2D(TexImage2DTargets.Texture2D, 0, TexImage2DFormats.RGBA, 1024, 1024, 0, TexImage2DFormats.RGBA, TexImage2DTypes.UnsignedByte, tex.Header);
            GL.TexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, (int)GL.GL_LINEAR);
            GL.TexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, (int)GL.GL_LINEAR);
            tex.Dispose();

            vboObject.LoadFromVBM(@"media\ninja.vbm", 0, 1, 2);

            base.BeforeRendering += LightingExample_BeforeRendering;
            base.AfterRendering  += LightingExample_AfterRendering;
        }
Ejemplo n.º 17
0
        protected ShaderProgram InitializeShader()
        {
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIColorIndicatorBar.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"UIs.SimpleUIColorIndicatorBar.frag");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(vertexShaderSource, fragmentShaderSource, null);

            in_PositionLocation = shaderProgram.GetAttributeLocation(strin_Position);
            in_ColorLocation    = shaderProgram.GetAttributeLocation(strin_Color);

            shaderProgram.AssertValid();

            return(shaderProgram);
        }
        /// <summary>
        /// Initialises the scene.
        /// </summary>
        /// <param name="gl">The OpenGL instance.</param>
        /// <param name="width">The width of the screen.</param>
        /// <param name="height">The height of the screen.</param>
        public void Initialise(OpenGL gl, float width, float height)
        {
            //  Set a blue clear colour.
            gl.ClearColor(0.4f, 0.6f, 0.9f, 0.5f);

            {
                //  Create the shader program.
                var vertexShaderSource   = ManifestResourceLoader.LoadTextFile("Shader.vert");
                var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("Shader.frag");
                var shaderProgram        = new ShaderProgram();
                shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
                shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
                shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
                shaderProgram.AssertValid(gl);
                this.shaderProgram = shaderProgram;
            }
            {
                //  Create the shader program.
                var vertexShaderSource   = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.VertexShader);
                var fragmentShaderSource = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.FragmentShader);
                var shaderProgram        = new ShaderProgram();
                shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
                shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
                shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
                shaderProgram.AssertValid(gl);
                this.pickingShaderProgram = shaderProgram;
            }

            //  Create a perspective projection matrix.
            const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f;

            projectionMatrix = glm.perspective(rads, width / height, 0.1f, 100.0f);

            //  Create a view matrix to move us back a bit.
            viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f));

            //  Create a model matrix to make the model a little bigger.
            modelMatrix = glm.scale(new mat4(1.0f), new vec3(2.5f));
            IPerspectiveCamera camera = this.cameraRotation.Camera;

            projectionMatrix = camera.GetProjectionMat4();
            viewMatrix       = this.cameraRotation.Camera.GetViewMat4();
            modelMatrix      = mat4.identity();

            //  Now create the geometry for the square.
            CreateVertices(gl);
        }
Ejemplo n.º 19
0
        } // end sub

        #endregion

        protected override void DoInitialize()
        {
            // Now create a simple program to visualize the result
            shaderProgram = new ShaderProgram();
            shaderProgram.Create(render_vs, render_fs, null);
            shaderProgram.AssertValid();

            //mv_mat_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "model_matrix");
            //prj_mat_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "proj_matrix");
            //col_amb_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "color_ambient");
            //col_diff_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "color_diffuse");
            //col_spec_loc = GL.GetUniformLocation(shaderProgram.ShaderProgramObject, "color_specular");

            vboObject.LoadFromVBM(@"media\unit_torus.vbm", 0, 1, 2);

            base.BeforeRendering += LightingExample_BeforeRendering;
            base.AfterRendering  += LightingExample_AfterRendering;
        }
Ejemplo n.º 20
0
        /// <summary>
        /// Initialises the scene.
        /// </summary>
        /// <param name="gl">The OpenGL instance.</param>
        public void Initialise(OpenGL gl)
        {
            time = DateTime.Now.Millisecond / 1000;
            //  Set a blue clear colour.
            //gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f);

            //  Create the shader program.
            var vertexShaderSource   = ResourceHelper.LoadTextFromRecource("ShaderToy.NET.Shaders.main.vert");
            var fragmentShaderSource = ResourceHelper.LoadTextFromRecource(
                $"ShaderToy.NET.Shaders.{ActiveShader.ResourceName}.frag");

            shaderProgram = new DynamicShaderProgram();
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);

            shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "position");
            shaderProgram.AssertValid(gl);

            //Generate Textures
            gl.GenTextures(2, glTextureArray);
            //shaderProgram.BindAttributeLocation(gl, glTextureArray[0], "iChannel0");
            //shaderProgram.BindAttributeLocation(gl, glTextureArray[1], "iChannel1");
            var ch0loc = shaderProgram.GetUniformLocation(gl, "iChannel0");

            gl.ActiveTexture(OpenGL.GL_TEXTURE0);
            gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[0]);
            gl.Uniform1(ch0loc, 0);

            var ch1loc = shaderProgram.GetUniformLocation(gl, "iChannel1");

            gl.ActiveTexture(OpenGL.GL_TEXTURE1);
            gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[1]);
            gl.Uniform1(ch1loc, 1);

            /*gl.ActiveTexture(OpenGL.GL_TEXTURE0);
             * gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[0]);
             * gl.ActiveTexture(OpenGL.GL_TEXTURE1);
             * gl.BindTexture(OpenGL.GL_TEXTURE_2D, glTextureArray[1]);*/

            //  Now create the geometry for the square.
            CreateVerticesForSquare(gl);

            needsRefresh = false;
        }
        protected void InitShaderProgram(SharpGL.OpenGL gl, out SharpGL.Shaders.ShaderProgram shaderProgram)
        {
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"Well.PointSpriteStringElement.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"Well.PointSpriteStringElement.frag");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            int position = shaderProgram.GetAttributeLocation(gl, "in_Position");

            if (position >= 0)
            {
                attributeIndexPosition = (uint)position;
            }
            //int color = shaderProgram.GetAttributeLocation(gl, "in_Color");
            //if (color >= 0) { attributeIndexColour = (uint)color; }
            //int radius = shaderProgram.GetAttributeLocation(gl, "in_radius");
            //if (radius >= 0) { attributeIndexRadius = (uint)radius; }
            //int visible = shaderProgram.GetAttributeLocation(gl, "in_visible");
            //if (visible >= 0) { attributeIndexVisible = (uint)visible; }
            shaderProgram.AssertValid(gl);
        }
Ejemplo n.º 22
0
        private void InitProgram()
        {
            {
                var vertexShaderSource = ManifestResourceLoader.LoadTextFile(@"TransformFeedback.transform.vert");
                transformProgram = new TransformShaderProgram();
                transformProgram.Create(vertexShaderSource);
                transformProgram.AssertValid();
            }
            {
                var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"TransformFeedback.feedback.vert");
                var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"TransformFeedback.feedback.frag");

                feedbackProgram = new ShaderProgram();
                feedbackProgram.Create(vertexShaderSource, fragmentShaderSource, null);
                feedbackProgram.AssertValid();
            }
            {
                var index = GL.GetUniformBlockIndex(transformProgram.ShaderProgramObject, "transform");
                GL.UniformBlockBinding(transformProgram.ShaderProgramObject, index, (uint)UniformType.TRANSFORM0);
            }
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Handles the OpenGLInitialized event of the openGLControl1 control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="args">The <see cref="SharpGL.SceneGraph.OpenGLEventArgs"/> instance containing the event data.</param>
        private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args)
        {
            //  TODO: Initialise OpenGL here.
            //  Get the OpenGL object.
            OpenGL gl = openGLControl.OpenGL;

            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT);
            //  Set a blue clear colour.
            gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f);
            gl.ClearColor(0f, 0f, 0f, 0.0f);
            //  Create the shader program.
            var vertexShaderSource   = ManifestResourceLoader.LoadTextFile("vertex_shader.glsl");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("fragment_shader.glsl");

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            attribute_vpos = (uint)gl.GetAttribLocation(shaderProgram.ShaderProgramObject, "vPosition");
            attribute_vcol = (uint)gl.GetAttribLocation(shaderProgram.ShaderProgramObject, "vColor");
            shaderProgram.AssertValid(gl);
            InitializeFixedBufferContents();
        }
        /// <summary>
        /// Initialises the scene.
        /// </summary>
        /// <param name="gl">The OpenGL instance.</param>
        /// <param name="width">The width of the screen.</param>
        /// <param name="height">The height of the screen.</param>
        public void Initialise(OpenGL gl)
        {
            //  Set a blue clear colour.
            gl.ClearColor(0.4f, 0.6f, 0.9f, 0.5f);

            {
                //  Create the shader program.
                var vertexShaderSource   = ManifestResourceLoader.LoadTextFile(@"Model\Shader.vert");
                var fragmentShaderSource = ManifestResourceLoader.LoadTextFile(@"Model\Shader.frag");
                var shaderProgram        = new ShaderProgram();
                shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
                shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
                shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
                shaderProgram.AssertValid(gl);
                this.shaderProgram = shaderProgram;
            }
            {
                //  Create the picking shader program.
                var vertexShaderSource   = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.VertexShader);
                var fragmentShaderSource = ColorCodedPickingShaderHelper.GetShaderSource(ColorCodedPickingShaderHelper.ShaderTypes.FragmentShader);
                var shaderProgram        = new ShaderProgram();
                shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
                shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
                shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
                shaderProgram.AssertValid(gl);
                this.pickingShaderProgram = shaderProgram;
            }

            unsafe
            {
                //  Create the vertex array object.
                vertexBufferArray = new VertexBufferArray();
                vertexBufferArray.Create(gl);
                vertexBufferArray.Bind(gl);

                //  Create a vertex buffer for the vertex data.
                var vertexDataBuffer = new VertexBuffer();
                vertexDataBuffer.Create(gl);
                vertexDataBuffer.Bind(gl);
                //vertexDataBuffer.SetData(gl, 0,
                //this.Model.VertexCount * sizeof(Vertex), (IntPtr)this.Model.Positions, false, 3, OpenGL.GL_FLOAT);
                vertexDataBuffer.SetData(gl, 0, this.Model.Positions, false, 3);

                //  Now do the same for the colour data.
                var colourDataBuffer = new VertexBuffer();
                colourDataBuffer.Create(gl);
                colourDataBuffer.Bind(gl);
                //colourDataBuffer.SetData(gl, 1,
                //this.Model.VertexCount * sizeof(ByteColor), (IntPtr)this.Model.Colors, false, 3, OpenGL.GL_BYTE);
                colourDataBuffer.SetData(gl, 1, this.Model.Colors, false, 3);

                //  Unbind the vertex array, we've finished specifying data for it.
                vertexBufferArray.Unbind(gl);
            }
            ////  Create a perspective projection matrix.
            //const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f;
            //projectionMatrix = glm.perspective(rads, width / height, 0.1f, 100.0f);

            ////  Create a view matrix to move us back a bit.
            //viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f));

            ////  Create a model matrix to make the model a little bigger.
            //modelMatrix = glm.scale(new mat4(1.0f), new vec3(2.5f));
            ////IPerspectiveCamera camera = this.cameraRotation.Camera;
            ////projectionMatrix = camera.GetProjectionMat4();
            ////viewMatrix = this.cameraRotation.Camera.GetViewMat4();
            ////modelMatrix = mat4.identity();

            ////  Now create the geometry for the square.
            //CreateVertices(gl);

            this.initialised = true;
        }
Ejemplo n.º 25
0
        /// <summary>
        /// Initialises the scene.
        /// </summary>
        /// <param name="gl">The OpenGL instance.</param>
        /// <param name="width">The width of the screen.</param>
        /// <param name="height">The height of the screen.</param>
        public void Initialise(OpenGL gl, float width, float height)
        {
            //  Set a blue clear colour.
            gl.ClearColor(0.4f, 0.6f, 0.9f, 0.0f);

            //  Create the shader program.
            var vertexShaderSource = ManifestResourceLoader.LoadTextFile("Shader.vert");
            var fragmentShaderSource = ManifestResourceLoader.LoadTextFile("Shader.frag");
            shaderProgram = new ShaderProgram();
            shaderProgram.Create(gl, vertexShaderSource, fragmentShaderSource, null);
            shaderProgram.BindAttributeLocation(gl, attributeIndexPosition, "in_Position");
            shaderProgram.BindAttributeLocation(gl, attributeIndexColour, "in_Color");
            shaderProgram.AssertValid(gl);

            //  Create a perspective projection matrix.
            const float rads = (60.0f / 360.0f) * (float)Math.PI * 2.0f;
            projectionMatrix = glm.perspective(rads, width / height, 0.1f, 100.0f);

            //  Create a view matrix to move us back a bit.
            viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f));

            //  Create a model matrix to make the model a little bigger.
            modelMatrix = glm.scale(new mat4(1.0f), new vec3(2.5f));

            //  Now create the geometry for the square.
            CreateVerticesForSquare(gl);
        }
Ejemplo n.º 26
0
        public GL_GUI_Context(Window window, float width, float height)
        {
            this.window = window;
            this.Width  = width;
            this.Height = height;

            context = SDL.SDL_GL_CreateContext(window.Handle);
            SDL.SDL_GL_MakeCurrent(window.Handle, context);

            gl = new OpenGL();

            gl.Enable(OpenGL.GL_TEXTURE_2D);

            shaderProgram = new ShaderProgram();
            shaderProgram.Create(gl, VERTEX_SHADER, FRAGMENT_SHADER, null);
            shaderProgram.BindAttributeLocation(gl, 0, "in_Position");
            shaderProgram.BindAttributeLocation(gl, 1, "in_Color");
            shaderProgram.AssertValid(gl);

            gl.GenFramebuffersEXT(1, framebuffers);
            gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, framebuffers[0]);

            gl.GenTextures(1, framebufferTargets);
            gl.BindTexture(OpenGL.GL_TEXTURE_2D, framebufferTargets[0]);
            gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, OpenGL.GL_RGB, window.DisplayWidth, window.DisplayHeight, 0, OpenGL.GL_RGB, OpenGL.GL_UNSIGNED_BYTE, IntPtr.Zero);
            gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_NEAREST);
            gl.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_NEAREST);
            gl.FramebufferTexture(OpenGL.GL_FRAMEBUFFER_EXT, OpenGL.GL_COLOR_ATTACHMENT0_EXT, framebufferTargets[0], 0);
            gl.DrawBuffers(1, new uint[] { OpenGL.GL_COLOR_ATTACHMENT0_EXT });

            if (gl.CheckFramebufferStatusEXT(OpenGL.GL_FRAMEBUFFER_EXT) != OpenGL.GL_FRAMEBUFFER_COMPLETE_EXT)
            {
                throw new Exception("Frame buffer setup not complete");
            }

            gl.BindFramebufferEXT(OpenGL.GL_FRAMEBUFFER_EXT, 0);
            gl.BindTexture(OpenGL.GL_TEXTURE_2D, 0);


            ortho = new float[] {
                2.0f / Width, 0.0f, 0.0f, 0.0f,
                0.0f, -2.0f / Height, 0.0f, 0.0f,
                0.0f, 0.0f, -1.0f, 0.0f,
                -1.0f, 1.0f, 0.0f, 1.0f,
            };

            gl.Viewport(0, 0, window.DisplayWidth, window.DisplayHeight);
            gl.Enable(OpenGL.GL_BLEND);
            gl.BlendFunc(OpenGL.GL_SRC_ALPHA, OpenGL.GL_ONE_MINUS_SRC_ALPHA);
            gl.Disable(OpenGL.GL_CULL_FACE);
            gl.Disable(OpenGL.GL_DEPTH_TEST);
            gl.ActiveTexture(OpenGL.GL_TEXTURE0);
            gl.Enable(OpenGL.GL_SCISSOR_TEST);

            shaderProgram.Bind(gl);
            shaderProgram.SetUniformMatrix4(gl, "projectionMatrix", ortho);

            vertexBufferArray = new VertexBufferArray();
            vertexBufferArray.Create(gl);
            vertexBufferArray.Bind(gl);
        }