OpenGL : Непонятки с размером текстур

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

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

OpenGL : Непонятки с размером текстур

Сообщение Alex2013 » 11.08.2021 14:22:23

Загружаю текстуру 24бита 809х600 криво (отображение "с уступом" )!
810х600 криво (тоже самое еще и цвета плывут )
811х600 криво ( первый вариант )
812х600 все ок.
808х600 все ок
.

WTF?! (Что за "выравнивание на граф" ? ) :roll:
Зы
Три варианта показа текстуры ( справа верный )
ИзображениеИзображение

Зы Зы
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 ); не помогает ...
Alex2013
долгожитель
 
Сообщения: 2240
Зарегистрирован: 03.04.2013 11:59:44

Re: OpenGL : Непонятки с размером текстур

Сообщение Seenkao » 11.08.2021 17:31:40

Ну прям всё объяснил... Неужто непонятно, что без кода, тебе ни кто не поможет разобраться в этом?

Из того, что можно посмотреть, посоветовать можно то, как загружаются текстуры: целиком (отдельным файлом) или в комплекте (в одном файле несколько текстур).
И смотреть как они выводятся.

Судя по всему, больше похоже на несовпадение текстурных координат с координатами твоей поверхности (прямоугольной?).
Seenkao
постоялец
 
Сообщения: 309
Зарегистрирован: 01.04.2020 03:37:12

Re: OpenGL : Непонятки с размером текстур

Сообщение Alex2013 » 11.08.2021 19:19:42

Код ? Да сколько хочешь ! Просто но у меня немного заточен "под задачу" а значит малость путаный .
Вот например "загрузка и перезагрузка" текстуры из TBitmap; .

Код: Выделить всё
function  CapTextureBMP(Var T_bmp:Tbitmap; var  texID : GLuint;
   var OW : GLuint; var OH : GLuint;Var FST:Boolean;RW,RH: GLuint ): GLuint;

begin
try
if (T_bmp = nil) then  Exit;

if FST or (( OW <> RW) or (OH <>RH)) then begin
if not FST then  glDeleteBuffers(1,@texID);
FST:=False;
// Создание текстуры   
glEnable(GL_TEXTURE_2D);
  glGenTextures( 1, @texID );
  glBindTexture( GL_TEXTURE_2D, texID );
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);

  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
                  T_bmp.Width , T_bmp.Height,
                  0, GL_RGB, GL_UNSIGNED_BYTE, nil
                  );

  glDisable(GL_TEXTURE_2D);
end ;

// Реальная загрузка и перезагрузка. 

glEnable(GL_TEXTURE_2D);

glBindTexture( GL_TEXTURE_2D, texID );
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ROW_LENGTH,t_bmp.Width);

glTexSubImage2D ( GL_TEXTURE_2D, 0, 0, 0,
T_bmp.Width, T_bmp.Height,
       GL_BGR
        , GL_UNSIGNED_BYTE, T_bmp.RawImage.Data );

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glDisable(GL_TEXTURE_2D);


  finally
    Result := texID;
    OW:=RW; oh:=RH;
  end;

  end;

И нет, дело точно "не в несовпадение текстурных координат" ведь "виртуальный экран"/картинка это тупо прямоугольник где наложение идет по четырем углам и не как от разрешения текстуры не зависит .
Зы
"Построение основы для потрала в другое измерение " :wink: :D Тупо как валенок .
Код: Выделить всё
procedure FL3D(a,b:GLfloat);

begin

glShadeModel(GL_FLAT);

glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);

glBegin(GL_QUADS);

glTexCoord2f(0, 1);  glVertex3f( -a/2, b/2,  0); // 1
glTexCoord2f(0, 0);  glVertex3f( -a/2,-b/2,  0); // 2
glTexCoord2f(1, 0);  glVertex3f(  a/2,-b/2,  0); // 3
glTexCoord2f(1, 1);  glVertex3f(  a/2, b/2,  0); // 4
glEnd();
end;

Alex2013
долгожитель
 
