using System; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; namespace StgSharp.Graphics { internal class Shader { public readonly uint programID; internal uint vertexShaderID; internal uint fragmentShaderID; public Shader() { programID = Graphic.glCreateProgram(); } public void CompileVertexShader(string shaderCode) { vertexShaderID = Graphic.CompileShader(shaderCode, ShaderType.VERTEX); Graphic.glAttachShader(programID, vertexShaderID); } public void CompileFragmentShader(string shaderCode) { fragmentShaderID = Graphic.CompileShader(shaderCode, ShaderType.FRAGMENT); Graphic.glAttachShader(programID, fragmentShaderID); } public void Link() { if (internalIO.InternalLinkShaderProgram(programID) == 0) { IntPtr logPtr = internalIO.InternalReadLog(); try { byte[] logByte = new byte[512]; Marshal.Copy(logPtr, logByte, 0, 512); string log = Encoding.UTF8.GetString(logByte); log = log.Replace("\0", ""); internalIO.InternalWriteLog(log, LogType.Error); } catch (Exception) { } } } public void Use() { Graphic.glUseProgram(programID); } } }