ฉันต้องการถามว่ามีวิธีปฏิบัติที่ดีที่สุดสำหรับการตั้งค่าEffect
พารามิเตอร์ใน XNA หรือไม่ pass.Apply()
หรือกล่าวอีกนัยหนึ่งว่าสิ่งที่เกิดขึ้นเมื่อผมเรียก ฉันจินตนาการถึงหลาย ๆ สถานการณ์:
- ทุกครั้งที่
Apply
มีการเรียกพารามิเตอร์เอฟเฟกต์ทั้งหมดจะถูกถ่ายโอนไปยัง GPU และดังนั้นจึงไม่มีผลต่อความถี่ที่ฉันตั้งค่าพารามิเตอร์ - แต่ละครั้ง
Apply
จะถูกเรียกเฉพาะพารามิเตอร์ที่ได้รับการรีเซ็ตจะถูกถ่ายโอน ดังนั้นการแคช Set-actions ที่ไม่ได้ตั้งค่าใหม่ควรหลีกเลี่ยง - แต่ละครั้ง
Apply
จะถูกเรียกเฉพาะพารามิเตอร์ที่มีการเปลี่ยนแปลงเท่านั้นที่จะถูกถ่ายโอน ดังนั้นการแคชการตั้งค่าจึงไม่มีประโยชน์ - คำถามทั้งหมดนี้ไม่มีข้อบกพร่องเนื่องจากไม่มีวิธีการใดวิธีหนึ่งที่กล่าวถึงผลกระทบต่อประสิทธิภาพของเกม
ดังนั้นคำถามสุดท้าย: มีประโยชน์หรือไม่หากใช้การแคชของชุดการดำเนินการเช่น:
private Matrix _world;
public Matrix World
{
get{ return _world; }
set
{
if (value == world) return;
_effect.Parameters["xWorld"].SetValue(value);
_world = value;
}
}
ขอบคุณในความคาดหมาย