OpenGL ES 1.1 텍스처를 만들려고하는데 렌더링 된 내용으로 채 웁니다. 장면에화면에 렌더링 된 텍스처가 화면에 빈 사각형을 렌더링합니다.
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
GLuint texFrambuffer;
glGenFramebuffers(1, &texFrambuffer);
glBindFramebuffer(GL_FRAMEBUFFER, texFrambuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER) ;
if(status != GL_FRAMEBUFFER_COMPLETE) {
NSLog(@"failed to make complete framebuffer object %x", status);
// this message doesn't appear, thus, framebuffer is complete
}
glViewport(0, 0, 32, 32);
glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat vertices[] = {
10.0f, 10.0f, 0.0f,
20.0f, 40.0f, 0.0f,
10.0f, 30.0f, 0.0f
};
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glDeleteFramebuffers(1, &texFrambuffer);
렌더링 텍스처 :
텍스처를 준비
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
GLshort texCoord[] = {0, 0, 0, 1, 1, 0, 1, 1};
GLfloat vertices2[] = {0.0, 0.0, 0.0, 31.0f, 31.0f, 0.0f, 31.0f, 31.0f};
glVertexPointer(2, GL_FLOAT, 0, vertices2);
glTexCoordPointer(2, GL_SHORT, 0, texCoord);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisable(GL_TEXTURE_2D);
전체 소스 코드의 Bitbucket에서 볼 수 있습니다 : https://bitbucket.org/amjaliks/gl2/src/66ee4932e212/GL2/GL2View.m
가 다른 콘텐츠는 제대로 렌더링됩니다. 이 텍스처만으로 문제가 발생합니다. 흰색 직사각형으로 렌더링됩니다.
나는 많은 예제를 연구했지만 여전히 내가 잘못하고있는 것을 파악할 수 없다. 없어진 물건 있어요?
업데이트 1 :은 내가 glClearColor()
를 설정 한 경우, 발견 및 texFrambuffer
가 결합되는 동안, 이러한 변경 내 텍스처 glClear()
을 저장 전화를했다. 따라서 glDrawArrays()
및/또는 이와 관련된 문제가 있습니다.
내 texFrambuffer
에 매트릭스 모드와 영사를 특별히 설정해야합니까?
업데이트 2 : 나는 질감에 "주"프레임 버퍼의 내용을 복사 glCopyTexImage2D
을 사용하는 것도 노력했다. 의 Bitbucket에서 사용할 수
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glViewport(0, 0, 32, 32);
glClearColor(1.0f, 0.75f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
GLfloat vertices[] = {
0.0f, 0.0f, 0.0f,
20.0f, 32.0f, 0.0f,
10.0f, 30.0f, 0.0f
};
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
glBindTexture(GL_TEXTURE_2D, texture);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 32, 32, 0);
전체 소스 코드 : https://bitbucket.org/amjaliks/gl2/src/b3339661650e/GL2/GL2View.m
결과는 동일합니다. 채워진 직사각형. 저의 행렬에는 분명히 문제가있는 것처럼 보입니다.
당신은 glGenFramebuffersOES, glBindFramebufferOES 등을 사용하지 않을 것입니다 ... 코어 대신 OES 기능을 사용 하시겠습니까? ES 1.1에는 Core에 Framebuffer 객체가 없기 때문에 Extension으로 사용할 수 있습니다. –
애플이 API를 합병 한 것으로 보인다. OES와 OES가없는 메서드를 사용하는 데 차이가 없습니다. –
무슨 뜻입니까? 병합 되었습니까? Apple 설명서에도 다음과 같이 쓰여 있습니다. https://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/OpenGLESontheiPhone/OpenGLESontheiPhone.html#//apple_ref/doc/uid/TP40008793-CH101-SW6 (프레임 버퍼 객체는 iOS의 유일한 렌더링 타겟입니다.) GLES 1.1에서는 OES_framebuffer_object 확장을 사용해야합니다. –