Сообщения: 2240
Зарегистрирован: 03.04.2013 11:59:44

Re: OpenGL : Непонятки с размером текстур

Сообщение BlackShark » 11.08.2021 20:45:20

Если с текстурными координатами всё ок, тогда пенять остаётся только на то что указатель на карту цветов берётся с неверным смещением. А это может быть в следствии того (едва ли дело в кривом fcl/lcl) что сам битмап сформирован неверно - возможно размер заголовка не выровнен на 4 байта. Еще каждая строка карты должна быть выровнена на четыре байта, но для формата RGB это условие выполняется автоматом.
BlackShark
новенький
 
Сообщения: 27
Зарегистрирован: 20.05.2019 12:52:15

Re: OpenGL : Непонятки с размером текстур

Сообщение runewalsh » 11.08.2021 22:20:03

BlackShark писал(а):для формата RGB это условие выполняется автоматом

Не выполняется же. RGB8 — 3 байта, в каждый пиксель 4-й сам по себе не добавляется (ну, при здравомыслии авторов технологии).
Не удивлюсь, если картинки загружаются из BMP (в смысле, из того самого формата .bmp), в котором строки добиваются до кратности 4 байтам.
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 549
Зарегистрирован: 27.04.2010 00:15:25

Re: OpenGL : Непонятки с размером текстур

Сообщение BlackShark » 11.08.2021 22:49:27

runewalsh писал(а):
BlackShark писал(а):для формата RGB это условие выполняется автоматом

Не выполняется же. RGB8 — 3 байта, в каждый пиксель 4-й сам по себе не добавляется (ну, при здравомыслии авторов технологии).
Не удивлюсь, если картинки загружаются из BMP (в смысле, из того самого формата .bmp), в котором строки добиваются до кратности 4 байтам.

тфу ты.. точно.. изначально сразу на это и грешил.. но под конец рабочего дня оплавленный мозг не смог сложить 2*2 :shock:
BlackShark
новенький
 
Сообщения: 27
Зарегистрирован: 20.05.2019 12:52:15

Re: OpenGL : Непонятки с размером текстур

Сообщение Seenkao » 11.08.2021 23:43:25

Alex2013 писал(а):CapTextureBMP

runewalsh писал(а):RGB8 — 3 байта

а я не обратил внимания, что BMP... теперь понятно почему картинки такие. (я, кстати, не обратил внимания на диагональные полосы изначально, вообще не понял что с рисунком).

Alex2013, не хочешь байт добавить? Чтоб добить до 32-х битного BMP?

Добавлено спустя 2 часа 53 минуты 40 секунд:
Но почему тогда нет смещения в третьем варианте?
Seenkao
постоялец
 
Сообщения: 309
Зарегистрирован: 01.04.2020 03:37:12

Re: OpenGL : Непонятки с размером текстур

Сообщение Alex2013 » 12.08.2021 16:44:47

Seenkao писал(а):Добавлено спустя 2 часа 53 минуты 40 секунд:
Но почему тогда нет смещения в третьем варианте?

Написано же
812х600 все ок.
808х600 все ок
То есть если разрешение при масштабировании выравнивается то все ок.
Зы
1 В общем идея сделать кучу виртуальных экранов с возможностью этой же процедурой загружать весящие в пространстве картинки .
В принципе ничего не мешает все разрешения выравнивать на 4 байта (Все равно текстуры при захвате экрана или окон всегда копируются через StretchDraw ). Но просто непонятно в чем дело, а если непонятно значит можно ожидать что еще какие-то "фазы луны" вылезут. .

Вроде у меня стоит адаптация
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
Но при таких установках glTexParameteri это не катит .
(Честно говоря я просто скопировал эти настройки из примера где текстуры выводились относительно качественно. )
glPixelStorei(GL_UNPACK_ROW_LENGTH,t_bmp.Width); ускоряет загрузку "но это неточно".

2 "Почему не 32 бита?" ну так меня набор всяких полезных графических утилит на "24 бита онли рассчитан"

