मैं फ़्रेमबफर बनाने के लिए 2 बनावट (मल्टी रेंडर लक्ष्य) के साथ बनाने का प्रयास करता हूं। फिर हर बार कदम में, दोनों कोडों को निम्नलिखित कोड के रूप में साफ़ और चित्रित किया जाता है। (कुछ हिस्सा यह कम करने के लिए छद्म कोड के रूप में बदल दिया जाएगा।)ओपनगल - क्या एक एफबीओ में संग्रहीत glDrawBuffers संशोधन है? नहीं?
संस्करण 1
//beginning of the 1st time step
initialize(framebufferID12)
//^ I quite sure it is done correctly,
//^ Note : there is no glDrawBuffers() calling
loop , do once every time step {
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebufferID12);
//(#1#) a line will be add here in version 2 (see belowed) <------------
glClearColor (0.5f, 0.0f, 0.5f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// paint a lot of object here , using glsl (Shader .frag, .vert)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
}
सभी वस्तुओं दोनों बनावट के लिए सही ढंग से चित्रित किया जाता है, लेकिन केवल पहले बनावट (ATTACHMENT0) है हर फ्रेम को मंजूरी दे दी, जो गलत है।
संस्करण 2
मैं कोड की एक पंक्ति को सम्मिलित करने के लिए प्रयास करें ...
glDrawBuffers({ATTACHMENT0,ATTACHMENT1}) ;
पर (# 1 #)
और यह उम्मीद अर्थात स्पष्ट सभी दो संरचनाओं के रूप में काम करता है।
(छवि http://s13.postimg.org/66k9lr5av/gl_Draw_Buffer.jpg)
संस्करण 3
संस्करण 2 से, मैं इस
initialize(int framebufferID12){
int nameFBO = glGenFramebuffersEXT();
int nameTexture0=glGenTextures();
int nameTexture1=glGenTextures();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,nameFBO);
glBindTexture(nameTexture0);
glTexImage2D(....); glTexParameteri(...);
glFramebufferTexture2DEXT(ATTACHMENT0, nameTexture0);
glBindTexture(nameTexture1);
glTexImage2D(....); glTexParameteri(...);
glFramebufferTexture2DEXT(ATTACHMENT0, nameTexture1);
glDrawBuffers({ATTACHMENT0,ATTACHMENT1}) ; //<--- moved here ---
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
return nameFBO ;
}
की तरह फ्रेम बफर आरंभीकरण के अंदर होने की कि glDrawBuffers() बयान के लिए कदम यह अब काम नहीं कर रहा है (संस्करण 1 की तरह लक्षण), क्यों?
ओपन मैनुअल ने कहा कि "संदर्भ राज्य में परिवर्तन इस वस्तु में संग्रहीत किया जाएगा", इसलिए glDrawBuffers() "framebufferID12" में संग्रहीत किया जाएगा से राज्य संशोधन है ना? फिर, मुझे इसे हर बार चरण (या हर बार जब मैं एफबीओ बदलता हूं)
मैं कुछ ओपनजीएल की अवधारणा को गलत समझ सकता हूं, तो कृपया मुझे ज्ञान दें।
संपादित करें 1: धन्यवाद जे-पी। मैं मानता हूं कि यह समझ में आता है, लेकिन क्या राज्य पहले ही एफबीओ में दर्ज नहीं किया जाना चाहिए?
संपादित करें 2 (उत्तर स्वीकार करें): रेटो कोराडी का जवाब सही है! मैं एलडब्ल्यूजेजीएल नामक एक गैर-मानक पुस्तकालय का उपयोग कर रहा हूं।
यह मेरे लिए समझ में आता है कि यदि आप डिफ़ॉल्ट कॉन्फ़िगरेशन का उपयोग नहीं करते हैं तो आपको प्रत्येक बार जब आप एक नए बफर से बांधते हैं तो ड्रा बफर समायोजित करना होता है। लेकिन मैं विशेषज्ञ नहीं हूँ ... –