Я пишу программу для создания окна SDL3 в C#.
Я скомпилировал SDL3 2.30.5 из следующего репозитория: https://github.com/libsdl-org/sdl под win x64, используя Rider 2024.1.2. />
using SDL3;
namespace SDL3Test
{
class Program
{
private static bool _loop;
static void Main(string[] args)
{
if (SDL.Init(SDL.InitFlags.Video) < 0)
{
Console.WriteLine($"SDL could not initialize! SDL_Error: {SDL.GetError()}");
return;
}
var window = SDL.CreateWindow("SDL Create Window", 800, 600, SDL.WindowFlags.OpenGL);
if (window == IntPtr.Zero)
{
Console.WriteLine($"Window could not be created! SDL_Error: {SDL.GetError()}");
return;
}
_loop = true;
while (_loop)
{
while (SDL.PollEvent(out var sdlEvent) != 0)
{
if (sdlEvent == SDL.EventType.Quit)
{
_loop = false;
}
}
}
SDL.DestroyWindow(window);
Console.WriteLine($"SDL_Error: {SDL.GetError()}");
SDL.Quit();
}
}
}
< /code>
Вот функция CreateWindow: < /p>
[LibraryImport(SDLLibrary)]
[UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })]
private static unsafe partial IntPtr SDL_CreateWindow(byte* title, int w, int h, WindowFlags flags);
public static unsafe IntPtr CreateWindow(string? title, int w, int h, WindowFlags flags)
{
var utf8TitleBufSize = Utf8Size(title);
var utf8Title = stackalloc byte[utf8TitleBufSize];
return SDL_CreateWindow(Utf8Encode(title, utf8Title, utf8TitleBufSize), w, h, flags);
}
< /code>
и вот функция Drestomwindow: < /p>
[LibraryImport(SDLLibrary, EntryPoint = "SDL_DestroyWindow")]
[UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })]
public static unsafe partial void DestroyWindow(IntPtr window);
< /code>
Помощные функции: < /p>
private static int Utf8Size(string? str)
{
if (str == null)
{
return 0;
}
return str.Length * 4 + 1;
}
private static unsafe byte* Utf8Encode(string? str, byte* buffer, int bufferSize)
{
if (str == null)
{
return (byte*)0;
}
fixed (char* strPtr = str)
{
Encoding.UTF8.GetBytes(strPtr, str.Length + 1, buffer, bufferSize);
}
return buffer;
}
private static unsafe string? UTF8_ToManaged(IntPtr s, bool freePtr = false)
{
if (s == IntPtr.Zero) return null;
var ptr = (byte*)s;
while (*ptr != 0) ptr++;
var result = Encoding.UTF8.GetString((byte*)s, (int)(ptr - (byte*)s));
if (freePtr) Free(s);
return result;
}
Проблема в том, что когда я вызываю sdl.destroywindow (window);, я получаю ошибку sdl_error: неверное окно через geterror.
Что может вызвать эту проблему?
Я пишу программу для создания окна SDL3 в C#. Я скомпилировал SDL3 2.30.5 из следующего репозитория: https://github.com/libsdl-org/sdl под win x64, используя Rider 2024.1.2. />[code]using SDL3;
namespace SDL3Test { class Program { private static bool _loop;
static void Main(string[] args) { if (SDL.Init(SDL.InitFlags.Video) < 0) { Console.WriteLine($"SDL could not initialize! SDL_Error: {SDL.GetError()}"); return; }
var window = SDL.CreateWindow("SDL Create Window", 800, 600, SDL.WindowFlags.OpenGL);
if (window == IntPtr.Zero) { Console.WriteLine($"Window could not be created! SDL_Error: {SDL.GetError()}"); return; }
_loop = true;
while (_loop) { while (SDL.PollEvent(out var sdlEvent) != 0) { if (sdlEvent == SDL.EventType.Quit) { _loop = false; } } }
private static unsafe string? UTF8_ToManaged(IntPtr s, bool freePtr = false) { if (s == IntPtr.Zero) return null;
var ptr = (byte*)s; while (*ptr != 0) ptr++;
var result = Encoding.UTF8.GetString((byte*)s, (int)(ptr - (byte*)s));
if (freePtr) Free(s); return result; } [/code] Проблема в том, что когда я вызываю sdl.destroywindow (window);, я получаю ошибку sdl_error: неверное окно через geterror. Что может вызвать эту проблему?
Я пишу программу для создания окна SDL3 в C#.
Я скомпилировал SDL3 2.30.5 из следующего репозитория: под win x64, используя Rider 2024.1.2. /> using SDL3;
namespace SDL3Test
{
class Program
{
private static bool _loop;
Я создаю программу WASM, используя SDL2 и Emscripten. Он создает окно размером 1000x1000, используя SDL_CreateWindow( scribbles , SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, context.w, context.h, 0);. У меня есть очень простой файл .html,...
Я создаю программу WASM, используя SDL2 и Emscripten. Он создает окно размером 1000x1000, используя SDL_CreateWindow( scribbles , SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, context.w, context.h, 0);. У меня есть очень простой файл .html,...
Я создаю программу WASM, используя SDL2 и Emscripten. Он создает окно размером 1000x1000, используя SDL_CreateWindow( scribbles , SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, context.w, context.h, 0);. У меня есть очень простой файл .html,...
Я пытаюсь выучить imgui, сначала создать проект, используя свою библиотеку. Но сначала я хотел запустить один из примеров, найденных в репозитории GitHub. Я не использую IDE, только мой Mac Terminal. Поэтому я использую Cmake для создания проекта....