3 Нет это не формат загруженной картинки виноват хотя бы то тому, что битмапы я в список из файла загружаю с "перерисовкой через StretchDraw" так что pf24bit там "железно".
Код: Выделить всё
  LIM:=TImage.Create(Nil);
  LIM.Picture.LoadFromFile(cPsr^.Name);
   cPsr^.BMP:=TBitmap.Create;
   cPsr^.BMP.PixelFormat:=pf24bit;
   cPsr^.BMP.SetSize(cPsr^.W ,cPsr^.H );
   cPsr^.BMP.Canvas.StretchDraw(rect(0,0,cPsr^.BMP.Width,cPsr^.BMP.Height),
                                LIM.Picture.Bitmap);

   SRecList.Add(cPsr);
  LIM.Free;


Добавлено спустя 33 минуты 23 секунды:
Ура ! Заработало ...
Помогло glPixelStorei(GL_UNPACK_ALIGNMENT, 3);
(Хотя везде пишут что такой аргумент быть не может "потому что не может быть никогда" .... :wink: )
pname Type Initial Value Valid Range
GL_PACK_ALIGNMENT integer 4 1, 2, 4, or 8
GL_UNPACK_ALIGNMENT integer 4 1, 2, 4, or 8


Добавлено спустя 20 минут 15 секунд:
Рано радовался "работает через раз " ... :roll:

Добавлено спустя 1 час 34 минуты 22 секунды:
Уф "100 000 ведер воды и ..."(С) !
glPixelStorei(GL_UNPACK_ALIGNMENT, 3);
Нужно и при создании текстуры юзать.
Последний раз редактировалось Alex2013 21.09.2021 11:27:56, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 2240
Зарегистрирован: 03.04.2013 11:59:44

Re: OpenGL : Непонятки с размером текстур

Сообщение Alex2013 » 20.09.2021 13:17:14

Наивно додумал что глюк благополучно побежден ... Ага ! Как-же...
Появился, снова хотя в довольно странной форме: если не использовать "полное восстановление состояния"(ПВС) то все работает как часы, но стит сделать ПВС и что-то в настройках рендера ломается и при изменении содержимого элемента коллекции глюк "с выравниванием" вылезает снова. ( Разумеется я пока просто добавил галку "Выравнивание " но откуда этот глюк возникает непонятно "от слова совсем" загрузка коллекции из файла работает нормально и это при этом что там всюду используется один и тот-же код, но глюк лезет. ).
Зы
Оказывается все еще интереснее! Глюк возникает только с конкретной конфигурацией "файла ПВС". В общем ясно что ничего непонятно... :roll:
...
Хм, похоже виновата "фоновая сфера"... (При том что сама ФС работает нормально... :roll: )
Вообщем какой-то техно-триллер "Возвращение живых глюков 2 " . :wink: :idea:
Последний раз редактировалось Alex2013 21.09.2021 11:25:30, всего редактировалось 4 раз(а).
Alex2013
долгожитель
 
Сообщения: 2240
Зарегистрирован: 03.04.2013 11:59:44

Re: OpenGL : Непонятки с размером текстур

Сообщение Vlad04 » 21.09.2021 10:22:36

Сталкивался с этой проблемой. В дебри не полез, просто выяснил, что текстуры GL_RGBA работают стабильно, а GL_RGB периодически сбоят. Также, есть подозрение, что ваши картинки отображаются "вверх ногами".
Загрузку картинки из файла и превращение её в текстуру решил следующей процедурой.
Код: Выделить всё
procedure LoadPictureToTexture(FileName : string);
var
  P : TPicture;
  Src, Dst: TRect;
  Bmp, Bmp2 : TBitmap;
  Size : DWord;
begin
  P := TPicture.Create;
// bиспользуем TPicture, потому что он может читать кучу форматов, не только bmp
  P.LoadFromFile(FileName);

// FData - pointer - указатель на данные текстуры
  if FData <> nil then FreeMem(FData) ; // если память была выделена - освобождаем ее
  FData := NIL ;

