Я собираюсь создать проект с открытым исходным кодом и хочу сделать это просто, используя C#.
Я знаю OpenGL и опробовал его на C++.
Я собирался выполнить настройку в Visual Studio, но у меня получилось так, что я смог создать окно с заголовком, но когда я пытаюсь настроить основы рендерер, я застрял.
Я шаг за шагом следил за этим видео и добавлял кое-что сам. Ссылка на видео, которое я нашел
Вот исходный код:
Код: Выделить всё
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using OpenTK.Graphics.OpenGL4;
using OpenTK.Windowing.Desktop;
using OpenTK.Windowing.Common;
using OpenTK.Windowing.GraphicsLibraryFramework;
using OpenTK.Mathematics;
namespace BlockyBuild {
public interface Script {
///
/// Runs once on the first frame
///
public void OnStart();
///
/// Runs once on each frame update
///
///
public void OnUpdate(float delta);
///
/// Runs once on each input event
///
///
public void OnInput(string inputEvent);
}
public abstract class GameObject {
public abstract string UUID { get; set; }
public abstract Vector3i Position { get; set; }
public abstract Script Script { get; set; }
public abstract List Children { get; set; }
}
public struct Shader {
public int id;
}
public struct ShaderProgram {
public int id;
}
public static class Game {
private static List GameObjects = new List();
// Add a game object to the game object list
public static void AddGameObject(GameObject gameObject) {
GameObjects.Add(gameObject);
}
// Remove a game object from the game object list
public static void RemoveGameObject(GameObject gameObject) {
GameObjects.Remove(gameObject);
}
// Load shader from path
private static Shader LoadShader(string path, ShaderType type) {
int ID = GL.CreateShader(type);
try {
GL.ShaderSource(ID, File.ReadAllText(path));
GL.CompileShader(ID);
string infoLog = GL.GetShaderInfoLog(ID);
if (!string.IsNullOrEmpty(infoLog))
throw new Exception(infoLog);
} catch {
throw new Exception($"Error: No shader file found on path {path}.");
}
return new Shader() { id = ID };
}
// Load shader program from string paths
private static ShaderProgram LoadShaderProgram(string vertexShaderLocation, string fragmentShaderLocation) {
int id = GL.CreateProgram();
Shader vertexShader = LoadShader(vertexShaderLocation, ShaderType.VertexShader);
Shader fragmentShader = LoadShader(fragmentShaderLocation, ShaderType.FragmentShader);
GL.AttachShader(id, vertexShader.id);
GL.AttachShader(id, fragmentShader.id);
GL.LinkProgram(id);
GL.DetachShader(id, vertexShader.id);
GL.DetachShader(id, fragmentShader.id);
GL.DeleteShader(vertexShader.id);
GL.DeleteShader(fragmentShader.id);
string infoLog = GL.GetProgramInfoLog(id);
if (!string.IsNullOrEmpty(infoLog))
throw new Exception(infoLog);
return new ShaderProgram() { id = id };
}
static void Main(string[] args) {
// Setup game window
// set window settings
GameWindowSettings gws = GameWindowSettings.Default;
NativeWindowSettings nws = NativeWindowSettings.Default;
// Set max FPS (0.0 means no limit)
gws.UpdateFrequency = 0.0;
// Setup API verson
nws.APIVersion = Version.Parse("4.1.0");
nws.ClientSize = new Vector2i(1280, 720);
nws.Title = "Blocky Build";
GameWindow window = new GameWindow(gws, nws);
// Window update frame function
window.UpdateFrame += (args) => {
};
// Load function
ShaderProgram shaderProgram = new ShaderProgram() { id = 0 };
window.Load += () => {
string rootFolder = "../../../Shaders/";
shaderProgram = LoadShaderProgram(rootFolder + "vertex.glsl", rootFolder + "fragment.glsl");
};
// Render frame function
window.RenderFrame += (args) => {
GL.UseProgram(shaderProgram.id);
GL.ClearColor(1.0f, 0, 0, 1.0f);
GL.Clear(ClearBufferMask.ColorBufferBit);
window.SwapBuffers();
};
window.Run();
}
}
}
Я пытался создать окно с фоном чтения, используя OpenTK 4.8.2, чтобы проверить, правильно ли я его настроил.
У меня появилось окно с белым экраном и заголовком.
Я не уверен, что это неправильная настройка или я делаю что-то глупое, но все, что я получил, это белый экран .
Я использую Visual Studio 2022 и настроил OpenTK с помощью NuGet.
Подробнее здесь: https://stackoverflow.com/questions/788 ... e-not-chan