Ejemplo n.º 1
0
        public static GLShaderProgram Create(string shaderName)
        {
            if (sShaderPrograms.TryGetValue(shaderName, out var shaderProgram))
            {
                return(shaderProgram);
            }

            string fragmentShaderFilePath = ResourceStore.GetPath(Path.Combine("Shaders", shaderName + ".frag"));
            string vertexShaderFilePath   = ResourceStore.GetPath(Path.Combine("Shaders", shaderName + ".vert"));

            if (!File.Exists(fragmentShaderFilePath) || !File.Exists(vertexShaderFilePath))
            {
                return(null);
            }

            int fragmentShader = CreateShader(ShaderType.FragmentShader, File.ReadAllText(fragmentShaderFilePath));

            if (fragmentShader == -1)
            {
                return(null);
            }

            int vertexShader = CreateShader(ShaderType.VertexShader, File.ReadAllText(vertexShaderFilePath));

            if (vertexShader == -1)
            {
                return(null);
            }

            int shaderProgramId = GL.CreateProgram();

            GL.AttachShader(shaderProgramId, fragmentShader);
            GL.AttachShader(shaderProgramId, vertexShader);
            GL.LinkProgram(shaderProgramId);

            GL.DeleteShader(fragmentShader);
            GL.DeleteShader(vertexShader);

            shaderProgram = new GLShaderProgram(shaderName, shaderProgramId);

            sShaderPrograms.Add(shaderName, shaderProgram);

            return(shaderProgram);
        }
Ejemplo n.º 2
0
 private static string GetPath(string path) => ResourceStore.GetPath("material_presets\\" + path);