2014-07-19 8 views
6

मेरे पास _color वर्दी और एक नमूने वाला शेडर है। अब मैं केवल _color के साथ आकर्षित करना चाहता हूं अगर नमूना सेट नहीं किया गया था। क्या हमारे पास शेडर के भीतर यह समझने का कोई तरीका है? (दुर्भाग्यवश नमूना असाइन किए जाने पर 1,1,1,1 लौटाता है, जो इसे अल्फा के माध्यम से असंभव बनाता है)कैसे जांचें कि नमूना ग्लस्ल में शून्य है या नहीं?

उत्तर

7

आप ऐसा नहीं कर सकते हैं। नमूना एक अपारदर्शी हैंडल है जो सिर्फ एक बनावट इकाई का संदर्भ देता है। मुझे यकीन नहीं है कि क्या spec गारंटी देता है कि (1,1,1,1) जब एक इकाई से नमूनाकरण जहां कोई बनावट बंधी नहीं है, या यदि यह अपरिभाषित व्यवहार है।

आप क्या कर सकते सिर्फ नमूना या वर्दी रंग का उपयोग betwenn स्विच करने के लिए, या बस उन लोगों के बीच अलग अलग shaders और स्विच का उपयोग एक और वर्दी का उपयोग कर रहा है। यहां उपप्रोग्राम की संभावनाएं भी हैं, लेकिन मुझे नहीं पता कि यह इतनी सरल समस्या के लिए सही अपहरण होगा या नहीं।

1

मैंने इस प्रश्न पर एक ही समस्या को हल करने की कोशिश कर ठोकर खाई।

GLSL 4.30

के बाद से
int textureQueryLevels(gsamplerX sampler); 

एक निर्माण में समारोह है। जीएलएसएल स्पेक में। पी। 151 यह कहता है

यदि कोई बनावट या अधूरा बनावट नमूना के साथ जुड़ा हुआ है तो शून्य शून्य वापस कर दिया जाएगा।

ओपन-रूपों में मैं इस सवाल का एक प्रवेश

ivecY textureSize(gsamplerX sampler,int lod); 

और परीक्षण का उपयोग करने के अगर बनावट आकार शून्य से अधिक है सुझाव दे पाया। लेकिन यह मेरी समझ के लिए है, मानक द्वारा कवर नहीं है। ओपन विनिर्देश की धारा 11.1.3.4 में यह कहा जाता है कि

गणना संरचना छवि स्तर रेंज [levelbase, क्ष], परिणाम अपरिभाषित हैं बाहर है ...

संपादित करें : मैंने अभी अपनी समस्या पर इस विधि की कोशिश की है और जैसा कि यह पता चला है कि एनवीडिया में इस फ़ंक्शन के साथ कुछ समस्याएं हैं, जिसके परिणामस्वरूप कोई बनावट नहीं है जब कोई बनावट नहीं है। (2015 से nvidia bug report देखें)

संबंधित मुद्दे