Проблема с текстурированием OpenGL при использовании основного профиля - PullRequest
2 голосов
/ 24 января 2011

моя проблема в том, что при использовании glutInitContextProfile (GLUT_CORE_PROFILE) вместо glutInitContextProfile (GLUT_COMPATIBILITY_PROFILE) текстурированные области просто остаются черными. (просто чтобы подчеркнуть: с профилем совместимости все работает так, как я ожидаю)

Я загружаю свои текстуры с DevIL, обычно с ilutGLLoadImage (имя файла), потому что я не был уверен, правильно ли установлены параметры tex с помощью DevIL, я также загружаю некоторые текстуры с этим кодом:

    ILuint img;
 ilGenImages(1, &img);
 ilBindImage(img);
 ILboolean ret = false;
 if((ret = ilLoadImage("...jpg"))){
  ret = ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
  if(!ret){
   std::cout << "image conversion failed" << std::endl;
  }

  glGenTextures(1, &texture[20]);
  glBindTexture(GL_TEXTURE_2D, texture[20]);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
  /*char imageData[27] = {
   127, 127, 127,
   127, 127, 127,
   127, 127, 127,
   127, 127, 127, 
   127, 127, 127,
   127, 127, 127,
   127, 127, 127,
   127, 127, 127,
   127, 127, 127,
  };*/
  //glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 3, 3, 0, GL_RGB, GL_UNSIGNED_BYTE, imageData);

  glTexImage2D(GL_TEXTURE_2D, 0, ilGetInteger(IL_IMAGE_BPP), ilGetInteger(IL_IMAGE_WIDTH),
       ilGetInteger(IL_IMAGE_HEIGHT), 0, ilGetInteger(IL_IMAGE_FORMAT), GL_UNSIGNED_BYTE,
       ilGetData());
 }
 else{
  std::cout << "image file not found" << std::endl;
 }
 ilDeleteImages(1, &img);

Я безуспешно тестировал различные текс-параметры, с теми, которые использовались, по крайней мере не должно быть проблем, связанных с отображением. Когда я использую закомментированную часть с массивом imagedata, все работает нормально, поэтому я думаю, что нет проблем с привязкой, рисованием и штриховкой. Если вы думаете, что могут возникнуть проблемы с этой подписью, я опубликую больше кода.

Я знаю, что с профилем ядра текстуры могут считаться "неполными" по некоторым причинам, но я просто не могу понять, почему это должно происходить. Я не получаю никаких ошибок, ни от DevIL, ни от OpenGL.

Спасибо за помощь.

1 Ответ

4 голосов
/ 24 января 2011

Вы должны проверить на наличие ошибок GL, ilGetInteger (IL_IMAGE_BPP) возвращает количество байтов на пиксель, которое НЕ является значением перечисления внутреннего формата. Вместо этого используйте перечисление, такое как GL_RGB или GL_RGBA. Это было допустимо в профиле совместимости, но не в профиле ядра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...