OpenTK 4.8.2 C# Не изменять и не заменять какие-либо кадры буфера, а также не изменять цвет очистки/начала.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 OpenTK 4.8.2 C# Не изменять и не заменять какие-либо кадры буфера, а также не изменять цвет очистки/начала.

Сообщение Anonymous »

Привет, я новичок в OpenTK, но имею хорошие знания и опыт работы с C#.
Я собираюсь создать проект с открытым исходным кодом и хочу сделать это просто, используя 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»