Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

glBindTexture [D5, WinXP]


Страницы:   1 2 3

grouzd[E]v ©   (2005-07-10 18:46:00) 

Goodevening again my friends!
У меня опять проблемы с OGLой (а может с головой =)
Не получается подключать текстуры через glBindTexture
Раньше я делал как в одной статье:

procedure TTexture.Enable;
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
 glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
 glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,Width,Height,0,GL_RGB,GL_UNSIGNED_BYTE,data);
 glEnable(GL_TEXTURE_2D);
end;

т.е. при перерисовке объекта текстура создается заново
Теперь пробую так:

type
 TTexture = class
   width, height : integer;
   data : pByteArray;
   t : GLuint;
   procedure LoadFromFile(file_name : string);
   procedure Enable;
 end;

implementation

procedure glGenTextures(n: GLsizei; var textures: GLuint); stdcall; external opengl32;
procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external opengl32;

procedure TTexture.LoadFromFile(file_name : String);
begin
//загрузка из файла
glGenTextures(1, t);
glBindTexture(GL_TEXTURE_2D, t);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,Width,Height,0,GL_RGB,GL_UNSIGNED_BYTE,data);
end;

procedure TTexture.Enable;
begin
glBindTexture(GL_TEXTURE_2D, t);  
glEnable(GL_TEXTURE_2D);
end;

...и ничего не просходит, текстура не накладывается. скажите pls что не так


Tonich   (2005-07-15 11:11:00) [1]


>
> XProger ©   (14.07.05 21:40) [44]
> Tonich, и почему же ты не следуешь этому умному совету?
ндаааааааа....:)

вот именно  ему я и следую

Ладно я не хочу спорить ни с тобой ни с кем либо еще, если ты считаешь что я передераю чужие исходники, то хуже от этого я спать не стану:)))))) Так что ради бога:)


DR0N   (2005-07-14 21:52:00) [2]

:)


XProger   (2005-07-14 21:40:00) [3]

Tonich, и почему же ты не следуешь этому умному совету?


Tonich   (2005-07-14 19:18:00) [4]


>
> XProger ©   (14.07.05 16:52) [41]

кто то тут же на форуме сказал очень правильную фразу

код существует не только для того что бы в тупую его передрать,
а и для того что бы разобрать, понять и в последствии если пригодится добавить в свои приложения


grouzd[E]v   (2005-07-14 17:34:00) [5]

TO XProger: неа, я думаю все тот же...


XProger   (2005-07-14 16:52:00) [6]

Tonich, ещё один "копипастер" на форуме? ;)


Tonich   (2005-07-14 13:35:00) [7]


> MeF Dei Corvi ©   (14.07.05 13:21) [39]

от ты жук
само "тело класса" я бы и сам смог частично востановить из

> MeF Dei Corvi ©   (13.07.05 22:23) [31]
меня какраз и интересовали методы класса:))
ну ладно и на том спасибо


MeF Dei Corvi   (2005-07-14 13:21:00) [8]


> еще бы для полного счастья увидить класс переменной FImage
> :))

Запросто :)

 TGLImage=class
 private
   FData:Pointer;
   FDataSize:Cardinal;
   FGLFormat:GLUInt;
   FBPP:Byte;
   FWidth,FHeight:Word;
   FRWidth,FRHeight:Word;
   FLoaded:Boolean;
   FImageFormat:TImageFormat;
   procedure LoadFromBMP(Stream:TStream);
   procedure LoadFromTGA(Stream:TStream);
   procedure LoadFromTME(Stream:TStream);
   procedure LoadFromtxr(Stream:TStream);
 public
   property Width:Word read FWidth;
   property Height:Word read FHeight;

   property RealWidth:Word read FRWidth;
   property RealHeight:Word read FRHeight;

   property DataSize:Cardinal read FDataSize;
   property Data:Pointer read FData;
   property Loaded:Boolean read FLoaded;
   property GLFormat:GLUInt read FGLFormat;
   property BPP:Byte read FBPP;

   procedure LoadFromStream(Stream:TStream;ImageFormat:TImageFormat);
   procedure LoadFromFile(const FileName:String);

   procedure Free;
   constructor Create;
   destructor Destroy;
 end;

Но вот код процедур и функций не дам :)


MeF Dei Corvi   (2005-07-14 13:07:00) [9]


> На некоторых видяхах (все гифорсы ;) это означает использовать
> сжатие по умолчанию. GL_RGBA8 этого не допустит :D

Не знал :) Ну это не моя проблема, а проблема GeForce-ов :)


Tonich   (2005-07-14 12:18:00) [10]


> Tonich, какого конца?

хорощо хоть не спросил до чьего конца:)))))))))


XProger   (2005-07-14 11:51:00) [11]

MeF Dei Corvi,
tc_None: texformat:=GL_RGBA;
На некоторых видяхах (все гифорсы ;) это означает использовать сжатие по умолчанию. GL_RGBA8 этого не допустит :D

Tonich, какого конца?

P.S.
Для TGA библиотеку недавно писал: http://xproger.mirg.ru/?id=2&page=3


