
หากคุณทำงานด้านการพัฒนาวิดีโอเกมหรือแอปพลิเคชันมัลติมีเดียข้ามแพลตฟอร์ม คุณน่าจะเคยได้ยินชื่อ SDL มาก่อน การมาถึง de เอสดีแอล 3.4ไลบรารีนี้ก้าวหน้าไปอย่างมากในแง่ของความสามารถด้านกราฟิก การรองรับแพลตฟอร์ม และเครื่องมือสำหรับการปรับปรุงประสบการณ์ผู้ใช้ ทั้งบนเดสก์ท็อป เว็บ และอุปกรณ์เคลื่อนที่ นี่ไม่ใช่การอัปเดตเล็กน้อย: มันครอบคลุมทุกอย่างตั้งแต่เอ็นจิ้นการเรนเดอร์ 2 มิติและ API GPU 3 มิติ ไปจนถึงการจัดการเสียง ไดรเวอร์ การป้อนข้อมูลด้วยปากกา ระบบ Linux รุ่นใหม่ และอื่นๆ อีกมากมาย
แม้ว่า SDL 3 จะยังคงได้รับการพัฒนาอย่างต่อเนื่อง แต่สาขานี้ก็ยังคงมีการเปลี่ยนแปลงอยู่ เวอร์ชัน 3.4 นั้นเป็นเวอร์ชันที่แข็งแกร่งมาก ออกแบบมาเพื่อช่วยให้โครงการใหม่และโครงการที่กำลังดำเนินอยู่สามารถใช้ประโยชน์จากการปรับปรุงประสิทธิภาพ API ใหม่ และการผสานรวมที่ดีขึ้นกับสภาพแวดล้อมต่างๆ เช่น Emscripten, Wayland, Vision Pro หรือแม้แต่ PlayStation 2 ในบริบทเฉพาะเจาะจง มาดูกันว่ามีอะไรใหม่ใน SDL 3.4 บ้าง ทำไมจึงมีความสำคัญสำหรับโครงการต่อไปของคุณ และรายละเอียดทางเทคนิคที่คุณควรคำนึงถึงหากต้องการใช้ประโยชน์จากมันให้มากที่สุด
คุณสมบัติใหม่ที่สำคัญที่สุดโดยทั่วไปของ SDL 3.4
งานหลักของ SDL 3.4 มุ่งเน้นไปที่... ปรับปรุงความสามารถในการทำงานร่วมกันระหว่างโมเดล 3 มิติและ 2 มิติสิ่งนี้สำคัญมากสำหรับเอนจิ้นเกมและแอปพลิเคชันที่ผสมผสานอินเทอร์เฟซ 2 มิติเข้ากับเนื้อหา 3 มิติ ก่อนหน้านี้ การรวมทั้งสองเลเยอร์เข้าด้วยกันอาจต้องใช้ความพยายามจากนักพัฒนามากขึ้น แต่เวอร์ชันนี้ได้เพิ่มยูทิลิตี้และคุณสมบัติใหม่ๆ ที่ช่วยอำนวยความสะดวกในกระบวนการนี้
นอกเหนือจากกราฟิกแล้ว การอัปเดตนี้ยังรวมถึง... รองรับรูปภาพ PNG โดยตรงมีการปรับปรุงระบบอินพุต (เมาส์ ปากกา Stylus ท่าทางสัมผัส แป้นพิมพ์บนหน้าจอ) อย่างเห็นได้ชัด และมีการเปลี่ยนแปลงเฉพาะสำหรับ Windows, macOS, Linux, Emscripten, iOS, visionOS และแพลตฟอร์มอื่นๆ ที่ไม่ค่อยพบเห็น นอกจากนี้ การผสานรวมกับระบบนิเวศของ Steam และรันไทม์ก็ได้รับการปรับปรุงให้ดียิ่งขึ้น ซึ่งมีความสำคัญอย่างยิ่งสำหรับการเล่นเกมบน Linux และการพัฒนาข้ามแพลตฟอร์มเพื่อการเผยแพร่บน Steam
ความสามารถในการทำงานร่วมกันระหว่าง API GPU 3 มิติและการเรนเดอร์ 2 มิติ
จุดแข็งอย่างหนึ่งของ SDL 3.4 คือการเพิ่มประสิทธิภาพให้กับ การผสานรวมระหว่าง 3 มิติและ 2 มิติไลบรารีนี้แนะนำฟังก์ชันใหม่สำหรับการสร้างเรนเดอร์ภาพ 2 มิติบน GPU และสำหรับการแลกเปลี่ยนข้อมูลระหว่างพื้นผิว GPU และรูปแบบพิกเซลที่จัดการโดย SDL
- มันเพิ่ม SDL_CreateGPURenderer() เพื่อสร้างโปรแกรมเรนเดอร์ภาพ 2 มิติที่ใช้ประโยชน์จาก API ของ GPU ที่อยู่เบื้องหลัง
- กับ SDL_GetGPURendererDevice() คุณสามารถเรียกดูอุปกรณ์ GPU ที่เชื่อมโยงกับเรนเดอร์นั้นได้
- พวกเขาเข้าร่วม SDL_CreateGPURenderState()รวมถึงฟังก์ชัน SDL_SetGPURenderStateFragmentUniforms(), SDL_SetGPURenderState() และ SDL_DestroyGPURenderState() เพื่อทำงานกับเชเดอร์แฟรกเมนต์ในการเรนเดอร์ GPU 2 มิติ
- ตอนนี้พวกเขาได้รับการยอมรับแล้ว พื้นผิว YUV และพื้นที่สี HDR ในระบบเรนเดอร์ 2 มิติที่ใช้ GPU ซึ่งมีความน่าสนใจเป็นพิเศษสำหรับวิดีโอและคอนเทนต์คุณภาพสูง
นอกจากนี้ยังรวมเอาคุณสมบัติต่างๆ เช่น SDL_GetGPUDeviceProperties()ฟังก์ชันนี้จะส่งคืนคุณสมบัติของอุปกรณ์ GPU รวมถึงชื่ออุปกรณ์ ชื่อและเวอร์ชันของไดรเวอร์ และข้อมูลอื่นๆ ที่เกี่ยวข้องกับความเข้ากันได้หรือการตัดสินใจในการวินิจฉัย นอกจากนี้ `SDL_GetPixelFormatFromGPUTextureFormat()` และ `SDL_GetGPUTextureFormatFromPixelFormat()` ยังช่วยอำนวยความสะดวกในการแปลงระหว่างรูปแบบพื้นผิว GPU และรูปแบบพิกเซล SDL
ในขณะเดียวกัน ทรัพย์สินดังกล่าวก็รวมอยู่ด้วย SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER เพื่อสร้างพื้นผิว 2 มิติจากพื้นผิว GPU ที่มีอยู่แล้ว และใช้ SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER เพื่อรับพื้นผิว GPU ที่เชื่อมโยงกับพื้นผิว 2 มิติเมื่อใช้ตัวเรนเดอร์ GPU 2 มิติ วิธีนี้ช่วยลดความยุ่งยากได้อย่างมากเมื่อผสมผสานเนื้อหาที่สร้างขึ้นใน API ของ GPU กับไปป์ไลน์ SDL 2 มิติแบบดั้งเดิม
การปรับปรุงการแสดงผลภาพ 2 มิติและการจัดการพื้นผิว
SDL 3.4 ไม่ได้เป็นเพียงแค่ความสามารถในการทำงานร่วมกันเท่านั้น แต่ยังเพิ่มฟังก์ชันเฉพาะต่างๆ อีกด้วย ปรับแต่งคุณภาพและการควบคุมการเรนเดอร์ภาพ 2 มิติให้ดียิ่งขึ้นตัวอย่างเช่น มีการแนะนำฟังก์ชัน SDL_RenderTexture9GridTiled() ซึ่งช่วยให้สามารถเรนเดอร์พื้นผิวแบบ 9 ช่องโดยใช้โหมด "เรียงต่อกัน" แทนการยืดพื้นผิว เพื่อหลีกเลี่ยงการบิดเบี้ยวขององค์ประกอบอินเทอร์เฟซหรือเฟรม
เพื่อจัดการการปรับขนาดของพื้นผิว จึงได้เพิ่มสิ่งต่อไปนี้ SDL_GetDefaultTextureScaleMode() และ SDL_SetDefaultTextureScaleMode() ซึ่งอนุญาตให้ตั้งค่าโหมดการปรับขนาดเริ่มต้นสำหรับพื้นผิวใหม่ ที่เกี่ยวข้องกับเรื่องนี้คือ SDL_GetRenderTextureAddressMode() และ SDL_SetRenderTextureAddressMode() รวมถึงค่าคงที่ SDL_TEXTURE_ADDRESS_WRAP ซึ่งให้ค่าดังกล่าว รองรับการห่อพื้นผิว เมื่อตัวเรนเดอร์ระบุว่ารองรับการห่อหุ้ม (SDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN)
ฟีเจอร์ใหม่ที่น่าสนใจมากสำหรับเกมที่มีสุนทรียภาพแบบเรโทรคือ... SDL_SCALEMODE_PIXELARTเป็นอัลกอริธึมการปรับขนาดที่ออกแบบมาสำหรับภาพพิกเซล ซึ่งหลีกเลี่ยงการเบลอแบบคลาสสิกของโหมดการกรองอื่นๆ และรักษาขอบที่คมชัดไว้ได้แม้จะขยายภาพให้ใหญ่ขึ้นมากก็ตาม
นอกจากนี้ยังมีโอกาสที่จะได้ร่วมงานกับ จานสีพื้นผิวฟังก์ชัน SDL_SetTexturePalette() และ SDL_GetTexturePalette() ช่วยให้คุณสามารถกำหนดและสอบถามพาเล็ตสีในพื้นผิว ซึ่งมีประโยชน์หากคุณกำลังสร้างรูปแบบกราฟิกแบบเก่าขึ้นมาใหม่ หรือต้องการเพิ่มประสิทธิภาพการใช้หน่วยความจำและแบนด์วิดท์
ในแง่ของพื้นผิว SDL 3.4 ประกอบด้วย SDL_RotateSurface() เพื่อสร้างสำเนาพื้นผิวที่หมุนได้ จึงมีการเพิ่ม SDL_FLIP_HORIZONTAL_AND_VERTICAL เพื่อพลิกพื้นผิวพร้อมกันบนทั้งสองแกน นอกจากนี้ คุณสมบัติ SDL_PROP_SURFACE_ROTATION_NUMBER (ซึ่งต่อมาถูกแทนที่ด้วย SDL_PROP_SURFACE_ROTATION_FLOAT ในการเปลี่ยนแปลงเวอร์ชันสุดท้าย) ใช้เพื่อระบุมุมที่จำเป็นในการแสดงภาพจากกล้องอย่างถูกต้อง
รองรับไฟล์ PNG ดั้งเดิมและการโหลดพื้นผิว
หนึ่งในข้อดีที่น่ายินดีที่สุดในแง่ของการใช้งานจริงคือ SDL 3.4 ได้รวมเอาคุณสมบัติบางอย่างไว้ด้วย รองรับไฟล์ PNG โดยตรง...โดยไม่ต้องพึ่งพาไลบรารีภายนอกในหลายกรณี ซึ่งช่วยลดความซับซ้อนลงได้มาก โครงการขนาดเล็ก และต้นแบบ
- SDL_LoadPNG() และฟังก์ชัน SDL_LoadPNG_IO() อนุญาตให้โหลดภาพ PNG โดยตรงเป็นพื้นผิวได้
- SDL_SavePNG() และฟังก์ชัน SDL_SavePNG_IO() ใช้สำหรับบันทึกพื้นผิวในรูปแบบ PNG
- กับ SDL_LoadSurface() ฟังก์ชัน SDL_LoadSurface_IO() จะตรวจจับโดยอัตโนมัติว่าไฟล์เป็น BMP หรือ PNG และโหลดลงบนพื้นผิวโดยที่คุณไม่ต้องกังวลเกี่ยวกับรูปแบบไฟล์
การสนับสนุนแบบบูรณาการนี้แปลได้ว่า ลดการพึ่งพาและการตั้งค่าภายนอกวิธีนี้มีประโยชน์อย่างยิ่งเมื่อทำการคอมไพล์สำหรับหลายแพลตฟอร์ม หรือใช้ SDL ภายในสภาพแวดล้อมต่างๆ เช่น Emscripten ซึ่งการลดจำนวนไลบรารีตัวช่วยจะส่งผลต่อทั้งขนาดไฟล์ไบนารีและความซับซ้อน
วิธีการป้อนข้อมูล: เมาส์, ปากกาสไตลัส, ท่าทาง และแป้นพิมพ์บนหน้าจอ
SDL 3.4 ปรับปรุงทุกอย่างที่เกี่ยวข้องกับเรื่องนี้อย่างมีนัยสำคัญ อุปกรณ์ป้อนข้อมูลขั้นสูงในส่วนของฟังก์ชันเมาส์ มีการแนะนำฟังก์ชัน SDL_SetRelativeMouseTransform() ซึ่งช่วยให้สามารถใช้การแปลงแบบกำหนดเองกับข้อมูลเมาส์แบบสัมพัทธ์ ซึ่งมีประโยชน์สำหรับเทคนิคการปรับขนาด การกลับแกน หรือการแมปแบบพิเศษ
ในส่วนของดินสอและสไตลัส ดูเหมือนว่า... SDL_GetPenDeviceType()ซึ่งช่วยให้คุณแยกแยะได้ว่าปากกากำลังใช้งานโดยตรงบนหน้าจอหรือบนทัชแพดแยกต่างหาก ซึ่งเป็นรายละเอียดที่มีประโยชน์มากสำหรับการปรับแต่งประสบการณ์ผู้ใช้ให้เหมาะสมกับประเภทของอุปกรณ์
บนอุปกรณ์ที่มีแป้นพิมพ์เสมือน SDL จะเพิ่มเหตุการณ์ต่างๆ เช่น SDL_EVENT_SCREEN_KEYBOARD_SHOWN และ SDL_EVENT_SCREEN_KEYBOARD_HIDDEN ซึ่งจะรายงานเมื่อแป้นพิมพ์บนหน้าจอแสดงหรือซ่อนอยู่ ทำให้คุณสามารถปรับแต่งอินเทอร์เฟซ ย้ายองค์ประกอบ หรือป้องกันไม่ให้ช่องข้อความถูกบดบังได้
ระบบท่าทางกำลังได้รับการขยายเพิ่มเติมด้วยเหตุการณ์ต่างๆ SDL_EVENT_PINCH_BEGIN, SDL_EVENT_PINCH_UPDATE และ SDL_EVENT_PINCH_ENDซึ่งตรวจจับท่าทางการบีบนิ้วเพื่อซูมและการกระทำที่คล้ายกัน นอกจากนี้ ในสภาพแวดล้อม Wayland ยังมีการแก้ไขการรองรับปุ่มเมาส์มากกว่าห้าปุ่ม และมีการเพิ่มการเลื่อนแบบแม่นยำใน X11 ซึ่งช่วยปรับปรุงความราบรื่นของการเลื่อนอย่างละเอียด
สุดท้ายนี้ SDL 3.4 ได้รวมเอาคุณสมบัติต่างๆ ไว้ด้วย SDL_GetEventDescription()ฟังก์ชันสำหรับแสดงคำอธิบายเหตุการณ์เป็นภาษาอังกฤษ มีจุดประสงค์เพื่อการบันทึกและแก้ไขข้อผิดพลาด ซึ่งมีประโยชน์มากเมื่อคุณติดตามพฤติกรรมการป้อนข้อมูลที่ผิดปกติในหลายแพลตฟอร์ม
เสียง: ขั้นตอนการทำงานที่ยืดหยุ่นมากขึ้นและไม่ต้องประมวลผลระบบใหม่
ระบบเสียงก็ได้รับการปรับปรุงอย่างมากเช่นกัน โดยเน้นไปที่... การประมวลผลที่มีประสิทธิภาพและการควบคุมท่อส่งประการแรก ขณะนี้มีการส่งข้อความ SDL_EVENT_AUDIO_DEVICE_ADDED ในระหว่างการเริ่มต้นระบบสำหรับอุปกรณ์เสียงแต่ละตัวที่ตรวจพบ ทำให้การค้นหาและแสดงรายการอุปกรณ์ทำได้ง่ายขึ้นโดยไม่ต้องรอเหตุการณ์แบบไดนามิก
คุณสมบัติใหม่สองอย่าง SDL_PutAudioStreamDataNoCopy() และฟังก์ชัน SDL_PutAudioStreamPlanarData() ให้ตัวเลือกเพิ่มเติมเมื่อทำงานกับสตรีมเสียง: ฟังก์ชันแรกช่วยหลีกเลี่ยงการคัดลอกที่ไม่จำเป็นในบางกรณี และฟังก์ชันที่สองช่วยให้สามารถป้อนข้อมูลในรูปแบบ planar แทนที่จะเป็นแบบ interleaved ซึ่งเหมาะสำหรับสตรีมขั้นสูงหรือการผสานรวมกับไลบรารีประมวลผลเสียงระดับสูง
นอกจากนี้ คำแนะนำ SDL_HINT_AUDIO_DEVICE_RAW_STREAM ยังมีความสำคัญเป็นอย่างยิ่ง: คำแนะนำนี้บ่งชี้ว่าระบบปฏิบัติการ คุณไม่ควรทำการปรับแต่งไฟล์เสียงเพิ่มเติมใดๆ (เช่น การตัดเสียงรบกวน) นี่เป็นสิ่งสำคัญหากแอปพลิเคชันหรือเกมของคุณจัดการการประมวลผลอยู่แล้ว และคุณไม่ต้องการให้ระบบปฏิบัติการเข้ามาแทรกแซงและบิดเบือนผลลัพธ์ นอกจากนี้ยังมีการแนะนำ SDL_PROP_AUDIOSTREAM_AUTO_CLEANUP_BOOLEAN ซึ่งอนุญาตให้สตรีมบางอย่างคงอยู่ต่อไปได้หลังจากวงจรชีวิตของระบบเสียงสิ้นสุดลง ซึ่งมีประโยชน์ในสถาปัตยกรรมที่ซับซ้อนกว่า
ตัวควบคุมและอุปกรณ์ HID
SDL 3.4 ปรับปรุงการรองรับคอนโทรลเลอร์และอุปกรณ์ HID อย่างมีนัยสำคัญ ขยายขอบเขตของฮาร์ดแวร์ที่ใช้งานได้ทันทีโดยไม่ต้องตั้งค่าภายนอก โดยเฉพาะอย่างยิ่ง มีการเพิ่ม ปรับปรุงการรองรับคอนโทรลเลอร์ 8BitDo ให้ดียิ่งขึ้นFlyDigi และ Hand Held Legend SINput ช่วยให้จอยเกมจากผู้ผลิตรายอื่น ๆ ทำงานได้สม่ำเสมอยิ่งขึ้น
มันยังรวมอยู่ด้วย แท่นวางคอนโทรลเลอร์ Nintendo Switch 2 แบบมีสาย เมื่อคอมไพล์ SDL ร่วมกับ libusb แล้ว สิ่งนี้จะน่าสนใจสำหรับผู้ใช้ที่ต้องการเชื่อมต่อโดยตรงมากกว่าโหมดไร้สาย ในระดับ API ของ HID ฟังก์ชัน SDL_hid_get_properties() ดูเหมือนจะเชื่อมโยงคุณสมบัติของ SDL กับอุปกรณ์ HID และคุณสมบัติ SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER อนุญาตให้ดึงแฮนเดิลของ libusb ที่เชื่อมโยงกับ SDL_hid_device เมื่อเปิดใช้งานด้วย libusb แล้ว
การปรับปรุงเหล่านี้เป็นส่วนเพิ่มเติมจากข้อเท็จจริงที่ว่า SDL 3.4 ยังมีคุณสมบัติอื่นๆ อีกด้วย รองรับคอนโทรลเลอร์ Steam รุ่นใหม่ ภายในระบบนิเวศเริ่มต้นของมัน ซึ่งสอดคล้องเป็นอย่างดีกับบทบาทของมันภายในระบบรันไทม์ของ Steam และการมุ่งเน้นไปที่การเล่นเกมบน Linux และแพลตฟอร์มอื่นๆ
กิจกรรม ระบบ และสาธารณูปโภคทั่วไป
นอกเหนือจากด้านกราฟิกและการป้อนข้อมูลแล้ว SDL 3.4 ยังมีการเปลี่ยนแปลงหลายอย่างในระบบเหตุการณ์และยูทิลิตี้ทั่วไปที่ควรทราบ ตัวอย่างเช่น SDL_EVENT_WINDOW_EXPOSED ขณะนี้ระบบจะเติมค่า true ลงในฟิลด์ data1 เมื่อมีการส่งข้อมูลระหว่างการปรับขนาดหน้าต่างแบบเรียลไทม์ เพื่อให้ได้บริบทเพิ่มเติม
มันเพิ่ม SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGEDเหตุการณ์นี้จะเกิดขึ้นเมื่อขอบเขตเดสก์ท็อปที่ใช้งานได้เปลี่ยนแปลง (ตัวอย่างเช่น เมื่อย้ายแถบงานหรือแผงต่างๆ) นอกจากนี้ยังรวมถึง SDL_EVENT_SCREEN_KEYBOARD_SHOWN/SDL_EVENT_SCREEN_KEYBOARD_HIDDEN และเหตุการณ์การบีบนิ้วที่กล่าวถึงก่อนหน้านี้ จึงทำให้มีระบบนิเวศของเหตุการณ์ที่ครอบคลุมมากขึ้นสำหรับสถานการณ์ UI แบบไดนามิก
ในด้านผลกำไร SDL_HINT_MAIN_CALLBACK_RATE ขณะนี้สามารถตั้งค่าเป็นค่าทศนิยมได้แล้ว ซึ่งให้ความแม่นยำมากขึ้น SDL_AddAtomicU32() เพิ่มการรองรับการบวกแบบอะตอมิกบนจำนวนเต็ม 32 บิตที่ไม่มีเครื่องหมาย และ SDL_GetSystemPageSize() ส่งคืนขนาดหน้าหน่วยความจำของระบบ ซึ่งมีประโยชน์สำหรับงานที่เกี่ยวข้องกับหน่วยความจำระดับต่ำ
รวมอยู่ด้วย SDL_ALIGNED()มาโครนี้ระบุว่าข้อมูลบางอย่างควรมีการจัดเรียงที่เฉพาะเจาะจง ซึ่งมีความสำคัญอย่างยิ่งต่อการเพิ่มประสิทธิภาพการทำงานและการใช้คำสั่ง SIMD ในขณะเดียวกัน SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER ช่วยให้คุณสามารถกำหนดฟังก์ชันการปล่อยหน่วยความจำแบบกำหนดเองสำหรับหน่วยความจำที่ใช้โดย SDL_IOFromMem() และ SDL_IOFromConstMem() ทำให้คุณควบคุมได้มากขึ้นเมื่อผสานรวม SDL กับตัวจัดสรรหน่วยความจำของคุณเอง
การปรับปรุงที่น่าสนใจอีกอย่างหนึ่งคือการรองรับ เอาต์พุตบันทึกโดยละเอียด เมื่อตั้งค่าตัวแปรสภาพแวดล้อม DEBUG_INVOCATION เป็น "1" จะมีจุดประสงค์เพื่อการดีบักเชิงลึกเกี่ยวกับการเริ่มต้นใช้งานไลบรารีและพฤติกรรมในบริบทที่ซับซ้อน
การปรับปรุงเฉพาะด้านใน Windows
บนระบบปฏิบัติการ Windows โปรแกรม SDL 3.4 มีการเปลี่ยนแปลงที่สำคัญหลายอย่าง ซึ่งส่งผลต่อระบบเสียง วิดีโอ และระบบป้อนข้อมูล หนึ่งในประเด็นที่น่าสนใจคือฟีเจอร์คำแนะนำ (hint) SDL_HINT_RENDER_DIRECT3D11_WARPวิธีนี้ช่วยให้คุณเปิดใช้งาน WARP (ซอฟต์แวร์แรสเตอร์ไรเซอร์ของ D3D11) ซึ่งมีประโยชน์ในเครื่องที่ไม่มี GPU ที่รองรับ หรือในสภาพแวดล้อมเสมือนจริงที่ไม่มีการเร่งความเร็วโดยตรง แต่คุณยังคงต้องการใช้ API
ไดรเวอร์ WASAPI ใช้ประโยชน์จาก SDL_HINT_AUDIO_DEVICE_STREAM_ROLE เพื่อปรับหมวดหมู่สตรีมเสียง ซึ่งเป็นส่วนสำคัญในการทำงานที่สอดคล้องกันของระบบ (เช่น เสียงเกม การสื่อสาร ฯลฯ) นอกจากนี้ยังอาศัย SDL_HINT_AUDIO_DEVICE_RAW_STREAM เพื่อระบุว่าไดรเวอร์ควรประมวลผลเพิ่มเติมหรือไม่
ป้อนคำใบ้ทางด้านแป้นพิมพ์ SDL_HINT_WINDOWS_RAW_KEYBOARD_EXCLUDE_HOTKEYSวิธีนี้ช่วยให้คุณปิดใช้งานทางลัดระบบบางอย่างเมื่อใช้การป้อนข้อมูลแบบดิบ ซึ่งมีประโยชน์มากสำหรับเกมที่ต้องการบันทึกการกดปุ่มหลายปุ่มโดยไม่รบกวนระบบ และในระดับ API ของ GameInput นั้น SDL_HINT_WINDOWS_GAMEINPUT โดยค่าเริ่มต้น ฟังก์ชันนี้จะถูกปิดใช้งาน ซึ่งจะช่วยลดความขัดแย้งที่อาจเกิดขึ้นในบางสภาพแวดล้อม จนกว่าจะมีการกำหนดค่าอย่างชัดเจน
มันยังเพิ่ม SDL_PROP_DISPLAY_WINDOWS_HMONITOR_POINTER เพื่อให้ได้ HMONITOR ที่เชื่อมโยงกับหน้าจอ ซึ่งมีประโยชน์มากหากคุณผสมผสาน SDL กับโค้ด Win32 แบบคลาสสิก และต้องการประสานงานหน้าต่างหรือจอภาพ
macOS, iOS และ visionOS
บน macOS นั้น SDL 3.4 มีคำแนะนำที่ใช้งานได้จริงมากอย่างหนึ่ง: SDL_HINT_MAC_PRESS_AND_HOLDการตั้งค่านี้ควบคุมว่าการกดปุ่มค้างไว้จะทำซ้ำการกดปุ่มนั้นหรือเปิดเมนูเน้นเสียง ซึ่งช่วยให้คุณปรับพฤติกรรมของแป้นพิมพ์สำหรับเกมและแอปพลิเคชันที่ต้องการการกดปุ่มซ้ำอย่างรวดเร็ว แทนที่จะใช้เมนูเน้นเสียงแบบปกติของ macOS
บน iOS ตอนนี้ SDL พร้อมใช้งานแล้ว รองรับฉากหน้าต่างการแก้ไขนี้ช่วยแก้ปัญหาคำเตือน "CLIENT OF UIKIT REQUIRES UPDATE" และทำให้ไลบรารีสอดคล้องกับแนวทางการใช้งาน UIKit สมัยใหม่ มีการเพิ่มคุณสมบัติ SDL_PROP_WINDOW_CREATE_WINDOWSCENE_POINTER เพื่อระบุฉากของหน้าต่างเมื่อสร้างหน้าต่าง SDL ซึ่งจะช่วยให้แอปผสานรวมเข้ากับระบบหน้าต่างของ iOS ได้อย่างเหมาะสม
ใน VisionOS และอุปกรณ์ต่างๆ เช่น Apple Vision Pro นั้น SDL 3.4 จะปรับพฤติกรรมของหน้าต่างและอัตราการรีเฟรช โดยอัตราการรีเฟรชเริ่มต้นคือ เพิ่มขึ้นเป็น 90 เฮิรตซ์เพื่อมอบประสบการณ์ที่ราบรื่นยิ่งขึ้น และฟังก์ชัน SDL_SetWindowSize() จะเปลี่ยนขนาดหน้าต่างบนชุดหูฟัง Vision Pro ได้อย่างมีประสิทธิภาพ ทำให้ควบคุมการจัดวางในสภาพแวดล้อมความเป็นจริงผสมได้มากขึ้น
ลินุกซ์, เวย์แลนด์, KMS/DRM และวัลคาน
ในโลกของ Linux นั้น SDL 3.4 มาพร้อมกับคุณสมบัติใหม่มากมาย หนึ่งในนั้นคือการเพิ่ม... การสนับสนุนอะตอมสำหรับ KMSDRMวิธีนี้ช่วยเพิ่มเสถียรภาพและการซิงโครไนซ์โดยการทำงานโดยตรงกับระบบกราฟิกของเคอร์เนล นอกจากนี้ คำแนะนำ SDL_HINT_KMSDRM_ATOMIC ยังช่วยให้สามารถควบคุมได้ว่า KMSDRM จะใช้ฟังก์ชันอะตอมิกนี้หรือไม่
สำหรับเมืองเวย์แลนด์ มีการรวมสิ่งต่อไปนี้ไว้ด้วย: SDL_PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTERคุณสมบัตินี้ช่วยให้คุณได้รับ wl_output ที่เชื่อมโยงกับหน้าจอ ทำให้สามารถผสานรวมเข้ากับคอมโพสิเตอร์ได้อย่างลึกซึ้งยิ่งขึ้น นอกจากนี้ ยังได้แก้ไขปัญหาเกี่ยวกับเมาส์ที่มีปุ่มมากกว่าห้าปุ่ม และปรับปรุงการเลื่อนแบบแม่นยำภายใต้ X11 ทำให้ควบคุมได้ดียิ่งขึ้นในแอปพลิเคชันที่ต้องใช้การเลื่อนเป็นอย่างมาก
สำหรับ Vulkan นั้น SDL 3.4 ได้นำเสนอ... การเรนเดอร์แบบกลุ่ม และมีการปรับปรุงอื่นๆ สำหรับ API เช่น Vulkan ซึ่งช่วยลดการเรียกวาดที่ซ้ำซ้อนและปรับปรุงประสิทธิภาพโดยรวม นอกจากนี้ยังมีการทำงานเกี่ยวกับตรรกะที่ใช้ในการตรวจจับอีกด้วย GPU Vulkan ที่ทรงพลังยิ่งขึ้น ในระบบที่มี GPU หลายตัว การเลือกอุปกรณ์ที่เหมาะสมที่สุดโดยอัตโนมัติจะช่วยได้มาก โดยเฉพาะในระบบไฮบริดหรือแล็ปท็อปที่มี GPU แบบรวมและแบบแยก
นอกจากนี้ ยังมีการเพิ่มคุณสมบัติ SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER เพื่อกำหนดค่าตัวเลือก Vulkan เมื่อสร้างอุปกรณ์ GPU และ SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN เพื่อกำหนดให้ต้องใช้การเร่งความเร็วฮาร์ดแวร์เมื่อสร้างอุปกรณ์ดังกล่าว ในระดับระบบโดยรวม SDL ยังถูกวางตำแหน่งไว้ดังนี้ ชุดเครื่องมือ X11 โดยมีการเปิดตัว X11TK ซึ่งเป็นชุดเครื่องมือ X11 เฉพาะสำหรับ SDL
การใช้งาน Emscripten และเบราว์เซอร์
SDL 3.4 ปรับปรุงการทำงานร่วมกับระบบต่างๆ อย่างมีนัยสำคัญ Emscripten และการทำงานในเว็บเบราว์เซอร์นี่เป็นสิ่งสำคัญหากคุณต้องการพอร์ตเกมหรือแอปของคุณไปยังเว็บโดยไม่ต้องเขียนใหม่ทั้งหมด คุณสมบัติใหม่ข้อหนึ่งช่วยให้หน้าต่าง SDL สามารถ "เติมเต็มเอกสาร" ได้โดยไม่จำเป็นต้องเป็นโหมดเต็มหน้าจอ
ในเวอร์ชันก่อนหน้า มีการแนะนำ SDL_HINT_EMSCRIPTEN_FILL_DOCUMENT และในเวอร์ชันสุดท้ายได้มีการจัดระเบียบใหม่โดยใช้แฟล็กเป็นหลัก SDL_WINDOW_FILL_DOCUMENT และฟังก์ชัน SDL_SetWindowFillDocument() พร้อมด้วยคุณสมบัติที่เกี่ยวข้องอีกหลายประการ ตัวอย่างที่น่าสนใจได้แก่:
- ฟังก์ชัน SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING และ SDL_PROP_WINDOW_EMSCRIPTEN_CANVAS_ID_STRING ใช้สำหรับตั้งค่าและสอบถาม ID ของผืนผ้าใบที่ SDL ใช้งาน
- SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_FILL_DOCUMENT_BOOLEAN และ SDL_PROP_WINDOW_EMSCRIPTEN_FILL_DOCUMENT_BOOLEAN เพื่อระบุและตรวจสอบว่าหน้าต่างควรครอบคลุมพื้นที่เอกสารทั้งหมดหรือไม่
- ฟังก์ชัน SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING และ SDL_PROP_WINDOW_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING ใช้สำหรับระบุและสอบถามข้อมูลองค์ประกอบที่เชื่อมโยงกับการป้อนข้อมูลจากแป้นพิมพ์
ตัวเลือกเหล่านี้ช่วยให้สามารถควบคุมได้อย่างละเอียดมากยิ่งขึ้น SDL ทำงานร่วมกับ DOM และ Canvas ได้อย่างไร?วิธีนี้ช่วยหลีกเลี่ยงการใช้เทคนิคพิเศษและเลเยอร์ระดับกลางเมื่อทำงานกับ Emscripten นอกจากนี้ยังช่วยให้มั่นใจได้ง่ายขึ้นว่า SDL เข้ากันได้กับเฟรมเวิร์กเว็บหรือการผสานรวมที่ซับซ้อนมากขึ้น ซึ่งผืนผ้าใบเป็นเพียงส่วนหนึ่งของหน้าเว็บเท่านั้น
PlayStation 2 และแพลตฟอร์มอื่นๆ ที่ไม่ค่อยพบเห็นทั่วไป
แม้จะฟังดูน่าประหลาดใจ แต่ SDL 3.4 ก็ให้ความสำคัญกับเรื่องต่อไปนี้ด้วย แพลตฟอร์มรุ่นเก่าอย่าง PlayStation 2เพิ่มคำแนะนำเพื่อควบคุมพารามิเตอร์การแสดงผล: SDL_HINT_PS2_GS_WIDTH, SDL_HINT_PS2_GS_HEIGHT, SDL_HINT_PS2_GS_PROGRESSIVE และ SDL_HINT_PS2_GS_MODE ซึ่งช่วยให้คุณปรับความละเอียด โหมดโปรเกรสซีฟ และการตั้งค่าทั่วไปของ Graphics Synthesizer ได้
รายละเอียดเหล่านี้แสดงให้เห็นอย่างชัดเจนว่า SDL ยังคงเป็นตัวเลือกที่มีความยืดหยุ่นสูงมากสำหรับ โครงการทำเอง, การจำลอง หรือการวิจัย บนแพลตฟอร์มรุ่นเก่า นอกเหนือจากการให้ความสำคัญอย่างมากกับพีซีสมัยใหม่ มือถือ และเว็บ
การจัดการกระบวนการ สิทธิ์การเข้าถึงกล้อง และข้อมูลเมตาของไฟล์ ELF
ในระดับระบบ SDL 3.4 เพิ่มคุณสมบัตินี้เข้ามา SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRINGส่วนนี้ใช้สำหรับกำหนดค่าไดเร็กทอรีการทำงานของกระบวนการใหม่ที่สร้างจาก SDL ซึ่งจะช่วยให้การเรียกใช้กระบวนการย่อยหรือเครื่องมือภายนอกจากแอปพลิเคชัน SDL ของคุณง่ายขึ้น โดยไม่ต้องเข้าถึง API ของระบบปฏิบัติการ
ในสาขาการถ่ายภาพ SDL_GetCameraPermissionState() ตอนนี้จะส่งคืนค่าประเภท SDL_CameraPermissionState แทนที่จะใช้จำนวนเต็มทั่วไป จะช่วยให้ความหมายสอดคล้องกันมากขึ้น และอำนวยความสะดวกในการจัดการสิทธิ์บนแพลตฟอร์มมือถือและเดสก์ท็อป
ในระบบ Unix นั้น SDL จะมีบันทึก ELF ที่อธิบายถึงคุณสมบัติของมัน สิ่งอำนวยความสะดวกในห้องสมุดที่ไม่บังคับ ตามรูปแบบที่ระบุไว้ใน systemd.io/ELF_DLOPEN_METADATA แนวคิดก็คือ ดิสทริบิวชันต่างๆ สามารถวิเคราะห์บันทึกเหล่านี้และสร้างการพึ่งพาของแพ็กเกจโดยอัตโนมัติโดยใช้เครื่องมือต่างๆ เช่น package-notes SDL มีมาโคร SDL_ELF_NOTE_DLOPEN เพื่อให้ไลบรารีและเกมอื่นๆ สามารถทำเช่นเดียวกันได้ ซึ่งจะช่วยให้การจัดการการพึ่งพาเป็นไปอย่างสะอาดและเป็นระเบียบมากขึ้น
ความคืบหน้าของหน้าต่างและเคอร์เซอร์แบบเคลื่อนไหว
เพื่อปรับปรุงประสบการณ์การใช้งานของผู้ใช้ SDL 3.4 ได้เพิ่มคุณสมบัติที่ออกแบบมาเพื่อ แสดงความคืบหน้าและปรับปรุงส่วนติดต่อผู้ใช้ให้ดียิ่งขึ้นตัวอย่างเช่น ฟังก์ชัน SDL_SetWindowProgressState(), SDL_SetWindowProgressValue(), SDL_GetWindowProgressState() และ SDL_GetWindowProgressValue() ถูกนำมาใช้เพื่อแสดงแถบความคืบหน้าบนไอคอนหน้าต่างในแถบงานของ Windows และ Linux
คุณสมบัตินี้ช่วยให้ผู้ใช้สามารถมองเห็นได้ สถานะของการผ่าตัดระยะยาว (การดาวน์โหลด การอัปโหลด การสร้างภายใน ฯลฯ) แม้ว่าหน้าต่างนั้นจะไม่ได้แสดงอยู่ด้านหน้าก็ตาม นี่เป็นวิธีที่ดูดีทีเดียวในการให้ข้อมูลป้อนกลับโดยไม่ต้องออกแบบ HUD เพิ่มเติม
ในทางกลับกัน ฟังก์ชัน SDL_CreateAnimatedCursor() อนุญาตให้... สร้างเคอร์เซอร์สีแบบเคลื่อนไหวฟีเจอร์นี้ช่วยเพิ่มความสวยงามให้กับเกมหรือเครื่องมือที่ใช้เคอร์เซอร์ในการแสดงสถานะต่างๆ (เช่น กำลังโหลด การกระทำที่อาจเกิดขึ้น การแจ้งเตือน ฯลฯ) เมื่อรวมกับคำแนะนำใหม่ SDL_HINT_MOUSE_DPI_SCALE_CURSORS ซึ่งตอนนี้มีค่าเริ่มต้นเป็น "0" เพื่อป้องกันไม่ให้เคอร์เซอร์เปลี่ยนขนาดโดยไม่คาดคิดในสภาพแวดล้อมที่มีการปรับขนาด DPI จะทำให้สามารถควบคุมลักษณะของตัวชี้ได้อย่างแม่นยำยิ่งขึ้น
ด้วยการเปลี่ยนแปลงต่างๆ เหล่านี้ ตั้งแต่การผสานรวม GPU 3D/2D, การรองรับ PNG ดั้งเดิม, การปรับปรุงอินพุตและเสียง ไปจนถึงการใส่ใจกับ Linux รุ่นใหม่, Emscripten, visionOS และคอนโซลแบบคลาสสิก ทำให้ SDL 3.4 ตอกย้ำตำแหน่งของตนเองในฐานะโปรแกรมที่มีประสิทธิภาพสูง ชุดเครื่องมือที่ครบครันมากสำหรับการพัฒนาข้ามแพลตฟอร์มลดการพึ่งพาภายนอกให้น้อยที่สุด และสร้างรากฐานที่มั่นคงสำหรับการพัฒนาต่อยอดโดยไม่ต้องเสียเวลาทั้งวันไปกับการแก้ไขปัญหาที่ไม่เกี่ยวข้องกับโค้ดของคุณเอง
