คุณจะทดสอบหน่วยหรือทำการทดสอบอัตโนมัติที่มีประสิทธิภาพมากที่สุดในรหัสกราฟิกสำหรับ OpenGL อย่างไร


17

ฉันกำลังเขียนเกมและเอ็นจิ้นกราฟิคประกอบบน OpenGL ใน C ++ ฉันยังเป็นแฟนของกระบวนการเข้ารหัสที่ดีและการทดสอบอัตโนมัติ การทดสอบรหัสกราฟฟิก + นั้นดูเหมือนจะไม่สามารถเปลี่ยนแปลงได้เนื่องจากผลลัพธ์มักจะเป็นเพียงการแสดงผลเท่านั้น

ตัวอย่างเช่นลองนึกภาพการวิเคราะห์สตรีมรูปภาพดิบที่เรนเดอร์ไปที่หน้าจอไบต์ต่อไบต์ - คุณต้องทดสอบข้อมูลเพื่อเปรียบเทียบกับซึ่งยากที่จะสร้าง / รับและบ่อยครั้งที่รูปภาพที่แสดงไม่เหมือนกันใน ระดับไบต์เมื่อทำงานในเวลาที่ต่างกัน - การเปลี่ยนแปลงเล็กน้อยในอัลกอริทึมจะทำลายวิธีการนี้อย่างสมบูรณ์

ฉันกำลังคิดที่จะสร้างชุดทดสอบแบบเห็นภาพซึ่งโดยทั่วไปฉันสามารถสร้างฉากทดสอบที่แตกต่างกันแสดงสิ่งต่าง ๆ เช่นการทำแผนที่เงาภาพเคลื่อนไหว ฯลฯ ฯลฯ โดยเป็นส่วนหนึ่งของ CI ฉากเหล่านี้จะถูกแสดงเป็นวิดีโอ ไฟล์ (หรืออาจปล่อยไว้เป็นไฟล์ที่เรียกทำงานได้) ที่มีเมทริกต่างกัน สิ่งนี้จะยังคงต้องการการตรวจสอบไฟล์วิดีโอด้วยตนเอง แต่อย่างน้อยที่สุดมันก็ค่อนข้างอัตโนมัติและเป็นมาตรฐาน

คุณคิดอย่างไร? ฉันหวังว่าจะมีวิธีที่ดีกว่า


2
นี่เป็นคำถามที่ดีฉันสงสัยว่าคุณจะได้รับคำตอบที่ดีกว่าที่gamedev.stackexchange.com หรือเปล่าเพราะอาจมีคนที่เคยจัดการเรื่องนี้มาก่อน
FrustratedWithFormsDesigner

3
เนื่องจากคุณใช้ OpenGL ให้พิจารณาวิธีที่กลุ่ม Khronos ทำการทดสอบความสอดคล้องสำหรับ API นี้ เพื่อนร่วมงานในอดีตโปรเจ็กต์ของฉันที่จัดการกับมันบอกฉันว่าการทดสอบกราฟิกของโครโนสนั้นใกล้เคียงกับความสมบูรณ์แบบที่สุดเท่าที่จะทำได้
gnat

@FrustratedWithFormsDesigner ขอบคุณฉันลืมเกี่ยวกับ gamedev.stackexchange อย่างสมบูรณ์ ... ฉันค้นหาโปรแกรมเมอร์ค่อนข้างละเอียด แต่ไม่ใช่คนนั้น ดูเหมือนว่าคำตอบส่วนใหญ่เกี่ยวกับการทดสอบหน่วยที่นั่นมุ่งเน้นไปที่สิ่งที่มักจะทดสอบดังนั้นอาจไม่ซ้ำกัน จะตรวจสอบเพิ่มเติมอีกสักครู่ขอบคุณ :)
สูงสุด

คำตอบ:


8

