विफल रहता है मैं एक्सकोड 4.5.1 का उपयोग कर रहा हूं और आईओएस 6 के साथ आईफोन 5 पर परीक्षण कर रहा हूं।एक्सकोड में फ़्रेम कैप्चर
मैं समस्या के बिना फ्रेम कैप्चर फ़ंक्शन का उपयोग कर रहा था, लेकिन अचानक यह काम करना बंद कर दिया। जब मैं फ्रेम कैप्चर बटन दबाता हूं, ऐसा लगता है कि फ्रेम कैप्चर किया गया है, और फोन एक रिक्त स्क्रीन पर स्विच करता है, केवल एप्लिकेशन स्क्रीन पर वापस स्विच करने के लिए, और एप्लिकेशन चल रहा रहता है। मैं अभी भी एप्लिकेशन को डीबग और रोक सकता हूं, लेकिन फ्रेम कैप्चर करने का कोई तरीका नहीं है। मुझे कंसोल में कोई भी त्रुटि दिखाई नहीं दे रही है।
कारण यह काम करना बंद कर दिया गया यह कोड कोड का टुकड़ा है। यह कोड एक रेंडरटेक्चर में कुछ प्रस्तुत करना है, लेकिन रेंडरटेक्चर खाली लगता है। मैं फ्रेम पर कब्जा समारोह का उपयोग करने के क्या गलत है पता लगाने के लिए चाहता था, लेकिन कोड में ही मुझे पर कब्जा नहीं दूँगा ... :(
किसी भी विचार क्यों
// ------------- init function -----------------
// Create the framebuffer and bind it
glGenFramebuffers(1, &g_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
//Create the destination texture, and attach it to the framebuffer’s color attachment point.
glGenTextures(1, &g_texture);
glBindTexture(GL_TEXTURE_2D, g_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, g_texture, 0);
//Test the framebuffer for completeness
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER) ;
if(status != GL_FRAMEBUFFER_COMPLETE) {
NSLog(@"failed to make complete framebuffer object %x", status);
} else {
NSLog(@"SkyPlugin initialized");
}
// ----------------- on update ------------------
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO);
glGetIntegerv(GL_VIEWPORT, oldViewPort);
// set the framebuffer and clear
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
glViewport(0, 0, 32, 32);
//glClearColor(0.9f, 0.1f, 0.1f, 1.0f);
glDisable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT);
// Set shader
glUseProgram(m_program);
// do some glEnableVertexAttribArray
// ...
// texture setting
glActiveTexture(GL_TEXTURE0);
glUniform1i(m_uniform, 0);
ResourceManager* resourceManager = ResourceManager::GetInstance();
glBindTexture(GL_TEXTURE_2D, m_texture[0]);
// ----------- Draw -----------
// Draws a full-screen quad to copy textures
static const vertexDataUV quad[] = {
{/*v:*/{-1.f,-1.f,0}, /*t:*/{0,0}},
{/*v:*/{-1.f,1,0}, /*t:*/{0,1}},
{/*v:*/{1,-1.f,0}, /*t:*/{1,0}},
{/*v:*/{1,1,0}, /*t:*/{1,1}}
};
static const GLubyte indeces[] = {0,2,1,3};
glVertexAttribPointer(m_posAttrib, 3, GL_FLOAT, 0, sizeof(vertexDataUV), &quad[0].vertex);
glVertexAttribPointer(m_texCoordAttrib, 2, GL_FLOAT, 0, sizeof(vertexDataUV), &quad[0].uv);
glDrawElements(GL_TRIANGLE_STRIP, 4, GL_UNSIGNED_BYTE, indeces);
// ------------ End
// go back to the main framebuffer!
glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
glViewport(oldViewPort[0], oldViewPort[1], oldViewPort[2], oldViewPort[3]);
glEnable(GL_DEPTH_TEST);
//glClearColor(0.1f, 0.1f, 0.1f, 1.0f);
संपादित करें: (2012/अक्टूबर/28)
मुझे पता चला क्यों उपरोक्त कोड काम नहीं कर रहा था। मैं बफर प्रस्तुत करना! काम करता है नीचे कोड एक बाध्य करने के लिए भूल गया, लेकिन अभी भी फ्रेम पर कब्जा विफल रहता है जब इस कोड सक्रिय है ...
इनिट पर,
// रेंडरबफर बनाएं और इसे glgenRenderbuffers (1, & g_renderbuffer) बांधें; glbindRenderbuffer (GL_RENDERBUFFER, g_renderbuffer); glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA8_OES, डब्ल्यू, एच);
// Create the framebuffer and bind it
glGenFramebuffers(1, &g_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, g_renderbuffer);
//Create the destination texture, and attach it to the framebuffer’s color attachment point.
glGenTextures(1, &g_texture);
glBindTexture(GL_TEXTURE_2D, g_texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, g_texture, 0);
अद्यतन पर,
glGetIntegerv(GL_RENDERBUFFER_BINDING, &oldRBO);
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &oldFBO);
glGetIntegerv(GL_VIEWPORT, oldViewPort);
// set the framebuffer and clear
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, g_framebuffer);
glBindRenderbuffer(GL_RENDERBUFFER, g_renderbuffer);
glViewport(0, 0, 32, 32);
// ... draw stuff ...
अद्यतन की समाप्ति,
// go back to the main framebuffer!
glBindFramebuffer(GL_FRAMEBUFFER, oldFBO);
glBindRenderbuffer(GL_RENDERBUFFER, oldRBO);
हमारे पास बिल्कुल वही समस्या है।पता नहीं क्या कारण :( – Split
केवल लॉग मैं अब तक मिल सकता है यह है: ' 10/28/12 7: 02: 19.818 PM Xcode [5371]: [मीट्रिक टन] DVTAssertions: में चेतावनी/SourceCache/GPUDebuggeriOSSupport/GPUDebuggeriOSSupport-51.8/GPUiOSReplayController.m: 127 विवरण: replayer गलत तरीके से समाप्त वस्तु: विधि: -_handleGuestAppStatusChangeNotification: थ्रेड: {नाम = (शून्य), num = 1} कृपया इस चेतावनी संदेश और किसी भी उपयोगी जानकारी के साथ http://bugreport.apple.com पर एक बग फ़ाइल करें। ' –
endavid