ПрограммированиеФорумГрафика

GL_QUADS не отображает текстуру из FBO

#0
12:01, 17 сен 2020

Доброго времени суток!
Рисую так:

  glClearColor(0.0, 0.0, 0.0, 0.0);
  glClear(GL_COLOR_BUFFER_BIT);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glScalef(Scale, Scale, 1.0);
  glTranslatef(PanX, PanY, 0.0);

  glBindTexture(GL_TEXTURE_2D, texId);
  glBegin(GL_QUADS);
    glTexCoord2f(1.0, 0.0); glVertex2f(0, 0);
    glTexCoord2f(1.0, 1.0); glVertex2f(50, 0);
    glTexCoord2f(0.0, 1.0); glVertex2f(50, 50);
    glTexCoord2f(0.0, 0.0); glVertex2f(0, 50);
  glEnd;
  glBindTexture(GL_TEXTURE_2D, 0);
  SwapBuffers(DC);

Создаю так:

var
  Bmp: TBitmap;
begin
  glEnable(GL_TEXTURE_2D);
  glEnable(GL_COLOR_MATERIAL);
  //LoadTexture(ExtractFilePath(Application.ExeName) + 'GLScene.bmp');

  InitFBO(glPanel.Width, glPanel.Height);
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
  DrawLines;
  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  Bmp:= FBOGetBitmap;
  Bmp.SaveToFile(StringReplace(TimeToStr(Now), ':', '_', [rfReplaceAll]) + '.bmp');
  Bmp.Free;

  Ready:= True;
  Draw;
end;

В сохраненной Bmp есть правильная графика, т.е. текстура создается. А на экране просто квад любым цветом. Если вместо FBO раскомментировать LoadTexture - текструра отображается. Спасибо.

#1
19:13, 17 сен 2020

Саму текстуру тоже надо проиницилизировать: glTexture2D, в ней передать все размеры, форматы, и только в конце вместо указателя на буфер с данными поставить nil.

ПрограммированиеФорумГрафика

Тема в архиве.