- procedure LoadTextureFromBitmap(bmp:TBitmap; Filter : Boolean; Alpha : Cardinal);
- var
- data : PByteArray;
- i,j,w : Integer;
- scanline : PByteArray;
- r,g,b,a : Byte;
- RGBA : Cardinal;
- begin
- bmp.PixelFormat:=pf32bit;
- getmem(data,bmp.width*bmp.height*4);
- // Bilddaten kopieren (Upsidedown)
- w:=bmp.Width;
- for i:=0 to bmp.Height-1 do
- begin
- scanline:=bmp.ScanLine[bmp.Height-i-1];
- // Jedes Pixel pro Zeile mit ALPHA-Wert vergleichen
- for j := 0 to (bmp.width-1) do
- begin
- // Bytes laden
- B:=scanline[j*4+0];
- G:=scanline[j*4+1];
- R:=scanline[j*4+2];
- // A:=scanline[j*4+3];
- // RGBA Zusammen kopieren
- RGBA:=R;
- RGBA:=RGBA shl 8;
- RGBA:=RGBA or G;
- RGBA:=RGBA shl 8;
- RGBA:=RGBA or B;
- // RGBA:=RGBA shl 8;
- // RGBA:=RGBA or A;
- // Mit Transparentfarbe vergleichen und ALPHA setzen
- If RGBA=alpha then A:=$00 else A:=$FF;
- scanline[j*4+3]:=A;
- end;
- // in ^data kopieren
- move(scanline^,data^[i*w*4],w*4);
- end;
- { Hier liegt wohl mein problem }
- // glGenTextures(1, @Texture);
- // glBindTexture(GL_TEXTURE_2D, Texture);
- // glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); {???}
- // Textur in OpenGL erzeugen
- If Filter then begin
- gltexparameteri(GL_TEXTURE_2D,GL_Texture_min_filter,GL_LINEAR_MIPMAP_LINEAR);
- gltexparameteri(GL_TEXTURE_2D,GL_Texture_mag_filter,GL_LINEAR);
- end else begin
- gltexparameteri(GL_TEXTURE_2D,GL_Texture_min_filter,GL_NEAREST_MIPMAP_NEAREST);
- gltexparameteri(GL_TEXTURE_2D,GL_Texture_mag_filter,GL_NEAREST);
- end;
- gluBuild2DMipmaps(GL_TEXTURE_2D, gl_RGBA8, bmp.width, bmp.Height, GL_BGRA, gl_unsigned_byte, data);
- FreeMem(data);
- end;