पर दो बनावट भेजना मेरे जीएलएसएल शेडर को दो बनावट भेजते समय केवल एक ही आता है। अजीब बात यह है कि मेरे पहले बांधने वाले बनावट का उपयोग मेरे शेडर में दोनों बनावट स्लॉट के लिए किया जाता है। यह मुझे विश्वास दिलाता है कि जिस तरह से मैं ओपनजीएल में अपने बनावट गुजर रहा हूं वह गलत है। हालांकि, मैं समस्या को ट्रैक करने में असमर्थ हूं।जीएलएसएल शेडर
यहां वह कोड है जहां मैं अपने शेडर में उपयोग के लिए बनावट को कॉन्फ़िगर करता हूं।
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo2);
glPushAttrib(GL_VIEWPORT_BIT | GL_ENABLE_BIT);
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Get uniforms
GLuint pass_3O = glGetUniformLocation(blend_shader, "org");
GLuint pass_3B = glGetUniformLocation(blend_shader, "blur");
// Activate shaders
glUseProgram(blend_shader);
// Bind first texture
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, init_texture);
// Bind the second texture
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, third_texture);
// Assign index to 2d images
glUniform1i(pass_3O, 0);
glUniform1f(pass_3B, 1);
उपरोक्त कोड दो बनावट में गुज़र रहा है। पहला 3 डी दृश्य के पहले प्रतिपादन पास की 2 डी छवि है। तीसरा यह है कि धुंध के x2 स्तरों के साथ एक ही बनावट जोड़ा गया। यह अंतिम चरण एक गरीब मनुष्य खिलने के लिए उन्हें एक साथ मिश्रण करना है।
यहां वह कोड है जहां मैं दोनों बनावट को चौकोर में खींच रहा हूं।
// Draw to quad
glBegin(GL_QUADS);
glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 0.0f);
glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 0.0f);
glVertex3f(-w_width/2.0, -w_height/2.0, 0.5f);
glMultiTexCoord2f(GL_TEXTURE0, 0.0f, 1.0f);
glMultiTexCoord2f(GL_TEXTURE1, 0.0f, 1.0f);
glVertex3f(-w_width/2.0, w_height/2.0, 0.5f);
glMultiTexCoord2f(GL_TEXTURE0, 1.0f, 1.0f);
glMultiTexCoord2f(GL_TEXTURE1, 1.0f, 1.0f);
glVertex3f(w_width/2.0, w_height/2.0, 0.5f);
glMultiTexCoord2f(GL_TEXTURE0, 1.0f, 0.0f);
glMultiTexCoord2f(GL_TEXTURE1, 1.0f, 0.0f);
glVertex3f(w_width/2.0, -w_height/2.0, 0.5f);
glEnd();
glFlush();
glPopAttrib();
// Unbind textures
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, 0);
// Disable blend shader
glUseProgram(0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
और यहां वह शेडर है जिसका उपयोग मैं अंतिम छवि प्रस्तुत करने के लिए कर रहा हूं।
Vert
#version 120
void main()
{
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[1] = gl_MultiTexCoord1;
gl_Position = ftransform();
}
Frag
#version 120
uniform sampler2D org;
uniform sampler2D blur;
void main()
{
vec4 orig_clr = texture2D(org, gl_TexCoord[0].st);
vec4 blur_clr = texture2D(blur, gl_TexCoord[1].st);
//gl_FragColor = orig_clr;
gl_FragColor = blur_clr;
}
अगर मैं टुकड़ा शेडर में अंतिम दो पंक्तियों के बीच स्विच मैं एक ही सटीक परिणाम प्राप्त। कौन सा बनावट प्रस्तुत करने का एकमात्र तरीका है उस क्रम को बदलना जिसमें मैं उन्हें बांधता हूं।
उदाहरण के लिए, अंततः मुझे धुंधली छवि पास कर देगी। एक बार फिर, केवल दो छवियों में से एक प्राप्त करना।
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, third_texture);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, init_texture);
जो कुछ मैं देख रहा हूं उस पर कोई विचार? इस कोड में
आपको बहुत बहुत धन्यवाद! यह आश्चर्यजनक है कि इस तरह के सिरदर्द का कारण इतना छोटा हो सकता है। – Freddy
वैकल्पिक रूप से, आप पहले बनावट के लिए नए लेआउट (बाध्यकारी = 0) का उपयोग कर सकते हैं, और दूसरे के लिए लेआउट (बाइंडिंग = 1) का उपयोग कर सकते हैं, तो आपको वर्दी सेट करने की आवश्यकता नहीं है। बेशक, आपको इसके लिए OpenGL4.2 की आवश्यकता है ... – fluffels