Графическая библиотека для игры - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день дорогие. Вдруг захотелось написать свою игру с нуля(в том числе и движок) и настал момент выбора графической библиотеки. Кроме чистых opengl и directx какие еще есть варианты? Может на их основе были написаны другие библиотеки. Предлагайте все варианты, а я уже выберут самый оптимальный вариант. Заранее спасибо.

Решение задачи: «Графическая библиотека для игры»

textual
Листинг программы
  1. using System.IO;
  2. using OpenTK.Graphics.OpenGL;
  3. using System;
  4.  
  5. namespace PointWithCustomSizeAndColour
  6. {
  7.     class ShaderLoader
  8.     {
  9.         private static string infoFileName = null;
  10.  
  11.         ///<summary>
  12.         ///Create a program object and make current
  13.         ///</summary>
  14.        ///<param name="vShader">a vertex shader program</param>
  15.         ///<param name="fShader">a fragment shader program</param>
  16.         ///<param name="program">created program</param>
  17.         ///<returns>
  18.         ///return true, if the program object was created and successfully made current
  19.         ///</returns>
  20.         public static bool InitShaders(string vShader, string fShader, out int program)
  21.         {
  22.             program = CreateProgram(vShader, fShader);
  23.             if (program == 0)
  24.             {
  25.                 File.AppendAllText(infoFileName, "Failed to create program" + Environment.NewLine);
  26.                 return false;
  27.             }
  28.  
  29.             GL.UseProgram(program);
  30.  
  31.             return true;
  32.         }
  33.  
  34.         ///<summary>
  35.         ///Load a shader from a file
  36.         ///</summary>
  37.         ///<param name="infoFileName">a file name for errors</param>
  38.         ///<param name="fileName">a file name to a shader</param>
  39.         ///<param name="shaderSource">a shader source string</param>
  40.         public static void LoadShader(string infoFileName, string fileName, out string shaderSource)
  41.         {
  42.             ShaderLoader.infoFileName = infoFileName;
  43.  
  44.             if (File.Exists(infoFileName))
  45.             {
  46.                 // Clear File
  47.                 File.WriteAllText(infoFileName, "");
  48.             }
  49.  
  50.             shaderSource = null;
  51.  
  52.             using (StreamReader sr = new StreamReader(fileName))
  53.             {
  54.                 shaderSource = sr.ReadToEnd();
  55.             }
  56.         }
  57.  
  58.         private static int CreateProgram(string vShader, string fShader)
  59.         {
  60.             // Create shader object
  61.             int vertexShader = LoadShader(ShaderType.VertexShader, vShader);
  62.             int fragmentShader = LoadShader(ShaderType.FragmentShader, fShader);
  63.             if (vertexShader == 0 || fragmentShader == 0)
  64.             {
  65.                 return 0;
  66.             }
  67.  
  68.             // Create a program object
  69.             int program = GL.CreateProgram();
  70.             if (program == 0)
  71.             {
  72.                 return 0;
  73.             }
  74.  
  75.             // Attach the shader objects
  76.             GL.AttachShader(program, vertexShader);
  77.             GL.AttachShader(program, fragmentShader);
  78.  
  79.             // Link the program object
  80.             GL.LinkProgram(program);
  81.  
  82.             // Check the result of linking
  83.             int status;
  84.             GL.GetProgram(program, GetProgramParameterName.LinkStatus, out status);
  85.             if (status == 0)
  86.             {
  87.                 string errorString = string.Format("Failed to link program: {0}" + Environment.NewLine, GL.GetProgramInfoLog(program));
  88.                 File.AppendAllText(infoFileName, errorString);
  89.                 GL.DeleteProgram(program);
  90.                 GL.DeleteShader(vertexShader);
  91.                 GL.DeleteShader(fragmentShader);
  92.                 return 0;
  93.             }
  94.  
  95.             return program;
  96.         }
  97.  
  98.         private static int LoadShader(ShaderType shaderType, string shaderSource)
  99.         {
  100.             // Create shader object
  101.             int shader = GL.CreateShader(shaderType);
  102.             if (shader == 0)
  103.             {
  104.                 File.AppendAllText(infoFileName, "Unable to create shader" + Environment.NewLine);
  105.                 return 0;
  106.             }
  107.  
  108.             // Set the shader program
  109.             GL.ShaderSource(shader, shaderSource);
  110.  
  111.             // Compile the shader
  112.             GL.CompileShader(shader);
  113.  
  114.             // Check the result of compilation
  115.             int status;
  116.             GL.GetShader(shader, ShaderParameter.CompileStatus, out status);
  117.             if (status == 0)
  118.             {
  119.                 string errorString = string.Format("Failed to compile {0} shader: {1}" + Environment.NewLine, shaderType.ToString(), GL.GetShaderInfoLog(shader));
  120.                 File.AppendAllText(infoFileName, errorString);
  121.                 GL.DeleteShader(shader);
  122.                 return 0;
  123.             }
  124.  
  125.             return shader;
  126.         }
  127.     }
  128. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут