OpenGL 프로그램을 GLESv2로 이식하려고합니다. 이 프로그램은 기본 프레임 버퍼에 텍스처를 사용합니다 (OpenGL에서도 작동하는 fbo로 렌더링하면 실패합니다).glDrawArrays가 GLESv2에서 GL_INVALID_VALUE을 던졌습니다.
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glVertexAttribPointer(bgra_texcoords, 2, GL_FLOAT, GL_FALSE, 0, display_texcoords);
glEnableVertexAttribArray(bgra_texcoords);
DEBUG_ERROR_CHECK();
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glUseProgram(bgra_program);
glBindTexture(GL_TEXTURE_2D, inst->texture);
glUniform1i(bgra_texture, 0);
glViewport(inst->x, root_surface->h - (inst->y + inst->h), inst->w, inst->h);
DEBUG_ERROR_CHECK();
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
DEBUG_ERROR_CHECK();
glBindBuffer(GL_ARRAY_BUFFER, 0);
glFlush();
OpenGL에서는 제대로 작동하지만 GLESv2에서는 glDrawArrays()가 실패합니다. 나는이 질문을 읽었다. 내 문제와 매우 흡사 한 glDrawElements throw GL_INVALID_VALUE error이지만 VertexArray를 사용하지 않아서 솔루션을 코드에 적용하는 방법을 알 수 없다.
inst-> texture는 glTexImage2D()로 업로드 된 텍스처입니다. 나는 바로 쉐이더를 EGL을 초기화하고 컴파일 후 vertex_buffer을 만들어 :
glGenBuffers(1, &vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer);
glVertexAttribPointer(bgra_pos, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(bgra_pos);
DEBUG_ERROR_CHECK();
편집 : https://github.com/fernando-rodriguez/mediabox/blob/bc4135d9568b2c5b4e8f39ac63ded2cb66023bcd/src/lib/ui/video-opengl.c : 현재 전체 소스 파일을 볼 수 있습니다. 이 파일은 컴포 지터의 비디오 "드라이버"이며, 2D 서페이스를 만들어 화면에 렌더링합니다. 질문에 문제가 있거나 뭔가 빠졌을 경우 의견을 게시하여 해결할 수 있도록하십시오. 감사.