Exemple #1
0
        public Texture(
            Color32[] data,
            uint width,
            uint height,
            bool generateMipMap = false,
            TextureWrapMode horizontalWrapMode = TextureWrapMode.Repeat,
            TextureWrapMode verticalWrapMode   = TextureWrapMode.Repeat
            )
        {
            var hmode   = (uint)horizontalWrapMode;
            var vmode   = (uint)verticalWrapMode;
            var magMode = (uint)TextureMagFilter.Linear;
            var minMode = (uint)(generateMipMap ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.Linear);

            m_handle = GLCheck.Check(GL.GenTexture);
            GLCheck.Check(GL.BindTexture, TextureTarget.Texture2D, m_handle);
            GLCheck.Check(GL.TexParameterI, TextureTarget.Texture2D, TextureParameterName.TextureWrapS, ref hmode);
            GLCheck.Check(GL.TexParameterI, TextureTarget.Texture2D, TextureParameterName.TextureWrapT, ref vmode);
            GLCheck.Check(GL.TexParameter, TextureTarget.Texture2D, TextureParameterName.TextureBorderColor, new[] { 0f, 0f, 0f, 0f });
            GLCheck.Check(GL.TexParameterI, TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, ref magMode);
            GLCheck.Check(GL.TexParameterI, TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, ref minMode);
            GLCheck.Check(GL.TexImage2D, TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba32f, (int)width, (int)height, 0, PixelFormat.Rgba, PixelType.Float, data);
            if (generateMipMap)
            {
                GLCheck.Check(GL.GenerateMipmap, GenerateMipmapTarget.Texture2D);
            }
            GLCheck.Check(GL.BindTexture, TextureTarget.Texture2D, 0);
        }
Exemple #2
0
 private void Initialize(string shaderSource)
 {
     try
     {
         GLCheck.Check(GL.ShaderSource, m_handle, shaderSource);
         GLCheck.Check(GL.CompileShader, m_handle);
     }
     catch (OpenGLCallException callException)
     {
         var error = GL.GetShaderInfoLog(m_handle);
         throw new ShaderCompilationException(error, callException);
     }
 }
Exemple #3
0
 /// <summary>
 /// Creates a new shader program with the specified partial shaders
 /// </summary>
 /// <param name="shaders">The shaders to link as a full shader program</param>
 /// <remarks>
 /// <see cref="GL.LinkProgram(int)"/>
 /// <see cref="GL.GetUniformLocation(int,string)"/>
 /// </remarks>
 public Shader(params PartialShader[] shaders)
 {
     m_isProgram = true;
     try
     {
         m_handle = GLCheck.Check(GL.CreateProgram);
         foreach (var shader in shaders)
         {
             shader.AttachToProgram(m_handle);
         }
         GLCheck.Check(GL.LinkProgram, m_handle);
         m_transformId = GLCheck.Check(GL.GetUniformLocation, m_handle, TRANSFORM_UNIFORM_NAME);
     }
     catch (OpenGLCallException e)
     {
         var builder = new StringBuilder();
         builder.AppendLine(GetInfoLog());
         foreach (var shader in shaders)
         {
             builder.AppendLine(shader.GetInfoLog());
         }
         throw new ShaderCompilationException(builder.ToString(), e);
     }
 }
 public VertexArrayObject()
 {
     handle = GLCheck.Check(GL.GenVertexArray);
 }
Exemple #5
0
 /// <inheritdoc/>
 /// <remarks>
 /// <see cref="GL.DeleteProgram(int)"/>
 /// </remarks>
 public void Dispose()
 {
     GLCheck.Check(GL.DeleteProgram, m_handle);
 }
Exemple #6
0
 /// <summary>
 /// Attaches this partial shader to the specified program (<paramref name="program"/>)
 /// </summary>
 /// <param name="program">This value should be a pointer to an opengl shader program object</param>
 public void AttachToProgram(int program)
 {
     GLCheck.Check(GL.AttachShader, program, m_handle);
 }
Exemple #7
0
 /// <inheritdoc/>
 /// <remarks><see cref="GL.DeleteShader(int)"/></remarks>
 public void Dispose()
 {
     GLCheck.Check(GL.DeleteShader, m_handle);
 }
Exemple #8
0
 /// <inheritdoc/>
 public string GetInfoLog()
 {
     return(GLCheck.Check(GL.GetShaderInfoLog, m_handle));
 }
Exemple #9
0
 /// <summary>
 /// Creates the handle of this shader part with the specified <see cref="ShaderType"/>
 /// </summary>
 /// <param name="type"></param>
 /// <remarks><see cref="GL.CreateShader"/></remarks>
 private PartialShader(ShaderType type)
 {
     Type     = type;
     m_handle = GLCheck.Check(GL.CreateShader, type);
 }
Exemple #10
0
 /// <summary>
 /// Activates the specified shader
 /// </summary>
 /// <remarks>
 /// Calling this method with null is equivalent to unbinding the currently active shader program.
 /// <see cref="GL.UseProgram(int)"/>
 /// </remarks>
 public static void Activate([CanBeNull] Shader shader)
 {
     GLCheck.Check(GL.UseProgram, shader?.m_handle ?? 0);
 }
Exemple #11
0
 /// <inheritdoc/>
 public string GetInfoLog()
 {
     return(GLCheck.Check(GL.GetProgramInfoLog, m_handle));
 }
Exemple #12
0
 /// <inheritdoc />
 /// <remarks>
 /// <see cref="GL.DeleteTexture(int)"/>
 /// </remarks>
 public void Dispose()
 {
     GLCheck.Check(GL.DeleteTexture, m_handle);
 }
Exemple #13
0
 public static void Bind([CanBeNull] Texture texture)
 {
     GLCheck.Check(GL.BindTexture, TextureTarget.Texture2D, texture?.m_handle ?? 0);
 }