2013-10-08 2 views
0

저는 프로젝트의 게임 플레이 (ios-opengles 2.0)를 녹음하기 위해 everyplay SDK를 사용했습니다. 그 잘 작동합니다. 그러나 RenderToTexture (그림자)를 사용하면 빈 화면 만 기록됩니다. 어떻게이 문제를 극복 할 수 있습니까?Everyplay는 다중 렌더링 패스를 지원합니까? (ios)

그림자의 경우 rendertarget을 여러 번 렌더 패스해야합니다. 다른 방법이 있습니까?

+0

네, 가능합니다. Unity 3 차원 프로젝트에서 음영을 사용했고 레코딩이 정상적으로 작동했습니다. 프레임 버퍼와 관련이있을 수 있습니다. createframebuffer에서 정의한 프레임 버퍼에 대해서만 afterPresentRenderbuffer를 호출해야합니다. –

답변

1

은 다음과 같이 그것을 시도 :

while(1) { 
    renderShadow(); 

    glBindFramebuffer(GL_FRAMEBUFFER, fbo1); 

    [everyplayCapture afterPresentRenderbuffer:fbo1]; 

    glClearColor(0.45f, 0.45f, 0.45f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    .... 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
    ... 

    [everyplayCapture beforePresentRenderbuffer:fbo1]; 

    [(EAGLView *)self.view presentFramebuffer]; 
} 
+0

+1이 절차는 문제를 완전히 해결했습니다. 지침에 감사드립니다. – VivekParamasivam

0

나중에 나는 createframebuffer.As에서 정의한 프레임 버퍼에 대해 afterPresentRenderbuffer를 호출하고 있다고 확신합니다. 다중 렌더링 패스는 단일 패스에 2 개 이상의 프레임 버퍼를 바인딩해야합니다.

가 fbo1 (프레임 버퍼 개체) everyplay 사용되며 fb02 그림자위한 것임을 고려할 다음 그림자를 렌더링하기위한 코드 순서 아래

while(1){ 
    glClearColor(0.45f, 0.45f, 0.45f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    .... 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
    ... 
    [(EAGLView *)self.view presentFramebuffer]; 
} 

이 그림자없이 프레임마다 실행 순서를 제공

while(1) { 

    glClearColor(0.45f, 0.45f, 0.45f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    renderShadow(); 
    glBindFramebuffer(GL_FRAMEBUFFER, fbo1); 
    .... 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
    ... 
    [(EAGLView *)self.view presentFramebuffer]; 
} 

renderShadow(){ 
    glBindFramebuffer(GL_FRAMEBUFFER, fbo2); 
    .... 
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
    .... 

} 

두 개의 FBo로 glBindframebuffer를 이동하면 화면이 공백이되고 Everyplay는 빈 화면을 기록합니다. Everyplay의 통합을 제거하면 위의 그림자 코드가 잘 작동합니다. 내가 선을 포함하는 경우, IOS "EveryplayRecord.xcodeproject"에 대한 Everyplay에서 제공하는 예제 프로젝트에서 는

glBindFramebuffer(GL_FRAMEBUFFER, defaultFrameBuffer); // in drawRect() method it also renders blank screen. 
+0

glBindFramebuffer (GL_FRAMEBUFFER, fbo1) 다음에 [everyplayCapture beforePresentRenderbuffer : fbo1]을 이동하면 어떨까요? 그림자 코드 예제에서? –

+0

답장을 보내 주셔서 감사합니다. 귀하의 제안은 변경되었지만 문제는 완전히 해결되지 않았습니다. glBindFramebuffer를 놓은 후 (GL_FRAMEBUFFER, fbo1); [everyplayCapture beforePresentRenderbuffer : fbo1] 행 옆에 녹음 중에는 게임이 잘 렌더링되지만 'PlayLastRecorded'를 클릭하면 아무 것도 표시되지 않습니다. 솔루션에 가깝다고 생각합니다.

VivekParamasivam

+0

아래 답변을 시도하십시오. afterPresentRenderBuffer와 beforePresentRenderbuffer를 올바르게 배치하는 것이 중요하며 경우에 따라 Everyplay FAQ에서 언급 한 setActiveFramebufferCallback을 사용해야 할 수도 있습니다. –