2016-03-30 21 views
0

WebGL'de, her gölgelendiricinin bir girdi dokusundan okuduğu, başka bir doku oluşturduğu ve son dokuda istenen sonucu içerdiği uzun bir gölgelendiriciler var.WebGL'de dokuları yeniden oluştururken

boru hattındaki dokuları, eş zamanlı olarak çalışıyormuş gibi yeniden kullanabilir miyim?

// ... init texA to contain input ... 
shader1.samplingFrom(texA).renderTo(texB); 
shader2.samplingFrom(texB).renderTo(texA); 
shader3.samplingFrom(texA).renderTo(texB); 
return readPixels(texB); // Always the same answer? 

Bu konuda, bir sonraki aşama başlamadan önce bir gölgelendirme işlemine bile güvenebilir miyim?

// ... init texA to contain input ... 
shader1.samplingFrom(texA).renderTo(texB); 
shader2.samplingFrom(texB).renderTo(texC); 
shader3.samplingFrom(texC).renderTo(texD); 
return readPixels(texD); // Always the same answer? 

Başlangıçta ben dokuları yeniden düşündüm, ama (bir tür yarış durumu ima) boru hattını durak eğer uzağa gider garip davranış fark ettik şimdi ben garanti ne olduğundan emin değilim sağlanan.

+0

Gördüğüm hata, henüz oluşturulmamış bir dokudan oluşuyordu. Emin değil * neden * belirti vardı, ama bir eşzamanlılık sorunu değildi. Yine de, bu sorunun cevabını bilmekle ilgileniyorum. –

cevap

1

Evet, dokuları yeniden kullanabilirsiniz. Ne yapamazsınız, OpenGL/WebGL'de aynı çizim çağrısında aynı dokudan okunur ve işlenir.

Ayrıca, gölgelendiriciler, en azından OpenGL'de paralel olarak değil birbiri ardına çalışır. Tek bir gölgelendirici, dahili olarak bazı şeyleri paralel olarak yapabilir, ancak sonuç, seri olarak çalıştırılmış gibi olması gerekir.