The OpenGL® ES Shading Language (v1.00, r17) [PDF] (जोर मेरा) की धारा 5.8 से:क्या आप एक छोटे से वेक्टर को आवंटित करने के लिए glVertexAttribPointer का उपयोग कर सकते हैं?
असाइनमेंट ऑपरेटर lvalue में rvalue-अभिव्यक्ति के मूल्य संग्रहीत करता है और प्रकार और lvalue-अभिव्यक्ति की परिशुद्धता के साथ एक rvalue रिटर्न । लालू-अभिव्यक्ति और रावल-अभिव्यक्ति का एक ही प्रकार होना चाहिए। सभी वांछित प्रकार-रूपांतरणों को एक निर्माता के माध्यम से स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।
तो यह कुछ इस तरह कर रही कानूनी नहीं होगा की तरह लगता है:
vec3 my_vec3 = vec3(1, 2, 3);
vec4 my_vec4 = my_vec3;
और यह कानूनी दूसरी पंक्ति होना चाहिए था बनाने के लिए कुछ की तरह:
vec4 my_vec4 = vec4(my_vec3, 1); // add 4th component
मुझे लगता है कि glVertexAttribPointer
समान आवश्यकताओं थी। यही है, अगर आप vec4
को असाइन कर रहे थे कि size
पैरामीटर 4 के बराबर होना चाहिए।
तब मैं GLES20TriangleRenderer sample for Android पर आया। कुछ प्रासंगिक स्निपेट:
attribute vec4 aPosition;
maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
तो aPosition
एक vec4
है, लेकिन है कि यह निर्धारित करने के लिए प्रयोग किया जाता है glVertexAttribPointer
करने के लिए कॉल 3. के size
इस कोड सही है है, अनिर्दिष्ट व्यवहार पर निर्भर GLES20TriangleRenderer
है, या फिर कुछ और है मुझे याद आ रही है?
दिलचस्प। क्या यह व्यवहार कहीं दस्तावेज है? –
@LaurenceGonsalves: यह ओपनजीएल ES विनिर्देश में प्रलेखित है। –
मैं कुछ और विशिष्ट के लिए उम्मीद कर रहा था। :-) रिकॉर्ड के लिए, यह "एरे तत्वों को स्थानांतरित करने" शीर्षक के तहत "Vertex Arrays" spec के खंड 2.8 में प्रलेखित किया गया प्रतीत होता है। –