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); }
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); } }
/// <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); }
/// <inheritdoc/> /// <remarks> /// <see cref="GL.DeleteProgram(int)"/> /// </remarks> public void Dispose() { GLCheck.Check(GL.DeleteProgram, m_handle); }
/// <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); }
/// <inheritdoc/> /// <remarks><see cref="GL.DeleteShader(int)"/></remarks> public void Dispose() { GLCheck.Check(GL.DeleteShader, m_handle); }
/// <inheritdoc/> public string GetInfoLog() { return(GLCheck.Check(GL.GetShaderInfoLog, m_handle)); }
/// <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); }
/// <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); }
/// <inheritdoc/> public string GetInfoLog() { return(GLCheck.Check(GL.GetProgramInfoLog, m_handle)); }
/// <inheritdoc /> /// <remarks> /// <see cref="GL.DeleteTexture(int)"/> /// </remarks> public void Dispose() { GLCheck.Check(GL.DeleteTexture, m_handle); }
public static void Bind([CanBeNull] Texture texture) { GLCheck.Check(GL.BindTexture, TextureTarget.Texture2D, texture?.m_handle ?? 0); }