コード例 #1
0
ファイル: Form1.cs プロジェクト: Spol-RafaSoftware/Patient
        private void glControl1_Load(object sender, EventArgs e)
        {
            loaded = true;
            stopwatch.Start();

            // glControl1.MouseWheel += new MouseEventHandler(glControl1_MouseWheel);
            //  setupViewport();
            //  displayList = GL.GenLists(1);
            // declare some variables for tracking which shader did compile, and which texture to use


            String LogInfo;


            // Load&Compile Vertex Shader
            using (StreamReader sr = new StreamReader("./shaders/vertex_shader.glsl"))
            {
                VertexShaderObject = GL.CreateShader(ShaderType.VertexShader);
                GL.ShaderSource(VertexShaderObject, sr.ReadToEnd());
                GL.CompileShader(VertexShaderObject);
            }

            GL.GetShaderInfoLog(VertexShaderObject, out LogInfo);
            if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
            {
                Trace.WriteLine("Vertex Shader Log:\n" + LogInfo);
            }
            else
            {
                Trace.WriteLine("Vertex Shader compiled without complaint.");
            }


            ShaderFilename = ShaderDir + ShaderName + ShaderExt;
            getShaderList(ShaderDir, ShaderName, ShaderExt);

            compileShader();
        }
コード例 #2
0
ファイル: JuliaSetFractal.cs プロジェクト: noggs/opentk
        float UniformOffsetY = 1.8f;             // fractal vertical offset

        #endregion private Fields

        #region OnLoad

        /// <summary>
        /// Setup OpenGL and load resources here.
        /// </summary>
        /// <param name="e">Not used.</param>
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            // Check for necessary capabilities:
            Version version = new Version(GL.GetString(StringName.Version).Substring(0, 3));
            Version target  = new Version(2, 0);

            if (version < target)
            {
                throw new NotSupportedException(String.Format(
                                                    "OpenGL {0} is required (you only have {1}).", target, version));
            }

            this.VSync = VSyncMode.On;

            GL.Disable(EnableCap.Dither);
            GL.ClearColor(0.2f, 0f, 0.4f, 0f);

            // declare some variables for tracking which shader did compile, and which texture to use
            string[] ShaderFilenames = new string[2];
            ShaderFilenames[0] = "Data/Shaders/JuliaSet_SM3_FS.glsl";
            ShaderFilenames[1] = "Data/Shaders/JuliaSet_SM2_FS.glsl";

            string LogInfo;
            int    status = 0;

            #region Shaders
            // Load&Compile Vertex Shader
            using (StreamReader sr = new StreamReader("Data/Shaders/JuliaSet_VS.glsl"))
            {
                VertexShaderObject = GL.CreateShader(ShaderType.VertexShader);
                GL.ShaderSource(VertexShaderObject, sr.ReadToEnd());
                GL.CompileShader(VertexShaderObject);
            }

            GL.GetShaderInfoLog(VertexShaderObject, out LogInfo);
            if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
            {
                Trace.WriteLine("Vertex Shader Log:\n" + LogInfo);
            }
            else
            {
                Trace.WriteLine("Vertex Shader compiled without complaint.");
            }

            // Load&Compile Fragment Shader
            FragmentShaderObject = GL.CreateShader(ShaderType.FragmentShader);
            foreach (var shader in ShaderFilenames)
            {
                using (StreamReader sr = new StreamReader(shader))
                {
                    GL.ShaderSource(FragmentShaderObject, sr.ReadToEnd());
                    GL.CompileShader(FragmentShaderObject);
                }
                GL.GetShader(FragmentShaderObject, ShaderParameter.CompileStatus, out status);
                if (status != 1)
                {
                    GL.GetShaderInfoLog(FragmentShaderObject, out LogInfo);
                    Trace.WriteLine("Compiling " + shader + " failed!\nLog:\n" + LogInfo);
                }
                else
                {
                    Trace.WriteLine("Fragment Shader compiled without complaint.");
                    break;
                }
            }
            if (status != 1)
            {
                MessageBox.Show("Shader compilation failed");
                Exit();
            }

            // Link the Shaders to a usable Program
            ProgramObject = GL.CreateProgram();
            GL.AttachShader(ProgramObject, VertexShaderObject);
            GL.AttachShader(ProgramObject, FragmentShaderObject);
            GL.LinkProgram(ProgramObject);

            // make current
            GL.UseProgram(ProgramObject);

            // Flag ShaderObjects for delete when app exits
            GL.DeleteShader(VertexShaderObject);
            GL.DeleteShader(FragmentShaderObject);
            #endregion Shaders

            #region Textures

            // Load&Bind the 1D texture for color lookups
            GL.ActiveTexture(TextureUnit.Texture0); // select TMU0
            GL.GenTextures(1, out TextureObject);
            GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
            GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureWrapS, (int)(TextureWrapMode)All.ClampToEdge);

            using (Bitmap bitmap = new Bitmap("Data/Textures/JuliaColorTable.bmp"))
            {
                BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly,
                                                  System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                GL.TexImage1D(TextureTarget.Texture1D, 0, PixelInternalFormat.Rgb8, data.Width, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgr,
                              PixelType.UnsignedByte, data.Scan0);
                bitmap.UnlockBits(data);
            }
            #endregion Textures

            Keyboard.KeyUp += KeyUp;
        }
