2010-04-03 19 views
7

के साथ गलत हो गया है, मैं थोड़ी देर के लिए इसके साथ संघर्ष कर रहा हूं, और यह कोड मेरे साथ, अज्ञात कारणों से दुर्घटनाग्रस्त हो गया है। मैं एक एफबीओ बना रहा हूं, एक बनावट बाध्यकारी हूं, और फिर मेरे पहले आईफोन सिम्युलेटर पर "EXC_BAD_ACCESS" के साथ पहली बार glDrawArrays() क्रैश हो रहा है।ओपनजीएल ईएस 2.0 एफबीओ निर्माण अज्ञात त्रुटि

यहाँ कोड मैं FBO बनाने के लिए उपयोग (और बनावट बाँध और ...)

glGenFramebuffers(1, &lastFrameBuffer); 
glGenRenderbuffers(1, &lastFrameDepthBuffer); 
glGenTextures(1, &lastFrameTexture); 

glBindTexture(GL_TEXTURE1, lastFrameTexture); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 768, 1029, 0, GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, NULL); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

//Bind/alloc depthbuf 
glBindRenderbuffer(GL_RENDERBUFFER, lastFrameDepthBuffer); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, 768, 1029); 

glBindFramebuffer(GL_FRAMEBUFFER, lastFrameBuffer); 

//binding the texture to the FBO :D 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, lastFrameTexture, 0); 

// attach the renderbuffer to depth attachment point 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, lastFrameDepthBuffer); 

[self checkFramebufferStatus]; 

आप देख सकते हैं इस एक वस्तु में भाग लेता है है, checkFrameBufferStatus इस तरह दिखता है:

GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); 
switch(status) 
{ 
    case GL_FRAMEBUFFER_COMPLETE: 
    JNLogString(@"Framebuffer complete."); 
    return TRUE; 

    case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 
    JNLogString(@"[ERROR] Framebuffer incomplete: Attachment is NOT complete."); 
    return false; 

    case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 
    JNLogString(@"[ERROR] Framebuffer incomplete: No image is attached to FBO."); 
    return false; 

    case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 
    JNLogString(@"[ERROR] Framebuffer incomplete: Attached images have different dimensions."); 
    return false; 

    case GL_FRAMEBUFFER_UNSUPPORTED: 
    JNLogString(@"[ERROR] Unsupported by FBO implementation."); 
    return false; 

    default: 
    JNLogString(@"[ERROR] Unknown error."); 
    return false; 

JNLogString सिर्फ एक NSLog है, और इस मामले में यह मुझे देता है:

2010-04-03 02:46:54.854 Bubbleeh[6634:207] ES2Renderer.m:372 [ERROR] Unknown error. 

जब मैं इसे कहते सही टी यहाँ।

तो, यह दुर्घटनाग्रस्त हो जाता है, और नैदानिक ​​मुझे बताता है कि एक अज्ञात त्रुटि है और मैं थोड़ी देर में फंस गया हूं। मैंने मूल रूप से ओपनजीएल ईएस 2.0 प्रोग्रामिंग गाइड से कोड कॉपी किया ...

मैं क्या गलत कर रहा हूं?

+0

genpfault: आपको लगता है कि शरीर को थोड़ा खराब कर दिया गया है। कृपया इसे ठीक करे। अग्रिम में धन्यवाद। – Nick

उत्तर

3
 glBindTexture(GL_TEXTURE1, lastFrameTexture); 

जिसकी अनुमति नहीं है, मैं इकाई एक (GL_TEXTURE1) करने के लिए बाध्य करने के लिए बनावट कोशिश कर रहा था, लेकिन वह glActiveTexture (द्वारा) किया जाना चाहिए, नहीं glBindTexture() है, जो बनावट के प्रकार जानना चाहता है से (GL_TEXTURE_2D, GL_TEXTURE_3D, आदि) बनावट इकाई नहीं। बनावट इकाई में एक बनावट रखने के लिए 1 मैं अब निम्नलिखित कोड है जो मुझे लगता है कि सही है:

//Bind 2D Texture lastFrameTexture to texture unit 1 
glActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_2D, lastFrameTexture); 
1

प्रत्येक जीएल कॉल के बाद glGetError का उपयोग करने का प्रयास करें। विशेष रूप से glTexImage2D

+0

धन्यवाद, इससे बहुत मदद मिली। – Nick

0

आप XCode उपयोग करते हैं, "ब्रेकप्वाइंट नेविगेटर" में ओपन त्रुटियों के लिए ब्रेकप्वाइंट जोड़ने ([+] -> [जोड़े ओपनजीएल ईएस त्रुटि ब्रेकपॉइंट])। तब सभी ओपनजीएल समस्याओं को लाइन पर दिखाया जाएगा, जहां समस्या दिखाई देती है।

संबंधित मुद्दे