मैं OpenGL ES 2.0 सीखने की कोशिश कर रहा हूं और मैं सोच रहा हूं कि shaders को "प्रबंधित" करने का सबसे आम अभ्यास क्या है।
मैं यह सवाल इसलिए पूछ रहा हूं क्योंकि मैंने जो उदाहरण पाया है (जैसे कि एंड्रॉइड एसडीके के साथ प्रदान की गई एपीआई डेमो में शामिल है), मैं आमतौर पर GLRenderer वर्ग के अंदर सब कुछ देखता हूं और मैं चीजों को अलग कर सकता हूं इसलिए मेरे पास हो सकता है, उदाहरण के लिए, एक GLImage ऑब्जेक्ट जिसे मैं पुन: उपयोग कर सकता हूं जब भी मैं एक टेक्सचर्ड क्वाड खींचना चाहता हूं (मैं इस समय केवल 2 डी पर ध्यान केंद्रित कर रहा हूं), ठीक उसी तरह जैसे मैंने अपने ओपनजीएल ईएस 1.0 कोड में किया था। लगभग हर उदाहरण में मैंने पाया है, shaders को केवल वर्ग विशेषताओं के रूप में परिभाषित किया गया है। उदाहरण के लिए:
public class Square {
public final String vertexShader =
"uniform mat4 uMVPMatrix;\n" +
"attribute vec4 aPosition;\n" +
"attribute vec4 aColor;\n" +
"varying vec4 vColor;\n" +
"void main() {\n" +
" gl_Position = uMVPMatrix * aPosition;\n" +
" vColor = aColor;\n" +
"}\n";
public final String fragmentShader =
"precision mediump float;\n" +
"varying vec4 vColor;\n" +
"void main() {\n" +
" gl_FragColor = vColor;\n" +
"}\n";
// ...
}
अगर इन सवालों में से कुछ गूंगे हैं, तो मैं पहले से माफी मांगता हूं, लेकिन मैंने पहले कभी भी शेडर्स के साथ काम नहीं किया है।
1) क्या उपरोक्त कोड शेडर्स (सार्वजनिक अंतिम वर्ग के गुणों) को परिभाषित करने का सामान्य तरीका है?
2) क्या मुझे एक अलग शेडर क्लास होना चाहिए?
3) यदि शादियों को उनके उपयोग करने वाले वर्ग के बाहर परिभाषित किया जाता है, तो मुझे उनकी विशेषताओं के नाम कैसे पता होंगे (उदाहरण के लिए "कोड में निम्नलिखित कोड") ताकि मैं उन्हें बाँध सकूं?
colorHandle = GLES20.glGetAttribLocation(program, "aColor");