Tonich   (2005-07-14 11:38:00) [12]

я конечно наглею, но уже если спрашивать так доконца


Tonich   (2005-07-14 11:25:00) [13]


> MeF Dei Corvi ©   (13.07.05 22:23) [31]

круто:) еще бы для полного счастья увидить класс переменной FImage:))


MeF Dei Corvi   (2005-07-13 22:45:00) [14]


> 2) Меняем RGB на BGR (BGRA на RGBA) через функцию, написанную
> на asm.

брр... меняем BGR на RGB :)

> не судьба GL_BGR/GL_BGRA?

гм... что-то я загнался :) начинал писать ещё на стандартных Borland заголовках от OGL1.0, а там этого не было. Это уже потом код стал обрастаться всякими GL_COMPRESSED_RGB_S3TC_DXT1_EXT... когда стал юзать заголовки OGL1.5 :)
Ну тогда даже менять не надо :)


NikotiN   (2005-07-13 22:27:00) [15]

2 MeF Dei Corvi
//2) Меняем RGB на BGR (BGRA на RGBA) через функцию, написанную на asm.
не судьба GL_BGR/GL_BGRA?


MeF Dei Corvi   (2005-07-13 22:23:00) [16]

фрагмент из моего кода:

procedure TTexture.LoadFromFile(const FileName: String; MipMap:Boolean=false; Compression:TTexCompression=tc_None);
var texformat:GLUint;
begin
 FImage.Free;
 FImage.LoadFromFile(FileName);
 FRWidth:=FImage.RealWidth;
 FRHeight:=FImage.RealHeight;
 glBindTexture(GL_TEXTURE_2D, FTextureId);
 FMipmap:=False;
 if(MipMap) then begin
   if GL_SGIS_generate_mipmap then begin
     glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_TRUE);
     FMipmapFilter:=ttf_Linear;
     FMipmap:=True;
   end;
 end;
 FCompressed:=Compression<>tc_None;
 FBPP:=FImage.BPP;
 if(FImage.BPP=4) then begin
   case Compression of
     tc_None: texformat:=GL_RGBA;
     tc_DXT1: texformat:=GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
     tc_DXT3: texformat:=GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
     tc_DXT5: texformat:=GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
     tc_ARB: texformat:=GL_COMPRESSED_RGBA_ARB;
   end;
 end else begin
   case Compression of
     tc_None: texformat:=GL_RGB;
     tc_DXT1,tc_DXT3,tc_DXT5: texformat:=GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
     tc_ARB: texformat:=GL_COMPRESSED_RGB_ARB;
   end;
 end;
 if(FImage.GLFormat=GL_RGB) or (FImage.GLFormat=GL_RGBA) then
 glTexImage2D(GL_TEXTURE_2D, 0, texformat,FImage.Width, FImage.Height, 0,FImage.GLFormat, GL_UNSIGNED_BYTE, FImage.Data) else begin
   FCompressed:=True;
   glCompressedTexImage2DARB(GL_TEXTURE_2D,0,FImage.GLFormat,FImage.Width,FImage.Height,0,FImage.DataSize,FImage.Data);
 end;
 FGLFormat:=texformat;
 FMode:=tdm_Modulate;
 FWidth:=FImage.Width;
 FHeight:=FImage.Height;
 SetFilter(ttf_Linear);
 if(MipMap) and (GL_SGIS_generate_mipmap) then glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP_SGIS, GL_False);
 if(MipMap) and (not FMipMap) then AutoMipMap;
end;


MeF Dei Corvi   (2005-07-13 22:20:00) [17]


> gluBuild2DMipmaps

это ещё тормознее, чем glTexImage2D.

Значит так:
1) Грузим bmp или tga файл, грузим вручную, т.е. никаких TBitamp и пр. Для tga надо ещё писать процедуру RLE декомпрессии. Jpeg файл лучше не использовать, но и его можно грузить через какой-нить jpeg.dll.
2) Меняем RGB на BGR (BGRA на RGBA) через функцию, написанную на asm.
3) Используем расширение GL_SGIS_generate_mipmap, благо есть оно уже на всех видеокартах, для генерации мипмапов.
4) Используем glTexImage2D.

Кстати, можно грузить не из bmp и tga, а из файла в формате GL_COMPRESSED_RGBA_ARB... Проще и быстрее, хотя качество немного ухудшается.


NikotiN   (2005-07-13 19:35:00) [18]

трудно формат bmp посмотреть или tga, jpg, pcx..... ? и написать ручной метод загрузки, мне вот tga нравится....


Tonich   (2005-07-13 17:23:00) [19]


> XP, не трать время - он просто код нахаляву хочет.

код мне вообще не нужен, просто мне интересно как он грузит текстуры (в ручную)

я гружу почти так как и ты только вместо CODE>glTexImage2D
использую gluBuild2DMipmapsвот мне и интересно почему это самый тормознутый способ

тебе я сотрю только бы загрузить,  а все остальное ......


grouzd[E]v   (2005-07-13 16:57:00) [20]

XP, не трать время - он просто код нахаляву хочет. Кстати у меня все работает =))) УРА!


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо