我有一個_color統一着色器和一個採樣器。現在,如果採樣器沒有設置,我只想用_color繪製。有沒有什麼方法可以在着色器中找出我們的內容? (不幸的是,採樣器未分配時返回1,1,1,1,這使得通過阿爾法不可能將其混合)如何檢查採樣器在glsl中是否爲空?
6
A
回答
7
你不能那樣做。採樣器是一個不透明的手柄,它只引用一個紋理單元。我不確定規範是否保證(1,1,1,1)從未綁定紋理的單元進行採樣,或者如果這是未定義的行爲。
你可以做的只是使用另一種制服來使用採樣器或統一的顏色進行切換,或者只是使用不同的着色器並在它們之間切換。這裏也有子程序的可能性,但我不知道這是否是這樣一個簡單問題的正確選擇。
1
我偶然發現了這個試圖解決類似問題的問題。
由於GLSL 4.30
int textureQueryLevels(gsamplerX sampler);
是一個內置的功能。在GLSL規範中。頁。 151它說
如果沒有紋理或不完整的紋理與採樣器關聯,則返回零值。
在OpenGL的形式,我發現這個問題的條目提示使用
ivecY textureSize(gsamplerX sampler,int lod);
和測試,如果紋理尺寸大於零。但就我的理解而言,這是標準未涵蓋的內容。在OpenGL規範的部分11.1.3.4據說
如果計算出紋理圖像電平是在範圍[levelbase,Q],結果是不確定的外面...
編輯: 我只是在我的問題上試過這種方法,結果發現nvidia在這個函數中有一些問題,當沒有紋理被綁定時導致非零值。 (見2015年的nvidia bug report)
相關問題
- 1. 如何在glsl中檢測片段是否被多重採樣?
- 2. SQL檢查數據是否被採樣
- 3. 檢查中繼器是否爲空
- 4. 如何檢查GLSL着色器是否處於原始限制?
- 5. ASP.NET [如何檢查SqlDataSource1是否爲空]
- 6. 如何檢查sqlParameter是否爲空?
- 7. 如何檢查UITextFields是否爲空?
- 8. Swift - 如何檢查TableView是否爲空
- 9. 如何檢查plist是否爲空
- 10. 如何檢查數組是否爲空?
- 11. 如何檢查JComboBox是否爲空?
- 12. 如何檢查jQuery datepicker是否爲空?
- 13. C++如何檢查ostringstream是否爲空
- 14. 如何檢查corba :: WString是否爲空?
- 15. 如何檢查是否PasswordFor爲空
- 16. 如何檢查數組是否爲空?
- 17. 如何檢查JsonAraay是否爲空?
- 18. 如何檢查DataFrame是否爲空?
- 19. 如何檢查列表是否爲空?
- 20. 如何檢查鏈表是否爲空
- 21. 如何檢查mysql表是否爲空?
- 22. 如何檢查edittext是否爲空?
- 23. 如何檢查FormData是否爲空?
- 24. AS3如何檢查BitmapData是否爲空
- 25. 如何檢查腳本是否爲空?
- 26. 如何檢查LocationServices.FusedLocationApi.getLastLocation()是否爲空?
- 27. 如何檢查UIWebView是否爲空
- 28. 如何檢查對象是否爲空
- 29. 如何檢查BLOB是否爲空
- 30. 如何檢查setChoiceModel是否爲空?