コード例 #3
0
            public Shader(string VSUrl, string FSUrl)
            {
                // First call Core.Shader.Init();
                if ((!Core.useGLSL) || (!Core.CheckGLSLSupport()))
                {
                    return;
                }

                active = false;

                using (StreamReader sr = new StreamReader(VSUrl))
                {
                    VertexShaderObject = GL.CreateShader(ShaderType.VertexShader);
                    GL.ShaderSource(VertexShaderObject, sr.ReadToEnd());
                    GL.CompileShader(VertexShaderObject);
                }

                ErrorCode err;

                err = GL.GetError();
                if (err != ErrorCode.NoError)
                {
                    Debug.Trace("Vertex Shader: " + err);
                }

                string LogInfo;

                GL.GetShaderInfoLog(VertexShaderObject, out LogInfo);
                if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
                {
                    Debug.Trace("Vertex Shader failed!\nLog:\n" + LogInfo);
                }
                else
                {
                    Debug.Trace("Vertex Shader compiled without complaint.");
                }

                // Load&Compile Fragment Shader

                using (StreamReader sr = new StreamReader(FSUrl))
                {
                    FragmentShaderObject = GL.CreateShader(ShaderType.FragmentShader);
                    GL.ShaderSource(FragmentShaderObject, sr.ReadToEnd());
                    GL.CompileShader(FragmentShaderObject);
                }
                GL.GetShaderInfoLog(FragmentShaderObject, out LogInfo);

                err = GL.GetError();
                if (err != ErrorCode.NoError)
                {
                    Debug.Trace("Fragment Shader: " + err);
                }

                if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
                {
                    Debug.Trace("Fragment Shader failed!\nLog:\n" + LogInfo);
                }
                else
                {
                    Debug.Trace("Fragment Shader compiled without complaint.");
                }

                // Link the Shaders to a usable Program
                ProgramObject = GL.CreateProgram();
                GL.AttachShader(ProgramObject, VertexShaderObject);
                GL.AttachShader(ProgramObject, FragmentShaderObject);

                // link it all together
                GL.LinkProgram(ProgramObject);

                err = GL.GetError();
                if (err != ErrorCode.NoError)
                {
                    Debug.Trace("LinkProgram: " + err);
                }

                GL.UseProgram(ProgramObject);

                err = GL.GetError();
                if (err != ErrorCode.NoError)
                {
                    Debug.Trace("UseProgram: " + err);
                }

                // flag ShaderObjects for delete when not used anymore
                GL.DeleteShader(VertexShaderObject);
                GL.DeleteShader(FragmentShaderObject);

                int temp;

                GL.GetProgram(ProgramObject, ProgramParameter.LinkStatus, out temp);
                Debug.Trace("Linking Program (" + ProgramObject + ") " + ((temp == 1) ? "succeeded." : "FAILED!"));
                if (temp != 1)
                {
                    GL.GetProgramInfoLog(ProgramObject, out LogInfo);
                    Debug.Trace("Program Log:\n" + LogInfo);
                }

                Debug.Trace("End of Shader build. GL Error: " + GL.GetError());

                GL.UseProgram(0);
            }
