नीचे के अंदर बिंदु, एक GLSL टुकड़ा शेडर कि एक Texel आउटपुट यदि दिए गए बनावट coord एक बॉक्स के अंदर है अन्यथा एक रंग उत्पादन होता है। यह सिर्फ मूर्खतापूर्ण लगता है और वहां ब्रांचिंग के बिना ऐसा करने का एक तरीका होना चाहिए?GLSL बॉक्स परीक्षण
uniform sampler2D texUnit;
varying vec4 color;
varying vec2 texCoord;
void main() {
vec4 texel = texture2D(texUnit, texCoord);
if (any(lessThan(texCoord, vec2(0.0, 0.0))) ||
any(greaterThan(texCoord, vec2(1.0, 1.0))))
gl_FragColor = color;
else
gl_FragColor = texel;
}
नीचे शाखा के बिना एक संस्करण है, लेकिन यह अभी भी बेकार लगता है। "बनावट समन्वय क्लैंपिंग" के लिए सबसे अच्छा अभ्यास क्या है?
uniform sampler2D texUnit;
varying vec4 color;
varying vec4 labelColor;
varying vec2 texCoord;
void main() {
vec4 texel = texture2D(texUnit, texCoord);
bool outside = any(lessThan(texCoord, vec2(0.0, 0.0))) ||
any(greaterThan(texCoord, vec2(1.0, 1.0)));
gl_FragColor = mix(texel*labelColor, color,
vec4(outside,outside,outside,outside));
}
मैं लेबल के साथ क्षेत्र के लिए texels क्लैम्पिंग रहा है - बनावट रों & टी निर्देशांक इस मामले में 0 और 1 के बीच किया जाएगा। अन्यथा, मैं भूरा रंग का उपयोग करता हूं जहां लेबल नहीं है।
ध्यान दें कि मैं भी कोड है कि करता है नहीं की शाखाओं संस्करण का निर्माण कर सकता है एक बनावट लुकअप जब यह करने की जरूरत नहीं है। क्या यह गैर-ब्रांचिंग संस्करण से तेज़ होगा जो हमेशा एक बनावट लुकअप करता है? हो सकता है कि शाखाओं में से बचने और सबसे अच्छा प्रदर्शन प्राप्त करने के लिए कुछ परीक्षण के लिए समय ...
के माध्यम से मैं हमेशा इस तरह सामान के लिए बेंचमार्किंग परिणाम देखने के लिए इच्छुक हूँ। मुझे लगता है कि इस मामले में आपको एक परिदृश्य बनाना पड़ सकता है जहां कई बिंदु-इन-बॉक्स परीक्षण एक बाधा बन जाते हैं। – jozxyqk