ห้องสมุดประมวลผลภาพ opencv ทำโดยบันทึกภาพและเปรียบเทียบกับรูปภาพอ้างอิง - มันมีฟังก์ชั่นการทดสอบ c ++ และมาโครมากมายในการจัดการการจับคู่ภาพโดยประมาณเป็นต้น


ฉันจะลองตรวจสอบมันในเชิงลึกยิ่งขึ้น แต่หน้านั้นไม่ได้พูดอะไรเกี่ยวกับการจับคู่ภาพโดยประมาณ คุณรู้หรือไม่ว่ามันจะใช้สำหรับการทดสอบการถดถอยในกรณีของการเปรียบเทียบเฟรมหรือไม่? จากนั้นฉันสามารถตรวจสอบด้วยตาเห็นในครั้งแรกที่มีการสร้างฉากให้สังเกตว่าเป็นข้อมูลอ้างอิงเป็นต้น OpenCV มีฟังก์ชั่นที่พร้อมสำหรับสิ่งนี้ที่ฉันสามารถใช้ได้หรือไม่? : p
สูงสุด

@max โดยทั่วไปจะมีเวอร์ชัน 'ทองคำ' ของฟังก์ชั่นการทดสอบที่สร้างเฟรมอ้างอิงและทำงานครั้งเดียวเมื่อสร้างการทดสอบ ในการแจกแจงมีมาโคร "เปรียบเทียบภาพทดสอบ" ไม่กี่ตัว ฉันไม่คิดว่าจะมีอะไรพิเศษในการอ่านบัฟเฟอร์ openGL กลับไปที่รูปภาพ แต่มันก็ง่ายพอ
Martin Beckett

4

กรอบการทดสอบของคุณสามารถแสดงภาพทดสอบเป็นบัฟเฟอร์ดึงภาพที่แสดงผลและเปรียบเทียบกับภาพอ้างอิง "ทอง" ซึ่งถูกสร้างขึ้นก่อนหน้านี้เพื่อจุดประสงค์นั้น

สิ่งนี้จะไม่ได้ผลเช่นกันสำหรับกรณีที่ผลการทดสอบของคุณไม่คาดว่าจะยังคงเหมือนเดิม อย่างไรก็ตามคุณสามารถคำนวณความแตกต่างยกกำลังสองของภาพทดสอบและรูปภาพอ้างอิงและเปรียบเทียบกับขีด จำกัด

คุณอาจต้องการจัดทำบันทึกและตรวจสอบข้อมูลประสิทธิภาพเนื่องจากการถดถอยครั้งสำคัญในประสิทธิภาพเป็นอีกหนึ่งโหมดความล้มเหลวที่เป็นไปได้


4

แม้ว่าคุณจะไม่สามารถเปรียบเทียบภาพที่ส่งออกได้ แต่อย่างน้อยคุณก็สามารถทดสอบได้ว่าการแสดงผลของคุณเสร็จสมบูรณ์อย่างเหมาะสม (ไม่มีการขัดข้องรอนาน ฯลฯ ฯลฯ ) การหาวิธีตรวจสอบภาพนั้นดีกว่าแน่นอน แต่ถึงอย่างนั้นคุณก็จะได้รับบางสิ่งจากการทดสอบ


2
แน่นอน: ฉันกำลังจะตอบคำถามที่คล้ายกัน ("แม้ว่าคุณจะมีการทดสอบหน่วยที่เพิ่งสร้างไฟล์วิดีโอแบบสุ่มและทำแบบทดสอบเล็กน้อย (เช่นมีความยาวที่เหมาะสมไม่ใช่สีดำสนิทไม่ขาวทั้งหมด) ก็อาจเพียงพอ เพื่อตรวจสอบข้อผิดพลาดในการถดถอยโดยเฉพาะอย่างยิ่งที่ทำให้การทำงานของคุณเกิดข้อยกเว้น ") แต่ไม่จำเป็นต้องมีคำตอบที่คล้ายกันครั้งที่สองดังนั้นฉันจึงทิ้งความคิดเห็นไว้ที่นี่
281377
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.