Ответ 1
Это было какое-то время, но, как я писал в комментариях, убедитесь, что вы инициализируете мощь 2 текстур.
Я пытаюсь отобразить текстуру с помощью OpenGL ES 2.0, но я не могу заставить ее работать.
Вот как я продолжаю:
struct RenderTexture
{
GLuint framebuffer;
GLuint tex;
GLint old_fbo;
RenderTexture(GLuint width, GLuint height)
{
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo);
glGenFramebuffers(1, &framebuffer);
glGenTextures(1, &tex);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glBindTexture(GL_TEXTURE_2D, tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
width, height, 0, GL_RGBA,
GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
tex, 0);
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
GLuint status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (status != GL_FRAMEBUFFER_COMPLETE) {
cout << status << endl; // this is not called
}
glBindFramebuffer(GL_FRAMEBUFFER, old_fbo);
}
void begin()
{
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &old_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
}
void end()
{
glBindFramebuffer(GL_FRAMEBUFFER, old_fbo);
}
};
Но когда я пытаюсь рисовать его и используя полученную текстуру, текстура рисуется как абсолютно черная.
Если я просто не завершу код чертежа в render_tex->begin();
и render_tex->end();
, все правильно рисует, что заставляет меня думать, что проблема изолирована от кода выше.
Это было какое-то время, но, как я писал в комментариях, убедитесь, что вы инициализируете мощь 2 текстур.
Удостоверьтесь, что текстура не связана, прежде чем пытаться отобразить в ней. Даже если вы вообще не используете текстурирование, попытка визуализации в связанную с ним текстуру может вызвать поведение undefined и просто не работать.
Фактически вы должны называть glBindTexture(GL_TEXTURE_2D, 0)
после glTexImage2D
в своем конструкторе RenderTexture
или, возможно, восстановить ранее привязанную текстуру, как вы делаете с FBO. Просто убедитесь, что tex
не привязан при рендеринге в FBO.
У меня была такая же проблема, как и у. Попробуйте добавить
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
сразу после glBindTexture(GL_TEXTURE_2D, tex);
и черный квадрат должен исчезнуть.
Кажется, вы не используете glActiveTexture
. Я рекомендую вам называть glActiveTexture(GL_TEXTURE0+tex);
перед каждым glBindTexture(tex);
, что избавит вас от многих головных болей при использовании нескольких текстур. Я предполагаю, что ошибка указана в коде, который вы используете для рисования текстуры на экране.