OpenGl SDL загрузка текстуры

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

OpenGl SDL загрузка текстуры

Сообщение Slavikk » 31.01.2007 16:06:39

Ошибка при генерации текстуры - TextureImage.W,
TextureImage.H - Illegal qualifer. Как исправить?
Код: Выделить всё
// Загрузка картинки и конвертирование в текстуру
function LoadGLTextures : Boolean;
var
  // Создание пространства для хранения текстуры
  TextureImage: PSDL_Surface;
texture      : GLuint;       // Место для одной текстуры
begin
  texture:=0;
  // Загрузка картинки
  TextureImage := SDL_LoadBMP('images/NeHe.bmp');
  if ( TextureImage <> nil ) then
  begin
    // Создадим текстуру
    glGenTextures( 1, @texture );
    glBindTexture( GL_TEXTURE_2D, texture );

    // Генерация текстуры
    glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage.W,
           TextureImage.H, 0, GL_rgb,
           GL_UNSIGNED_BYTE, TextureImage.pixels );

    // Линейная фильтрация кошда образ больше чем текстура
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    // Линейная фильтрация кошда образ меньше чем текстура
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
  end
  else
  begin
    TerminateApplication;
  end;

  // Освобождаем память от картинки
  if ( TextureImage <> nil ) then
    SDL_FreeSurface( TextureImage );

  result := Status;
end;           
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение divinusproject » 31.01.2007 22:22:22

А размер загружаемого изображения какой? Размеры текстуры должны быть степенью двойки, а поскольку у тебя для задания размеров текстуры используются размеры изображения, то они должны быть степенью двойки.

http://imaginglib.sourceforge.net - отличные библиотеки для работы с изображениями, например, позволяет загрузить из png прямо в текстуру ogl.

PS А какое отношение это имеет к Lazarus? Переместить в другую тему!!! :)
divinusproject
новенький
 
Сообщения: 49
Зарегистрирован: 16.05.2006 08:25:02
Откуда: Барнаул

Сообщение Slavikk » 31.01.2007 23:56:51

Рисунок кратен степени двойки, делаю всё на лазаре с sdl компонентом - поэтому загружать могу только через SDL.
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение FedeX » 01.02.2007 07:41:54

Если работаеш с SDL грузить картинки можеш чем хочеш.
PSDL_Surface токо для удобства. Функциям ОГЛ по сути важно токо ширина, высота, битность изображения и указатель на область памяти где оно находится. Я, если вручную загрузить не могу (bmp tga можно и вручную загружать) использую DevIL. А вообще попробуй сначала пересохранить свою картинку в Пэинте :) . Хотя если это стандартная картинка из уроков НэХе и ты её не пересохранял, то пожалуй ошибка всё-же в твоём коде.
Кстать, а в какой именно функции вылетает ошибка? А то ты тут целый код выложил, чо нам с ним делать? :roll:
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение Slavikk » 01.02.2007 10:57:15

TextureImage.W, TextureImage.H, TextureImage.pixels - Illegal qualifer

Код: Выделить всё
// Генерация текстуры
    glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage.W,
           TextureImage.H, 0, GL_rgb,
           GL_UNSIGNED_BYTE, TextureImage.pixels );
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение Cheb » 05.02.2007 21:07:10

Я с сабжем не знаком, но подозреваю, что...
TextureImage: PSDL_Surface;

Может, TextureImage^.H , а? :roll:
Аватара пользователя
Cheb
энтузиаст
 
Сообщения: 994
Зарегистрирован: 06.06.2005 15:54:34

Сообщение Slavikk » 11.02.2007 02:22:53

Спасибо, разобрался. рабочий код:
Код: Выделить всё
glTexImage2D( GL_TEXTURE_2D, 0, 3, TextureImage^.W,
           TextureImage^.H, 0, GL_BGR_EXT,
           GL_UNSIGNED_BYTE, TextureImage^.pixels );
Аватара пользователя
Slavikk
постоялец
 
Сообщения: 208
Зарегистрирован: 15.01.2007 22:34:52
Откуда: Из лесов...

Сообщение FedeX » 11.02.2007 08:19:40

Чтоб не разименовывать постоянно указатели можно заменить директиву {$mode objfpc} на {$mode Delphi}. Тогда б код работал.
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение shade » 02.06.2007 20:40:28

divinusproject писал(а):http://imaginglib.sourceforge.net - отличные библиотеки для работы с изображениями, например, позволяет загрузить из png прямо в текстуру ogl.

Пример, пожалуйста :roll:
(загрузить прямо в текстуру ogl)
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Сообщение shade » 02.06.2007 21:06:46

Уже не надо:
Код: Выделить всё
uses ImagingOpenGL;
...
  texid := LoadGLTextureFromFile(ExtractFileDir(Application.ExeName) + '\texture.bmp');
  glBindTexture(GL_TEXTURE_2D, texid);
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 4

Рейтинг@Mail.ru