//  FWidth и FHeight - word - размеры загруженной картинки
  FWidth := P.Bitmap.Width ;
  FHeight := P.Bitmap.Height ;
  Size := FWidth * FHeight * 4;
  GetMem(FData, Size) ; // выделяем память из расчета 4 байта на точку (RGBA)
  fillchar(FData^, Size, 0) ; // обнуляем память

  Bmp := TBitmap.Create;
  Bmp.PixelFormat := pf32bit;
  Bmp.SetSize(P.Bitmap.Width, P.Bitmap.Height);
  Bmp.Canvas.Draw(0, 0, P.Bitmap);  // приводим картинку к 32 битности

  Bmp2 := TBitmap.Create;
  Bmp2.PixelFormat := pf32bit;
  Bmp2.SetSize(Bmp.Width, Bmp.Height);
  Src := Bmp.Canvas.ClipRect;
  Dst := Src;
  Dst.Top := Src.Bottom;  Dst.Bottom := Src.Top;
  Bmp2.Canvas.CopyRect(Dst, Bmp.Canvas, Src); // переворачиваем картинку

  move(Bmp2.RawImage.Data^, FData^, Size);
// переносим данные в выделенную для текстуры область памяти

  FreeAndNil(Bmp);    // удаляем объекты
  FreeAndNil(Bmp2);
  FreeAndNil(P);

// FTexId : GLUInt - OpenGL идентификатор текстуры

  glBindTexture(GL_TEXTURE_2D, FTexId);            // активируем текстуру
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FWidth, FHeight, 0,
              GL_RGBA, GL_UNSIGNED_BYTE, FData) ;
// ассоциируем область памяти с текстурой
  glBindTexture(GL_TEXTURE_2D, 0);               // деактивируем текстуру
end;

Если переворачивать картинку не требуется, то
Код: Выделить всё
Bmp2 : TBitmap;
, соответственно не используется, копируем данные из Bmp
Код: Выделить всё
move(Bmp.RawImage.Data^, FData^, Size);
Аватара пользователя
Vlad04
новенький
 
Сообщения: 68
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: OpenGL : Непонятки с размером текстур

Сообщение Alex2013 » 21.09.2021 11:14:30

Спасибо за подсказку! Буду пробовать.
Alex2013
долгожитель
 
Сообщения: 2240
Зарегистрирован: 03.04.2013 11:59:44

Re: OpenGL : Непонятки с размером текстур

Сообщение Vlad04 » 22.09.2021 14:04:02

Я Вас немного обманул. В текстурах используется палитра RGBA, а в TBitmap pf32bit - BGRA. Приведённую выше процедуру необходимо дополнить циклом, меняющим местами синий и красный цвет.
Код: Выделить всё
function LoadPictureToTexture(FileName : string) : boolean;
var
  P : TPicture;
  Src, Dst: TRect;
  Bmp, Bmp2 : TBitmap;
  Size, I : DWord;
  Bt : byte;
  B : PByte;
begin
  Result := FALSE;
  P := TPicture.Create;
// bиспользуем TPicture, потому что он может читать кучу форматов, не только bmp
  P.LoadFromFile(FileName);

// FData - pointer - указатель на данные текстуры
  if FData <> nil then FreeMem(FData) ; // если память была выделена - освобождаем ее
  FData := NIL ;

//  FWidth и FHeight - word - размеры загруженной картинки
  FWidth := P.Bitmap.Width ;
  FHeight := P.Bitmap.Height ;
  Size := FWidth * FHeight * 4;
  GetMem(FData, Size) ; // выделяем память из расчета 4 байта на точку (RGBA)
  fillchar(FData^, Size, 0) ; // обнуляем память

  Bmp := TBitmap.Create;
  Bmp.PixelFormat := pf32bit;
  Bmp.SetSize(P.Bitmap.Width, P.Bitmap.Height);
  Bmp.Canvas.Draw(0, 0, P.Bitmap);  // приводим картинку к 32 битности

  Bmp2 := TBitmap.Create;
  Bmp2.PixelFormat := pf32bit;
  Bmp2.SetSize(Bmp.Width, Bmp.Height);
  Src := Bmp.Canvas.ClipRect;
  Dst := Src;
  Dst.Top := Src.Bottom;  Dst.Bottom := Src.Top;
  Bmp2.Canvas.CopyRect(Dst, Bmp.Canvas, Src); // переворачиваем картинку

  move(Bmp2.RawImage.Data^, FData^, Size);