コード例 #4
0
        /// <summary>Setup OpenGL and load resources here.</summary>
        /// <param name="e">Not used.</param>
        protected override void OnLoad(EventArgs e)
        {
            this.VSync = VSyncMode.Off;

            // Check for necessary capabilities:
            string extensions = GL.GetString(StringName.Extensions);

            if (!GL.GetString(StringName.Extensions).Contains("GL_ARB_shading_language"))
            {
                throw new NotSupportedException(String.Format("This example requires OpenGL 2.0. Found {0}. Aborting.",
                                                              GL.GetString(StringName.Version).Substring(0, 3)));
            }

            if (!extensions.Contains("GL_ARB_texture_compression") ||
                !extensions.Contains("GL_EXT_texture_compression_s3tc"))
            {
                throw new NotSupportedException("This example requires support for texture compression. Aborting.");
            }

            int[] temp = new int[1];
            GL.GetInteger(GetPName.MaxTextureImageUnits, out temp[0]);
            Trace.WriteLine(temp[0] + " TMU's for Fragment Shaders found. (2 required)");

            GL.GetInteger(GetPName.MaxVaryingFloats, out temp[0]);
            Trace.WriteLine(temp[0] + " varying floats between VS and FS allowed. (6 required)");

            GL.GetInteger(GetPName.MaxVertexUniformComponents, out temp[0]);
            Trace.WriteLine(temp[0] + " uniform components allowed in Vertex Shader. (6 required)");

            GL.GetInteger(GetPName.MaxFragmentUniformComponents, out temp[0]);
            Trace.WriteLine(temp[0] + " uniform components allowed in Fragment Shader. (11 required)");
            Trace.WriteLine("");

            #region GL State

            GL.ClearColor(0.2f, 0f, 0.4f, 0f);

            GL.PointSize(10f);

            GL.Disable(EnableCap.Dither);

            GL.FrontFace(FrontFaceDirection.Ccw);
            GL.PolygonMode(MaterialFace.Front, PolygonMode.Fill);
            GL.PolygonMode(MaterialFace.Back, PolygonMode.Line);

            #endregion GL State

            #region Shaders

            string LogInfo;

            // Load&Compile Vertex Shader

            using (StreamReader sr = new StreamReader(VertexShaderFilename))
            {
                VertexShaderObject = GL.CreateShader(ShaderType.VertexShader);
                GL.ShaderSource(VertexShaderObject, sr.ReadToEnd( ));
                GL.CompileShader(VertexShaderObject);
            }

            GL.GetShaderInfoLog(VertexShaderObject, out LogInfo);
            if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
            {
                Trace.WriteLine("Vertex Shader failed!\nLog:\n" + LogInfo);
            }
            else
            {
                Trace.WriteLine("Vertex Shader compiled without complaint.");
            }

            // Load&Compile Fragment Shader

            using (StreamReader sr = new StreamReader(FragmentShaderFilename))
            {
                FragmentShaderObject = GL.CreateShader(ShaderType.FragmentShader);
                GL.ShaderSource(FragmentShaderObject, sr.ReadToEnd( ));
                GL.CompileShader(FragmentShaderObject);
            }
            GL.GetShaderInfoLog(FragmentShaderObject, out LogInfo);

            if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
            {
                Trace.WriteLine("Fragment Shader failed!\nLog:\n" + LogInfo);
            }
            else
            {
                Trace.WriteLine("Fragment Shader compiled without complaint.");
            }

            // Link the Shaders to a usable Program
            ProgramObject = GL.CreateProgram( );
            GL.AttachShader(ProgramObject, VertexShaderObject);
            GL.AttachShader(ProgramObject, FragmentShaderObject);

            // must bind the attribute before linking
            GL.BindAttribLocation(ProgramObject, AttribTangent, "AttributeTangent");

            // link it all together
            GL.LinkProgram(ProgramObject);

            // flag ShaderObjects for delete when not used anymore
            GL.DeleteShader(VertexShaderObject);
            GL.DeleteShader(FragmentShaderObject);

            GL.GetProgram(ProgramObject, GetProgramParameterName.LinkStatus, out temp[0]);
            Trace.WriteLine("Linking Program (" + ProgramObject + ") " + ((temp[0] == 1) ? "succeeded." : "FAILED!"));
            if (temp[0] != 1)
            {
                GL.GetProgramInfoLog(ProgramObject, out LogInfo);
                Trace.WriteLine("Program Log:\n" + LogInfo);
            }

            GL.GetProgram(ProgramObject, GetProgramParameterName.ActiveAttributes, out temp[0]);
            Trace.WriteLine("Program registered " + temp[0] + " Attributes. (Should be 4: Pos, UV, Normal, Tangent)");

            Trace.WriteLine("Tangent attribute bind location: " + GL.GetAttribLocation(ProgramObject, "AttributeTangent"));

            Trace.WriteLine("End of Shader build. GL Error: " + GL.GetError( ));

            #endregion Shaders

            #region Textures

            TextureLoaderParameters.MagnificationFilter = TextureMagFilter.Linear;
            TextureLoaderParameters.MinificationFilter  = TextureMinFilter.LinearMipmapLinear;
            TextureLoaderParameters.WrapModeS           = TextureWrapMode.ClampToBorder;
            TextureLoaderParameters.WrapModeT           = TextureWrapMode.ClampToBorder;
            TextureLoaderParameters.EnvMode             = TextureEnvMode.Modulate;

            ImageDDS.LoadFromDisk(TMU0_Filename, out TMU0_Handle, out TMU0_Target);
            Trace.WriteLine("Loaded " + TMU0_Filename + " with handle " + TMU0_Handle + " as " + TMU0_Target);

            ImageDDS.LoadFromDisk(TMU1_Filename, out TMU1_Handle, out TMU1_Target);
            Trace.WriteLine("Loaded " + TMU1_Filename + " with handle " + TMU1_Handle + " as " + TMU1_Target);

            #endregion Textures

            Trace.WriteLine("End of Texture Loading. GL Error: " + GL.GetError( ));
            Trace.WriteLine("");
        }
