Moved to D and conceived one project. But I just can not set up a binding and documentation for this language. Can you advise something?

  • one
    details? - Vladimir Gordeev
  • details of what? I can not find the sdl binding to the D language. What can you advise? - Daniel Kolyasnikov
  • Advise to throw D? - Vladimir Gordeev
  • @VladimirGordeev lol - Vladimir Gamalyan
  • Try github.com/DerelictOrg/DerelictSDL2 - Vladimir Gamalyan

3 answers 3

When I was tinkering with Di, I used Derelict . What is the support at the moment - HZ.

    DerelictSDL

    Usage example - see the implementation in DlangUI

    SDL backend for DlangUI

      module sdl2; import std.string, std.file, std.conv, std.algorithm, std.bitmanip; Мышка мышка; Клавиатура клавиатура; class Окно { int ш, в; SDL_Window* окно; SDL_Renderer* рен; this(string стр, int ш, int в, bool vsync = да){ this.ш = ш; this.в = в; окно = SDL_CreateWindow(стр.toStringz, 0x1FFF0000, 0x1FFF0000, ш, в, 0b100000); рен = SDL_CreateRenderer(окно, -1, vsync<<2); заголовок = стр; if("favicon.png".exists){ auto img = "favicon.png".read; SDL_SetWindowIcon(окно, IMG_Load_RW(SDL_RWFromMem(img.ptr, img.length), 1)); } } ~this(){ SDL_DestroyRenderer(рен); SDL_DestroyWindow(окно); } void заголовок(string с){ SDL_SetWindowTitle(окно, с.toStringz); } string заголовок(){ return SDL_GetWindowTitle(окно).fromStringz.to!string; } bool нв_екр; bool на_весь_екран(){ return нв_екр; } void на_весь_екран(bool b){ if(b){ DisplayMode дм; SDL_GetDesktopDisplayMode(0, &дм); SDL_SetWindowFullscreen(окно, 1); SDL_SetWindowSize(окно, дм.ш, дм.в); нв_екр = да; ш = дм.ш; в = дм.в; }else{ SDL_SetWindowFullscreen(окно, 0); SDL_SetWindowSize(окно, 640, 480); нв_екр = нет; ш = 640; в = 480; } } void цвет_рисования(uint ц){ ubyte[4] m = *cast(ubyte[4]*)& ц; SDL_SetRenderDrawColor(рен, m[3], m[2], m[1], m[0]); } void рисовать(Точка т){ SDL_RenderDrawPoint(рен, т.x, т.y); } void рисовать(Линия л, int цвет = 0x000000FF){ цвет_рисования(цвет); SDL_RenderDrawLine(рен, л.а.x, л.а.y, л.б.x, л.б.y); } void рисовать(Прямоуг п, int заполнение, int контур = 0){ if(заполнение & 0xFF){ цвет_рисования(заполнение); SDL_RenderFillRect(рен, &п); } if(контур & 0xFF){ цвет_рисования(контур); SDL_RenderDrawRect(рен, &п); } } void рисовать(Изображение и, Точка т, ubyte отр = 0){ Прямоуг п = {т, и.ш, и.в}; SDL_RenderCopyEx(рен, и.текстура, null, &п, 0, null, отр); } bool выйти; void выход(){ выйти = да; } bool цикл(){ SDL_RenderPresent(рен); SDL_SetRenderDrawColor(рен, 255, 255, 255, 255); SDL_RenderClear(рен); Событие с; мышка.лкм_клик = нет; мышка.пкм_клик = нет; клавиатура = Клавиатура(); while(SDL_PollEvent(&с)){ if(с.тип == ТипСобытия.WindowEvent && с.window.event == WindowEvent.resized){ SDL_GetWindowSize(окно, &ш, &в); } if(с.тип == ТипСобытия.выход || выйти) return 0; if(с.тип == ТипСобытия.перемещение_мыши) мышка.поз = с.мышка.поз; if(с.тип == ТипСобытия.кнопка_клавиатуры_нажата) клавиатура.кнопки ~= cast(Клавиатура.Кнопка)с.клавиатура.scancode; if(с.тип == ТипСобытия.ввод_текста) клавиатура.ввод ~= с.текст.text.ptr.fromStringz; if(с.тип == ТипСобытия.кнопка_мыши_нажата){ if(с.мышка.кнопка == 1){ мышка.лкм = да; мышка.лкм_клик = да; } if(с.мышка.кнопка == 3){ мышка.пкм = да; мышка.пкм_клик = да; } } if(с.тип == ТипСобытия.кнопка_мыши_отпущена){ if(с.мышка.кнопка == 1) мышка.лкм = нет; if(с.мышка.кнопка == 3) мышка.пкм = нет; } } return 1; } } struct Мышка { Точка поз; bool лкм, пкм, лкм_клик, пкм_клик; } struct Клавиатура { Кнопка[] кнопки; string ввод; bool opDispatch(string стр)(){ return кнопки.canFind(стр.to!Кнопка); } enum Кнопка { a = 4, b = 5, c = 6, d = 7, e = 8, f = 9, g = 10, h = 11, i = 12, j = 13, k = 14, l = 15, m = 16, n = 17, o = 18, p = 19, q = 20, r = 21, s = 22, t = 23, u = 24, v = 25, w = 26, x = 27, y = 28, z = 29, _1 = 30, _2 = 31, _3 = 32, _4 = 33, _5 = 34, _6 = 35, _7 = 36, _8 = 37, _9 = 38, _0 = 39, enter = 40, esc = 41, backspace = 42, tab = 43, пробел = 44, capslock = 57, f1 = 58, f2 = 59, f3 = 60, f4 = 61, f5 = 62, f6 = 63, f7 = 64, f8 = 65, f9 = 66, f10 = 67, f11 = 68, f12 = 69, lctrl = 224, lshift = 225, lalt = 226, lgui = 227, rctrl = 228, rshift = 229, ralt = 230, rgui = 231, printscreen = 70, scrolllock = 71, pause = 72, insert = 73, home = 74, pgup = 75, del = 76, end = 77, pgdn = 78, right = 79, left = 80, down = 81, up = 82, } } class Изображение { SDL_Texture* текстура; int ш, в; this(Окно о, string s){ void[] buf = s.read; SDL_Surface* sf = IMG_Load_RW(SDL_RWFromMem(buf.ptr, buf.length), 1); текстура = SDL_CreateTextureFromSurface(о.рен, sf); ш = sf.ш; в = sf.в; SDL_FreeSurface(sf); } this(SDL_Texture* тк = null, int ш = 0, int в = 0){ this.текстура = тк; this.ш = ш; this.в = в; } ~this(){ SDL_DestroyTexture(текстура); } } auto текст(Окно о, Шрифт шрифт, string текст, int цвет = 0xFFFFFFFF){ if(текст == ""){ return new Изображение(); } SDL_Surface* sf = TTF_RenderUTF8_Solid(шрифт.font, текст.toStringz, цвет); SDL_Texture* текстура = SDL_CreateTextureFromSurface(о.рен, sf); auto изж = new Изображение(текстура, sf.ш, sf.в); SDL_FreeSurface(sf); return изж; } auto текст(Окно о, Шрифт шрифт, int н, string текст, int цвет = 0xFFFFFFFF){ if(текст == ""){ return new Изображение(); } SDL_Surface* sf = TTF_RenderUTF8_Blended_Wrapped(шрифт.font, текст.toStringz, цвет, н); SDL_Texture* текстура = SDL_CreateTextureFromSurface(о.рен, sf); auto изж = new Изображение(текстура, sf.ш, sf.в); SDL_FreeSurface(sf); return изж; } class Звук { Mix_Chunk* m; this(string s){ void[] buf = s.read; m = Mix_LoadWAV_RW(SDL_RWFromMem(buf.ptr, buf.length), 1); } void звучать(){ Mix_PlayChannelTimed(-1, m, 0, 0); } } class Музыка { Mix_Music* m; this(string s){ void[] buf = s.read; m = Mix_LoadMUS_RW(SDL_RWFromMem(buf.ptr, buf.length), 1); } void играть(){ Mix_PlayMusic(m, -1); } } class Шрифт { int size; TTF_Font* font; this(string s, int size){ this.size = size; void[] buf = s.read; font = TTF_OpenFontRW(SDL_RWFromMem(buf.ptr, buf.length), 1, size); } // ~this(){ writeln(font); TTF_CloseFont(font); } } pragma(lib, "SDL2"); pragma(lib, "SDL2_image"); static this(){ SDL_Init(0b0100_0000_0011_0001); // timer audio video events IMG_Init(0b11); // png jpg bmp Mix_Init(0b11111); // FLUIDSYNTH OGG MP3 MODPLUG MOD FLAC Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 4096); TTF_Init(); } static ~this(){ IMG_Quit(); TTF_Quit(); Mix_Quit(); SDL_Quit(); } struct RWops; extern(C){ int SDL_Init(uint); void SDL_Quit(); int IMG_Init(int); int IMG_Quit(); int SDL_InitSubSystem(uint); void SDL_QuitSubSystem(uint); RWops* SDL_RWFromMem(void*, int); SDL_Surface* IMG_Load_RW(RWops*, int); int IMG_SavePNG_RW(SDL_Surface*, RWops*, int); char* SDL_GetError(); int SDL_PollEvent(Событие*); void SDL_FreeSurface(SDL_Surface*); int SDL_SetClipboardText(char*); char* SDL_GetClipboardText(); bool SDL_HasClipboardText(); } enum ТипСобытия { выход = 0x100, APP_TERMINATING, APP_LOWMEMORY, APP_WILLENTERBACKGROUND, APP_DIDENTERBACKGROUND, APP_WILLENTERFOREGROUND, APP_DIDENTERFOREGROUND, WindowEvent = 0x200, SysWmEvent, кнопка_клавиатуры_нажата = 0x300, кнопка_клавиатуры_отпущена, TEXTEDITING, ввод_текста, KEYMAPCHANGED, перемещение_мыши = 0x400, кнопка_мыши_нажата, кнопка_мыши_отпущена, MouseWhell, CLIPBOARDUPDATE = 0x900, DROPFILE = 0x1000, AUDIODEVICEADDED = 0x1100, AUDIODEVICEREMOVED, RENDER_TARGETS_RESET = 0x2000, RENDER_DEVICE_RESET = 0x2001, USEREVENT = 0x8000 } struct Событие { ТипСобытия тип; uint timestamp; union{ SDL_WindowEvent window; SDL_KeyboardEvent клавиатура; SDL_TextEditingEvent edit; SDL_TextInputEvent текст; SDL_MouseEvent мышка; SDL_MouseWheelEvent wheel; SDL_AudioDeviceEvent adevice; SDL_UserEvent user; SDL_TouchFingerEvent finger; SDL_MultiGestureEvent gesture; SDL_DropEvent drop; } } enum WindowEvent : ubyte { none, shown, hidden, exposed, moved, resized, size_changed, minimized, maximized, restored, enter, leave, focus_gained, focus_lost, close } struct SDL_WindowEvent { uint windowID; WindowEvent event; ubyte padding1; ubyte padding2; ubyte padding3; int data1; int data2; } struct SDL_KeyboardEvent { uint windowID; ubyte state; ubyte repeat; ubyte padding2; ubyte padding3; int scancode; int keycode; ushort mod; uint unicode; } struct SDL_TextEditingEvent { uint windowID; char[32] text; int start; int length; } struct SDL_TextInputEvent { uint windowID; char[32] text; } struct SDL_MouseEvent { uint windowID; uint which; ubyte кнопка; ubyte state2; ubyte clicks; ubyte padding1; Точка поз; Точка rel; } struct SDL_MouseWheelEvent { uint windowID; uint which; Точка pos; uint direction; } struct SDL_ControllerDeviceEvent { int which; } struct SDL_AudioDeviceEvent { uint which; ubyte iscapture; ubyte padding1; ubyte padding2; ubyte padding3; } struct SDL_TouchFingerEvent { long touchId; long fingerId; float x, y; float dx, dy; float pressure; } struct SDL_MultiGestureEvent { long touchId; float dTheta; float dDist; float x, y; ushort numFingers; ushort padding; } struct SDL_DropEvent { char* file; } struct SDL_UserEvent { uint windowID; int code; void* data1; void* data2; } extern(C){ int SDL_GetNumRenderDrivers(); int SDL_GetRenderDriverInfo(int, SDL_RendererInfo*); int SDL_CreateWindowAndRenderer(int, int, uint, SDL_Window**, SDL_Renderer**); SDL_Renderer* SDL_CreateRenderer(SDL_Window*, int, uint); SDL_Renderer* SDL_CreateSoftwareRenderer(SDL_Surface*); SDL_Renderer* SDL_GetRenderer(SDL_Window*); int SDL_GetRendererInfo(SDL_Renderer*, SDL_RendererInfo*); int SDL_GetRendererOutputSize(SDL_Renderer*, int*, int*); SDL_Texture* SDL_CreateTexture(SDL_Renderer*, uint, int, int, int); SDL_Texture* SDL_CreateTextureFromSurface(SDL_Renderer*, SDL_Surface*); int SDL_QueryTexture(SDL_Texture*, uint*, int*, int*, int*); int SDL_SetTextureColorMod(SDL_Texture*, ubyte, ubyte, ubyte); int SDL_GetTextureColorMod(SDL_Texture*, ubyte*, ubyte*, ubyte*); int SDL_SetTextureAlphaMod(SDL_Texture*, ubyte); int SDL_GetTextureAlphaMod(SDL_Texture*, ubyte*); int SDL_SetTextureBlendMode(SDL_Texture*, BlendMode); int SDL_GetTextureBlendMode(SDL_Texture*, BlendMode*); int SDL_UpdateTexture(SDL_Texture*, Прямоуг*, void*, int); int SDL_UpdateYUVTexture(SDL_Texture*, Прямоуг*, ubyte*, int, ubyte*, int, ubyte*, int); int SDL_LockTexture(SDL_Texture*, Прямоуг*, void**, int*); int SDL_UnlockTexture(SDL_Texture*); bool SDL_RenderTargetSupported(SDL_Renderer*); int SDL_SetRenderTarget(SDL_Renderer*, SDL_Texture*); SDL_Texture* SDL_GetRenderTarget(SDL_Renderer*); int SDL_RenderSetClipRect(SDL_Renderer*, Прямоуг*); void SDL_RenderGetClipRect(SDL_Renderer* renderer, Прямоуг*); int SDL_RenderSetLogicalSize(SDL_Renderer*, int, int); void SDL_RenderGetLogicalSize(SDL_Renderer*, int*, int*); int SDL_RenderSetViewport(SDL_Renderer*, Прямоуг*); void SDL_RenderGetViewport(SDL_Renderer*, Прямоуг*); bool SDL_RenderIsClipEnabled(SDL_Renderer*); int SDL_RenderSetScale(SDL_Renderer*, float, float); int SDL_RenderGetScale(SDL_Renderer*, float*, float*); int SDL_SetRenderDrawColor(SDL_Renderer*, ubyte, ubyte, ubyte, ubyte); int SDL_GetRenderDrawColor(SDL_Renderer*, ubyte*, ubyte*, ubyte*, ubyte*); int SDL_SetRenderDrawBlendMode(SDL_Renderer*, BlendMode); int SDL_GetRenderDrawBlendMode(SDL_Renderer*, BlendMode*); int SDL_RenderClear(SDL_Renderer*); int SDL_RenderDrawPoint(SDL_Renderer*, int, int); int SDL_RenderDrawPoints(SDL_Renderer*, Точка*, int); int SDL_RenderDrawLine(SDL_Renderer*, int, int, int, int); int SDL_RenderDrawLines(SDL_Renderer*, Точка*, int); int SDL_RenderDrawRect(SDL_Renderer*, Прямоуг*); int SDL_RenderDrawRects(SDL_Renderer*, Прямоуг*, int); int SDL_RenderFillRect(SDL_Renderer*, Прямоуг*); int SDL_RenderFillRects(SDL_Renderer*, Прямоуг*, int); int SDL_RenderCopy(SDL_Renderer*, SDL_Texture*, Прямоуг*, Прямоуг*); int SDL_RenderCopyEx(SDL_Renderer*, SDL_Texture*, Прямоуг*, Прямоуг*, double, Точка*, ubyte); int SDL_RenderReadPixels(SDL_Renderer*, Прямоуг*, uint, void*, int); void SDL_RenderPresent(SDL_Renderer*); void SDL_DestroyTexture(SDL_Texture*); void SDL_DestroyRenderer(SDL_Renderer*); int SDL_GL_BindTexture(SDL_Texture*, float*, float*); int SDL_GL_UnbindTexture(SDL_Texture*); } struct SDL_RendererInfo { char* name; uint flags; uint num_texture_formats; uint[16] texture_formats; int max_texture_width; int max_texture_height; } enum TextureAccess { Static, streaming, target } enum TextureModulate { none, color, alpha } struct SDL_Renderer; struct SDL_Texture; struct BlendMode { mixin(bitfields!( bool, "blend", 1, bool, "add", 1, bool, "mod", 1, uint, "", 29 )); } struct SDL_BlitMap; struct SDL_PixelFormat; struct SDL_Surface { uint flags; SDL_PixelFormat* format; int ш, в; int pitch; void* пиксели; void* userdata; int locked; void* lock_data; Прямоуг clip_rect; SDL_BlitMap* map; int refcount; } extern(C){ int SDL_GetNumVideoDrivers(); char* SDL_GetVideoDriver(int); int SDL_VideoInit(char*); void SDL_VideoQuit(); char* SDL_GetCurrentVideoDriver(); int SDL_GetNumVideoDisplays(); char* SDL_GetDisplayName(int); int SDL_GetDisplayBounds(int, Прямоуг*); int SDL_GetDisplayDPI(int, float*, float*, float*); int SDL_GetNumDisplayModes(int); int SDL_GetDisplayMode(int, int, DisplayMode*); int SDL_GetDesktopDisplayMode(int, DisplayMode*); int SDL_GetCurrentDisplayMode(int, DisplayMode*); DisplayMode* SDL_GetClosestDisplayMode(int, DisplayMode*, DisplayMode*); int SDL_GetWindowDisplayIndex(SDL_Window*); int SDL_SetWindowDisplayMode(SDL_Window*, DisplayMode*); int SDL_GetWindowDisplayMode(SDL_Window*, DisplayMode*); uint SDL_GetWindowPixelFormat(SDL_Window*); SDL_Window* SDL_CreateWindow(immutable(char)*, int, int, int, int, uint); SDL_Window* SDL_CreateWindowFrom(void*); uint SDL_GetWindowID(SDL_Window*); SDL_Window* SDL_GetWindowFromID(uint); uint SDL_GetWindowFlags(SDL_Window*); void SDL_SetWindowTitle(SDL_Window*, immutable(char)*); char* SDL_GetWindowTitle(SDL_Window*); void SDL_SetWindowIcon(SDL_Window*, SDL_Surface*); void* SDL_SetWindowData(SDL_Window*, char*, void*); void* SDL_GetWindowData(SDL_Window*, char*); void SDL_SetWindowPosition(SDL_Window*, int, int); void SDL_GetWindowPosition(SDL_Window*, int*, int*); void SDL_SetWindowSize(SDL_Window*, int, int); void SDL_GetWindowSize(SDL_Window*, int*, int*); void SDL_SetWindowMinimumSize(SDL_Window*, int, int); void SDL_GetWindowMinimumSize(SDL_Window*, int*, int*); void SDL_SetWindowMaximumSize(SDL_Window*, int, int); void SDL_GetWindowMaximumSize(SDL_Window*, int*, int*); void SDL_SetWindowBordered(SDL_Window*, bool); void SDL_ShowWindow(SDL_Window*); void SDL_HideWindow(SDL_Window*); void SDL_RaiseWindow(SDL_Window*); void SDL_MaximizeWindow(SDL_Window*); void SDL_MinimizeWindow(SDL_Window*); void SDL_RestoreWindow(SDL_Window*); int SDL_SetWindowFullscreen(SDL_Window*, uint); SDL_Surface* SDL_GetWindowSurface(SDL_Window*); int SDL_UpdateWindowSurface(SDL_Window*); int SDL_UpdateWindowSurfaceRects(SDL_Window*, Прямоуг*, int); void SDL_SetWindowGrab(SDL_Window*, bool); bool SDL_GetWindowGrab(SDL_Window*); SDL_Window* SDL_GetGrabbedWindow(); int SDL_SetWindowBrightness(SDL_Window*, float); float SDL_GetWindowBrightness(SDL_Window*); int SDL_SetWindowGammaRamp(SDL_Window*, ushort*, ushort*, ushort*, ushort*); int SDL_GetWindowGammaRamp(SDL_Window*, ushort*, ushort*, ushort*, ushort*); int SDL_SetWindowHitTest(SDL_Window*, HitTest, void*); void SDL_DestroyWindow(SDL_Window*); bool SDL_IsScreenSaverEnabled(); void SDL_EnableScreenSaver(); void SDL_DisableScreenSaver(); int SDL_GL_LoadLibrary(char*); void* SDL_GL_GetProcAddress(char*); void SDL_GL_UnloadLibrary(); bool SDL_GL_ExtensionSupported(char*); void SDL_GL_ResetAttributes(); int SDL_GL_SetAttribute(GLattr, int); int SDL_GL_GetAttribute(GLattr, int*); GLContext SDL_GL_CreateContext(SDL_Window*); int SDL_GL_MakeCurrent(SDL_Window*, GLContext); SDL_Window* SDL_GL_GetCurrentWindow(); GLContext SDL_GL_GetCurrentContext(); void SDL_GL_GetDrawableSize(SDL_Window*, int*, int*); int SDL_GL_SetSwapInterval(int); int SDL_GL_GetSwapInterval(); void SDL_GL_SwapWindow(SDL_Window*); void SDL_GL_DeleteContext(GLContext); } struct DisplayMode { uint формат; int ш, в, к; void* драйвер; } struct SDL_Window; //struct НастройкиОкна { // bool fullscreen, opengl, shown, hidden, borderless, resizable, minimized, maximized, // input_grabbed, input_focus, mouse_focus, foreign, desktop, allow_highdpi, mouse_capture; //} //struct RendererFlags { bool software, accelerated, vsync, targettexture; } enum WindowEventID { none, shown, hidden, exposed, moved, resized, size_changed, minimized, maximized, restored, enter, leave, focus_gained, focus_lost, close } alias GLContext = void*; enum GLattr { RED_SIZE, GREEN_SIZE, BLUE_SIZE, ALPHA_SIZE, BUFFER_SIZE, DOUBLEBUFFER, DEPTH_SIZE, STENCIL_SIZE, ACCUM_RED_SIZE, ACCUM_GREEN_SIZE, ACCUM_BLUE_SIZE, ACCUM_ALPHA_SIZE, STEREO, MULTISAMPLEBUFFERS, MULTISAMPLESAMPLES, ACCELERATED_VISUAL, RETAINED_BACKING, CONTEXT_MAJOR_VERSION, CONTEXT_MINOR_VERSION, CONTEXT_EGL, CONTEXT_FLAGS, CONTEXT_PROFILE_MASK, SHARE_WITH_CURRENT_CONTEXT, FRAMEBUFFER_SRGB_CAPABLE, CONTEXT_RELEASE_BEHAVIOR } enum GLprofile { CORE = 0x0001, COMPATIBILITY = 0x0002, ES = 0x0004, } enum GLcontextFlag { DEBUG = 0x0001, FORWARD_COMPATIBLE = 0x0002, ROBUST_ACCESS = 0x0004, RESET_ISOLATION = 0x0008, } enum GLcontextReleaseFlag { none = 0, flush = 1 } enum HitTestResult { NORMAL, DRAGGABLE, RESIZE_TOPLEFT, RESIZE_TOP, RESIZE_TOPRIGHT, RESIZE_RIGHT, RESIZE_BOTTOMRIGHT, RESIZE_BOTTOM, RESIZE_BOTTOMLEFT, RESIZE_LEFT, } alias HitTest = HitTestResult function(SDL_Window*, Точка*, void*); pragma(lib, "SDL2_mixer"); extern(C){ // SDL_version* Mix_Linked_Version(); int Mix_Init(int); void Mix_Quit(); int Mix_OpenAudio (int, ushort, int, int); int Mix_AllocateChannels(int); int Mix_QuerySpec(int*, ushort*, int*); Mix_Chunk* Mix_LoadWAV_RW(RWops*, int); Mix_Music* Mix_LoadMUS(char*); Mix_Music* Mix_LoadMUS_RW(RWops*, int); Mix_Music* Mix_LoadMUSType_RW(RWops*, MusicType, int); Mix_Chunk* Mix_QuickLoad_WAV(ubyte*); Mix_Chunk* Mix_QuickLoad_RAW(ubyte*, uint); void Mix_FreeChunk(Mix_Chunk*); void Mix_FreeMusic(Mix_Music*); int Mix_GetNumChunkDecoders(); char* Mix_GetChunkDecoder(int); int Mix_GetNumMusicDecoders(); char* Mix_GetMusicDecoder(int); MusicType Mix_GetMusicType(Mix_Music*); void Mix_SetPostMix(void function(void*, ubyte*, int), void*); void Mix_HookMusic(void function(void*, ubyte*, int), void*); void Mix_HookMusicFinished(void function()); void* Mix_GetMusicHookData(); void Mix_ChannelFinished(void function(int channel)); int Mix_RegisterEffect(int, Mix_EffectFunc_t, Mix_EffectDone_t, void*); int Mix_UnregisterEffect(int, Mix_EffectFunc_t); int Mix_UnregisterAllEffects(int); int Mix_SetPanning(int, ubyte, ubyte); int Mix_SetPosition(int, short, ubyte); int Mix_SetDistance(int, ubyte); // int Mix_SetReverb(int, ubyte); int Mix_SetReverseStereo(int, int); int Mix_ReserveChannels(int); int Mix_GroupChannel(int, int); int Mix_GroupChannels(int, int, int); int Mix_GroupAvailable(int); int Mix_GroupCount(int); int Mix_GroupOldest(int); int Mix_GroupNewer(int); int Mix_PlayChannelTimed(int, Mix_Chunk*, int, int); int Mix_PlayMusic(Mix_Music*, int); int Mix_FadeInMusic(Mix_Music*, int, int); int Mix_FadeInMusicPos(Mix_Music*, int, int, double); int Mix_FadeInChannelTimed(int, Mix_Chunk*, int, int, int); int Mix_Volume(int, int); int Mix_VolumeChunk(Mix_Chunk*, int); int Mix_VolumeMusic(int); int Mix_HaltChannel(int); int Mix_HaltGroup(int); int Mix_HaltMusic(); int Mix_ExpireChannel(int, int); int Mix_FadeOutChannel(int, int); int Mix_FadeOutGroup(int, int); int Mix_FadeOutMusic(int); Fading Mix_FadingMusic(); Fading Mix_FadingChannel(int); void Mix_Pause(int); void Mix_Resume(int); int Mix_Paused(int); void Mix_PauseMusic(); void Mix_ResumeMusic(); void Mix_RewindMusic(); int Mix_PausedMusic(); int Mix_SetMusicPosition(double); int Mix_Playing(int); int Mix_PlayingMusic(); int Mix_SetMusicCMD(in char*); int Mix_SetSynchroValue(int); int Mix_GetSynchroValue(); Mix_Chunk* Mix_GetChunk(int); void Mix_CloseAudio(); } enum { MIX_CHANNELS = 8, MIX_DEFAULT_FREQUENCY = 22050, MIX_DEFAULT_CHANNELS = 2, MIX_MAX_VOLUME = 128, MIX_CHANNEL_POST = -2, } version(LittleEndian){ enum MIX_DEFAULT_FORMAT = 0x8010; }else{ enum MIX_DEFAULT_FORMAT = 0x9010; } struct Mix_Chunk { int allocated; ubyte* abuf; uint alen; ubyte volume; } enum Fading { No, Out, In } enum MusicType { none, cmd, wav, mod, mid, ogg, mp3, mp3_mad, flac, modplug } struct Mix_Music; string MIX_EFFECTSMAXSPEED = "MIX_EFFECTSMAXSPEED"; alias Mix_EffectFunc_t = void function(int chan, void* stream, int len, void* udata); alias Mix_EffectDone_t = void function(int chan, void* udata); pragma(lib, "SDL2_ttf"); private alias Цвет = uint; struct TTF_Font; // enum UNICODE_BOM { NATIVE = 0xFEFF, SWAPPED = 0xFFFE } struct Style { mixin(bitfields!( bool, "bold", 1, bool, "italic", 1, bool, "underline", 1, bool, "strikethrough", 1, uint, "", 28 )); } enum Hinting { normal = 0, light = 1, mono = 2, none = 3 } extern(C){ void TTF_ByteSwappedUNICODE(int); int TTF_Init(); // TTF_Font* TTF_OpenFont(char*, int); TTF_Font* TTF_OpenFontIndex(char*, int, long ); TTF_Font* TTF_OpenFontRW(RWops*, int, int); TTF_Font* TTF_OpenFontIndexRW(RWops*, int, int, long); int TTF_GetFontStyle(TTF_Font*); void TTF_SetFontStyle(TTF_Font*, int style); int TTF_GetFontOutline(TTF_Font*); void TTF_SetFontOutline(TTF_Font*, int); int TTF_GetFontHinting(TTF_Font*); void TTF_SetFontHinting(TTF_Font*, int); int TTF_FontHeight(TTF_Font*); int TTF_FontAscent(TTF_Font*); int TTF_FontDescent(TTF_Font*); int TTF_FontLineSkip(TTF_Font*); int TTF_GetFontKerning(TTF_Font*); void TTF_SetFontKerning(TTF_Font*, int); int TTF_FontFaces(TTF_Font*); int TTF_FontFaceIsFixedWidth(TTF_Font*); char* TTF_FontFaceFamilyName(TTF_Font*); char* TTF_FontFaceStyleName(TTF_Font*); int TTF_GlyphIsProvided(TTF_Font*, ushort); int TTF_GlyphMetrics(TTF_Font*, ushort, int*, int*, int*, int*, int*); SDL_Surface* TTF_RenderUTF8_Solid(TTF_Font*, immutable(char)*, Цвет); SDL_Surface* TTF_RenderUTF8_Shaded(TTF_Font*, char*, Цвет, Цвет); SDL_Surface* TTF_RenderUTF8_Blended(TTF_Font*, char*, Цвет); SDL_Surface* TTF_RenderUTF8_Blended_Wrapped(TTF_Font*, immutable(char)*, Цвет, uint); int TTF_SizeUTF8(TTF_Font*, char*, int*, int*); // int TTF_SizeText(TTF_Font*, char*, int*, int*); // int TTF_SizeUNICODE(TTF_Font*, ushort*, int*, int*); // SDL_Surface* TTF_RenderText_Solid(TTF_Font*, char*, Цвет); // SDL_Surface* TTF_RenderUNICODE_Solid(TTF_Font*, ushort*, Цвет); SDL_Surface* TTF_RenderGlyph_Solid(TTF_Font*, ushort, Цвет); // SDL_Surface* TTF_RenderText_Shaded(TTF_Font*, char*, Цвет, Цвет); // SDL_Surface* TTF_RenderUNICODE_Shaded(TTF_Font*, ushort*, Цвет, Цвет); SDL_Surface* TTF_RenderGlyph_Shaded(TTF_Font*, ushort, Цвет, Цвет); // SDL_Surface* TTF_RenderText_Blended(TTF_Font*, char*, Цвет); // SDL_Surface* TTF_RenderUNICODE_Blended(TTF_Font*, ushort*, Цвет); // SDL_Surface* TTF_RenderText_Blended_Wrapped(TTF_Font*, char*, Цвет, uint); // SDL_Surface* TTF_RenderUNICODE_Blended_Wrapped(TTF_Font*, ushort*, Цвет, uint); SDL_Surface* TTF_RenderGlyph_Blended(TTF_Font*, ushort, Цвет); void TTF_CloseFont(TTF_Font*); void TTF_Quit(); int TTF_WasInit(); int TTF_GetFontKerningSize(TTF_Font*,int,int); } enum да = true, нет = false; struct Точка { int x, y; auto opAdd(Точка b){ return Точка(x + bx, y + by); } auto opSub(Точка b){ return Точка(x - bx, y - by); } auto opDiv(int н){ return Точка(x/н, y/н); } auto opMul(int н){ return Точка(x*н, y*н); } void opOpAssign(string op, T)(T n){ this = mixin("this " ~ op ~ " n"); } bool opIn(Круг к){ return ((x - к.поз.x)^^2 + (y - к.поз.y)^^2)^^0.5 < к.р; } bool opIn(Прямоуг п){ return п.поз.x <= x && x <= п.поз.x + п.ш && п.поз.y <= y && y <= п.поз.y + п.в; } } struct Вектор { int x, y; this(int x, int y){ this.x = x; this.y = y; } this(Точка а, Точка б){ x = б.x - а.x; y = б.y - а.y; } auto opAdd(Вектор b){ return Вектор(x + bx, y + by); } auto opSub(Вектор b){ return Вектор(x - bx, y - by); } auto opDiv(int n){ return Вектор(x/n, y/n); } auto opMul(int n){ return Вектор(x*n, y*n); } void opOpAssign(string op, T)(T n){ this = mixin("this " ~ op ~ " n"); } int длина(){ return cast(int)(x^^2 + y^^2)^^0.5; } } struct Линия { Точка а, б; } struct Круг { Точка поз; int р; } struct Прямоуг { Точка поз; int ш, в; } bool пересеклись(Прямоуг а, Прямоуг б){ return (а.поз.x <= а.поз.x + а.ш && б.поз.x <= б.поз.x + б.ш) && (а.поз.y <= а.поз.y + а.в && б.поз.y <= б.поз.y + б.в); } 
      • 3
        How does this code answer the question? - Nick Volynkin