glbmp verwendet opengl1.2 ? Das ist mir zwar neu, aber nagut:
Es gibt eine Althernative, Texturen zu laden... will man z.b. BMPs und JPEG's laden, dann kann man sich auch ne eigene Prozedur schreiben:
Delphi-Quellcode:
procedure loadtexture(var textur : integer; filename:string);
var
bitmap : tbitmap;
jpg : tjpegimage;
texdata : array[0..262143] of Trgbpoint;
r,g,b : byte;
x,y : integer;
tempint : integer;
xwidth, ywidth : integer;
begin
bitmap := tbitmap.create;
if (ExtractFileExt(filename) = '.jpg') or (ExtractFileExt(filename) = '.jpeg') then
begin
jpg := tjpegimage.Create;
jpg.LoadFromFile(filename);
jpg.CompressionQuality := 100;
try
bitmap.assign(jpg);
finally
jpg.free;
end;
end
else
begin
if ExtractFileExt(filename) = '.bmp' then
begin
bitmap.loadfromfile(filename);
end;
end
xwidth := bitmap.Width;
ywidth := bitmap.Height;
for x := 0 to xwidth-1 do
begin
for y := 0 to ywidth-1 do
begin
tempint := bitmap.canvas.pixels[x,y];
r := TempInt and $FF;
g := (TempInt shr 8) and $FF;
b := (TempInt shr 16) and $FF;
texdata[((ywidth-1)-y)*xwidth+x, 0] := r;
texdata[((ywidth-1)-y)*xwidth+x, 1] := g;
texdata[((ywidth-1)-y)*xwidth+x, 2] := b;
end;
end;
bitmap.free;
glGenTextures(1, @textur);
glBindTexture(GL_TEXTURE_2D, textur);
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, 3, xwidth, ywidth, 0, GL_RGB, GL_UNSIGNED_BYTE, @texdata);
end;
Diese Prozedur kann man denn so aufrufen:
loadtexture(tex,'Textur.jpg');
Dabei ist "tex" vom Typ gluint und alles andere verhällt sich genau so, als wenn man die glaux-lib verwendet...
allerdings könnten einige wichtige Prozeduren / Funktionen fehlen, weshalb man sich die extra aus der Opengl32.dll holen muss:
Delphi-Quellcode:
procedure glGenTextures(n: integer; textures: Pinteger); stdcall; EXTERNAL opengl32;
procedure glBindTexture(target: uint; texture: integer); stdcall; EXTERNAL opengl32;
procedure glTexParameteri(target, pname: uint; param: integer); stdcall; EXTERNAL opengl32;
procedure glTexImage2D(target: uint; level, internalformat: integer; width, height: integer; border: integer; format, atype: uint; Pixels:Pointer); stdcall; EXTERNAL opengl32;
(hoffe, es sind nicht zu viele Fehler im Beitrag ... alles auf die schnelle zusammengeschweißt...)
Ps: falls du immernoch eine günstige Delphi-Version > v3 suchst, denn bitte mich per E-Mail ganz freundlich drum, ob ich dir den
Dl-Link für die Delphi 6 Personal (war mal gratis) ausgraben kann
Edit: Jippie! Beitrag nummer 100