// переносим данные в выделенную для текстуры область памяти

  B := FData;     // меняем местами красный и синий цвета
  for I := 0 to FWidth * FHeight - 1 do
  begin
    Bt := B^;
    B^ := (B + 2)^;
    inc(B, 2);
    B^ := Bt;
    inc(B, 2);
  end;

  FreeAndNil(Bmp);    // удаляем объекты
  FreeAndNil(Bmp2);
  FreeAndNil(P);

// FTexId : GLUInt - OpenGL идентификатор текстуры

  glBindTexture(GL_TEXTURE_2D, FTexId);            // активируем текстуру
  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FWidth, FHeight, 0,
              GL_RGBA, GL_UNSIGNED_BYTE, FData) ;
// ассоциируем область памяти с текстурой
  glBindTexture(GL_TEXTURE_2D, 0);               // деактивируем текстуру
end;

Аватара пользователя
Vlad04
новенький
 
Сообщения: 68
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: OpenGL : Непонятки с размером текстур

Сообщение Alex2013 » 22.09.2021 16:42:35

Ну мне по любому нужно переделывать вашу процедуру потому что у меня непросто загрузка а "загрузка с перезагрузкой" ... Но метод переноса в отдельную область памяти вместо использования буфера TBitmap довольно интересный . А что до цветов то достаточно вместо GL_RGBA или GL_RGBA задать GL_BGR или GL_BGRA. и все будет тип топ ! :idea:

Код: Выделить всё
glTexSubImage2D ( GL_TEXTURE_2D, 0, 0, 0,
T_bmp.Width, T_bmp.Height,
       GL_BGR // GL_BGRA
        , GL_UNSIGNED_BYTE, T_bmp.RawImage.Data );

(Правда встречал глюк(ругается на формат текстуры ) на встроенной видеокарте (Radeon Vega 8 Graphics) но где но есть там она у меня вспомогательная (основная nVidia GeForce GTX 1650) )
Alex2013
долгожитель
 
Сообщения: 2240
Зарегистрирован: 03.04.2013 11:59:44

Re: OpenGL : Непонятки с размером текстур

Сообщение Vlad04 » 29.09.2021 12:06:46

Я, кажется, разобрался с Вашей проблемой, т.к. попал в аналогичную ситуацию. Какие-то картинки переводятся в текстуру нормально, а какие-то - со смещением.
norm.PNG
crash.PNG

Как оказалось, у некоторых картинок реальный размер данных превышает Высоту * Ширину * Число байт. Причем это превышение кратно числу строк. Т.е. в каждой строке есть несколько "мусорных" байт. Также, предложенный мной ранее вариант переворота картинки
Код: Выделить всё
  Bmp2 := TBitmap.Create;
  Bmp2.PixelFormat := pf32bit;
  Bmp2.SetSize(Bmp.Width, Bmp.Height);
  Src := Bmp.Canvas.ClipRect;
  Dst := Src;
  Dst.Top := Src.Bottom;  Dst.Bottom := Src.Top;
  Bmp2.Canvas.CopyRect(Dst, Bmp.Canvas, Src); // переворачиваем картинку

Частенько крашится, особенно на больших картинках, из-за каких-то внутренних проблем с памятью.
Чтобы не возиться с перестановкой красного и синего цветов местами, перешёл на текстуры форматов GL_BGR и GL_BGRA. Для этого необходимо объявить две константы и ещё одну для подрезки текстуры
Код: Выделить всё
const
  GL_CLAMP_TO_EDGE = $812F;
  GL_BGR           = $80E0;
  GL_BGRA          = $80E1;

