Графическая библиотека для игры - C#
Формулировка задачи:
Добрый день дорогие. Вдруг захотелось написать свою игру с нуля(в том числе и движок) и настал момент выбора графической библиотеки. Кроме чистых opengl и directx какие еще есть варианты? Может на их основе были написаны другие библиотеки. Предлагайте все варианты, а я уже выберут самый оптимальный вариант. Заранее спасибо.
Решение задачи: «Графическая библиотека для игры»
textual
Листинг программы
using System.IO; using OpenTK.Graphics.OpenGL; using System; namespace PointWithCustomSizeAndColour { class ShaderLoader { private static string infoFileName = null; ///<summary> ///Create a program object and make current ///</summary> ///<param name="vShader">a vertex shader program</param> ///<param name="fShader">a fragment shader program</param> ///<param name="program">created program</param> ///<returns> ///return true, if the program object was created and successfully made current ///</returns> public static bool InitShaders(string vShader, string fShader, out int program) { program = CreateProgram(vShader, fShader); if (program == 0) { File.AppendAllText(infoFileName, "Failed to create program" + Environment.NewLine); return false; } GL.UseProgram(program); return true; } ///<summary> ///Load a shader from a file ///</summary> ///<param name="infoFileName">a file name for errors</param> ///<param name="fileName">a file name to a shader</param> ///<param name="shaderSource">a shader source string</param> public static void LoadShader(string infoFileName, string fileName, out string shaderSource) { ShaderLoader.infoFileName = infoFileName; if (File.Exists(infoFileName)) { // Clear File File.WriteAllText(infoFileName, ""); } shaderSource = null; using (StreamReader sr = new StreamReader(fileName)) { shaderSource = sr.ReadToEnd(); } } private static int CreateProgram(string vShader, string fShader) { // Create shader object int vertexShader = LoadShader(ShaderType.VertexShader, vShader); int fragmentShader = LoadShader(ShaderType.FragmentShader, fShader); if (vertexShader == 0 || fragmentShader == 0) { return 0; } // Create a program object int program = GL.CreateProgram(); if (program == 0) { return 0; } // Attach the shader objects GL.AttachShader(program, vertexShader); GL.AttachShader(program, fragmentShader); // Link the program object GL.LinkProgram(program); // Check the result of linking int status; GL.GetProgram(program, GetProgramParameterName.LinkStatus, out status); if (status == 0) { string errorString = string.Format("Failed to link program: {0}" + Environment.NewLine, GL.GetProgramInfoLog(program)); File.AppendAllText(infoFileName, errorString); GL.DeleteProgram(program); GL.DeleteShader(vertexShader); GL.DeleteShader(fragmentShader); return 0; } return program; } private static int LoadShader(ShaderType shaderType, string shaderSource) { // Create shader object int shader = GL.CreateShader(shaderType); if (shader == 0) { File.AppendAllText(infoFileName, "Unable to create shader" + Environment.NewLine); return 0; } // Set the shader program GL.ShaderSource(shader, shaderSource); // Compile the shader GL.CompileShader(shader); // Check the result of compilation int status; GL.GetShader(shader, ShaderParameter.CompileStatus, out status); if (status == 0) { string errorString = string.Format("Failed to compile {0} shader: {1}" + Environment.NewLine, shaderType.ToString(), GL.GetShaderInfoLog(shader)); File.AppendAllText(infoFileName, errorString); GL.DeleteShader(shader); return 0; } return shader; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д