화면을 덮는 2 차원 텍스처에서 비디오 프레임을 얻으려고합니다. 결국 프레임 버퍼를 사용해야합니다. 왜냐하면 결국 탁구 렌더링 기술을 사용하기를 원하기 때문입니다. 그러나 당분간 프레임 버퍼를 사용하여 화면에 렌더링하는 것만을 먼저 얻고 싶습니다.GLSL 프레임 버퍼를 사용한 오류 렌더링
이 내 설치 코드입니다 : 여기까지 모두 확인
// Texture setup
int[] text = new int[1];
glGenTextures(1, text, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, text[0]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 512, 512, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, null);
// Frambuffer setup
int[] fbo = new int[1];
glGenFramebuffers(1, fbo, 0);
glBindFramebuffer(GL_FRAMEBUFFER, fbo[0]);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, text[0], 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
, 나는 작은 그것을 유지하기 위해 여기에 테스트 코드를 작성하지 않았지만, 프레임 버퍼가 제대로 만들어 졌는지 내가 확인 직후에, 그리고 모두 괜찮습니다. 나는 검은 색 화면을 얻을이 시점에서
// Use the GLSL program
glUseProgram(programHandle);
// Swap to my FBO
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, fbo[0]);
glViewport(0, 0, 512, 512);
// Pass the new image data to the program so the fragment shader processes it.
// Using glTexSubImage2D to speed up
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, text[0]);
glUniform1i(glGetUniformLocation(programHandle, "u_texture"), 0);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 512, 512, GL_LUMINANCE, GL_UNSIGNED_BYTE, NewImageData);
// Draw the quad
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// Swap back to the default screen frambuffer
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);
및 로그에 나는 내가 glBindFramebuffer 호출 후 glDrawArrays을 퍼팅 시도 1286. GL_INVALID_FRAMEBUFFER_OPERATION를 볼 수 있습니다 내 렌더링 루프에서 지금
나는 다음에 무엇을 , 그러나 응용 프로그램이 충돌합니다. 의견이 있으십니까? 미리 감사드립니다.
int 텍스트 [] = 새로운 int [1]; ??? int fbo = 새로운 int [1]; ??? C++에서 변수와 배열을 선언하는 방법을 배우는 것은 불쾌감을주지는 않지만 장면을 텍스처로 렌더링하는 방법을 배우기 전에 먼저해야 할 일입니다. – Robinson
죄송합니다. 내 잘못은 여기에 붙여 넣기 위해 청소하는 동안 오타입니다. 반면에 자바로 작성되었습니다. 코드를 avobe로 업데이트했습니다. 누군가 내가 뭘 잘못하고 있는지 알기를 바랍니다. – PerracoLabs
아. 그것은 자바입니다. 당신은 int 상태를 호출 할 수 = glCheckFramebufferStatus (GL_FRAMEBUFFER); (사용을 위해 버퍼를 바인딩 한 후) 리턴되는 것을보십시오. – Robinson