Новая процедура переноса данных картинки в текстуру (работает для 3-х и 4-х байт на пиксель):
Код: Выделить всё
procedure LoadPictureToTexture(FileName : string);
var
  P : TPicture;
  Size, WH, H, dL : DWord;
  S, D : PByte;
begin
  Result := FALSE;
// FData - pointer - указатель на данные текстуры
  if FData <> nil then
    FreeMem(FData) ; // если память была выделена - освобождаем ее
  FData := NIL ;
  if glIsTexture(FTexId) = GL_TRUE then
    glDeleteTextures(1, @FTexId); // существующую текстуру удаляем
// для избежания проблем с памятью

  P := TPicture.Create;
  // bиспользуем TPicture, потому что он может читать кучу форматов, не только bmp
  try
    P.LoadFromFile(FileName);

//  FWidth и FHeight - word - размеры загруженной картинки
    FWidth := P.Bitmap.Width ;
    FHeight := P.Bitmap.Height ;

    if (FWidth = 0) or (FHeight = 0) then
      raise Exception.Create('Null size');

// FByte : byte - число байт на пиксель
    Size := P.Bitmap.RawImage.DataSize;
    H := FWidth * FHeight;
    dL := Size div H;         // вычислем
    if (dL = 3) or (dL = 4) then  // число байт на пиксель
      FByte := dL
    else
      raise Exception.Create('Worng format');
    dL := (Size mod H) div FHeight; // вычисляем число "мусорных" байт на строку
    Size := FWidth * FHeight * FByte;
    try
      GetMem(FData, Size) ; // выделяем память
    except
      raise Exception.Create('Not enough memory');
    end;

    WH := FWidth * FByte;  // число байт в строке
    S := P.Bitmap.RawImage.Data;
    D := FData + Size - WH; // с переворотом картинки
//    D := FData;                         // без переворота картинки
    for H := 0 to FHeight - 1 do
    begin
      move(S^, D^, WH);
      inc(S, WH + dL);
      dec(D, WH);          // с переворотом картинки
//      inc(D, WH);          // без переворота картинки
    end;

// FTexId : GLUInt - OpenGL идентификатор текстуры
// создаём текстуру
    glGenTextures(1, @FTexId);
    glBindTexture(GL_TEXTURE_2D, FTexId);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    if FByte = 3 then
      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FWidth, FHeight, 0,
                  GL_BGR, GL_UNSIGNED_BYTE, FData)
    else
      glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, FWidth, FHeight, 0,
                  GL_BGRA, GL_UNSIGNED_BYTE, FData) ;
  // ассоциируем область памяти с текстурой
    glBindTexture(GL_TEXTURE_2D, 0);               // деактивируем текстуру
    Result := TRUE;
  finally
    FreeAndNil(P);
  end;
end;
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Vlad04
новенький
 
Сообщения: 68
Зарегистрирован: 11.12.2007 21:11:19
Откуда: Караганда. Казахстан

Re: OpenGL : Непонятки с размером текстур

Сообщение Alex2013 » 30.09.2021 17:07:58

Спасибо за участие в решении проблемы !
Но мне всё же помогло использование glPixelStorei(GL_UNPACK_ALIGNMENT, 3);. Однако при его использовании нужно следить что-бы все текстуры были 24-бита и нигде не везла установка GL_UNPACK_ALIGNMENT с другим значением. (она действует глобально в пределах текущего OpenGL контекста и как я понял (но это не точно ) если меняется то для всего кадра и сработает только последняя установка, то есть нельзя установить значение GL_UNPACK_ALIGNMENT индивидуально для каждой загружаемой текстуры )
Зы
А что касается GL_BGR и GL_BGRA то эти константы есть в стандартном модуле GLext . :idea:
Alex2013
долгожитель
 
Сообщения: 2240
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru