Einzelnen Beitrag anzeigen

Benutzerbild von luisk
luisk

Registriert seit: 18. Mär 2009
402 Beiträge
 
#5

AW: OpenGL Bitmap für Texttur schnell im Speicher erzeugen

  Alt 29. Jun 2014, 14:43
so geht's,
allerdings ist die Zeile
 texdata[((yHeight)-ly)*xwidth +lx ] := RGBQuad( bmp.canvas.pixels[lx,ly]); viel zu langsam.
Habe es auch mit TBmp.Scanline[y] probiert.
Ist aber noch langsamer, obwohl man überall liest, scanline sei schneller.

Steh wohl grad auf dem Schlauch


Delphi-Quellcode:
   inc(z);
   bmp.canvas.Textout(20,20,inttostr(z));

   xwidth := bmp.Width-1;
   yHeight := bmp.Height-1;
   for lx:= 0 to xwidth do begin
     for ly := 0 to yHeight do begin
         texdata[((yHeight)-ly)*xwidth +lx ] := RGBQuad( bmp.canvas.pixels[lx,ly]);
      end;
   end;

   if TextureID > 0 then glDeleteTextures(1, @TextureID);
   glGenTextures(1, @ textureid);
   glBindTexture(GL_TEXTURE_2D, cardinal(textureid) );
   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, yHeight, 0,
                GL_RGBA, GL_UNSIGNED_BYTE, @texdata);
hier die Version mit Scanline[y] - noch langsamer.
Was kann man tun ? API-Version ?
Delphi-Quellcode:
 
   inc(z);
   bmp.canvas.Textout(20,20,inttostr(z));
   xwidth := bmp.Width;
   yHeight := bmp.Height;
   for y := 0 to yHeight-1 do begin
       l_ptr:=bmp.ScanLine[y];
       for x := 0 to xwidth-1 do begin
          l_r:= l_ptr.rgbBlue;
          l_ptr.rgbBlue:=l_ptr.rgbRed;
          l_ptr.rgbRed:=l_r;
          texdata[((yHeight-1)-y)*xwidth+x] := l_ptr^;
          inc(l_ptr);
       end;
    end;
    if TextureID > 0 then glDeleteTextures(1, @TextureID);
    glGenTextures(1, @ textureid);
    glBindTexture(GL_TEXTURE_2D, cardinal(textureid) );
    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, yHeight);

Geändert von luisk (29. Jun 2014 um 16:00 Uhr)
  Mit Zitat antworten Zitat