コード例 #5
0
ファイル: JuliaSetFractal.cs プロジェクト: spartajet/gears
        float UniformOffsetY = 1.8f;             // fractal vertical offset

        #endregion private Fields

        #region OnLoad

        /// <summary>
        /// Setup OpenGL and load resources here.
        /// </summary>
        /// <param name="e">Not used.</param>
        protected override void OnLoad(EventArgs e)
        {
            // Check for necessary capabilities:
            string version = GL.GetString(StringName.Version);
            int    major   = (int)version[0];
            int    minor   = (int)version[2];

            if (major < 2)
            {
                MessageBox.Show("You need at least OpenGL 2.0 to run this example. Aborting.",
                                "GLSL not supported", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                this.Exit();
            }

            this.VSync = VSyncMode.On;

            GL.Disable(EnableCap.Dither);
            GL.ClearColor(0.2f, 0f, 0.4f, 0f);

            // declare some variables for tracking which shader did compile, and which texture to use
            string[] ShaderFilenames = new string[2];
            ShaderFilenames[0] = "Data/Shaders/JuliaSet_SM3_FS.glsl";
            ShaderFilenames[1] = "Data/Shaders/JuliaSet_SM2_FS.glsl";

            byte   CurrentOption = 0;
            string LogInfo;

            #region Shaders
            // Load&Compile Vertex Shader
            using (StreamReader sr = new StreamReader("Data/Shaders/JuliaSet_VS.glsl"))
            {
                VertexShaderObject = GL.CreateShader(ShaderType.VertexShader);
                GL.ShaderSource(VertexShaderObject, sr.ReadToEnd());
                GL.CompileShader(VertexShaderObject);
            }

            GL.GetShaderInfoLog(VertexShaderObject, out LogInfo);
            if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
            {
                Trace.WriteLine("Vertex Shader Log:\n" + LogInfo);
            }
            else
            {
                Trace.WriteLine("Vertex Shader compiled without complaint.");
            }

            // Load&Compile Fragment Shader


            FragmentShaderObject = GL.CreateShader(ShaderType.FragmentShader);
            do
            {
                using (StreamReader sr = new StreamReader(ShaderFilenames[CurrentOption]))
                {
                    GL.ShaderSource(FragmentShaderObject, sr.ReadToEnd());
                    GL.CompileShader(FragmentShaderObject);
                }
                GL.GetShaderInfoLog(FragmentShaderObject, out LogInfo);

                if (LogInfo.Length > 0 && !LogInfo.Contains("hardware"))
                {
                    Trace.WriteLine("Compiling " + ShaderFilenames[CurrentOption] + " failed!\nLog:\n" + LogInfo);
                }
                else
                {
                    Trace.WriteLine("Fragment Shader compiled without complaint.");
                    break;
                }

                if (++CurrentOption > 1)
                {
                    MessageBox.Show("Neither SM2 nor SM3 Fragment Shader compiled successfully. Aborting.",
                                    "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Exit();
                }
            } while (true);

            // Link the Shaders to a usable Program
            ProgramObject = GL.CreateProgram();
            GL.AttachShader(ProgramObject, VertexShaderObject);
            GL.AttachShader(ProgramObject, FragmentShaderObject);
            GL.LinkProgram(ProgramObject);

            // make current
            GL.UseProgram(ProgramObject);

            // Flag ShaderObjects for delete when app exits
            GL.DeleteShader(VertexShaderObject);
            GL.DeleteShader(FragmentShaderObject);
            #endregion Shaders

            #region Textures

            // Load&Bind the 1D texture for color lookups
            GL.ActiveTexture(TextureUnit.Texture0); // select TMU0
            GL.GenTextures(1, out TextureObject);
            GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
            GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
            GL.TexParameter(TextureTarget.Texture1D, TextureParameterName.TextureWrapS, (int)(TextureWrapMode)All.ClampToEdge);

            using (Bitmap bitmap = new Bitmap("Data/Textures/JuliaColorTable.bmp"))
            {
                BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly,
                                                  System.Drawing.Imaging.PixelFormat.Format24bppRgb);
                GL.TexImage1D(TextureTarget.Texture1D, 0, PixelInternalFormat.Rgb8, data.Width, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgr,
                              PixelType.UnsignedByte, data.Scan0);
                bitmap.UnlockBits(data);
            }
            #endregion Textures

            Keyboard.KeyUp += KeyUp;
        }