All pastes #95231 Raw Edit

Unnamed

public text v1 · immutable
#95231 ·published 2006-07-21 21:09 UTC
rendered paste body
function LoadGLTexture(const Surface: PSDL_Surface; const IsTexture: Boolean): PLGLRec;
var
  NewSizeX, NewSizeY: DWord;
  ATex: GLUInt;
  Temp: PSDL_Surface;
  i, j: Longint;
  GLBPP: Longint;
begin
  Result:=nil;
  GetMem(Result, SizeOf(TLGLRec));
  if IsTexture then begin
    NewSizeX:=NextPowerOf(Surface^.w);
    NewSizeY:=NextPowerOf(Surface^.h);
    Result^.StretchX:=1.0 * Surface^.w / NewSizeX;
    Result^.StretchY:=1.0 * Surface^.h / NewSizeY;

    Temp:=Surface;

    if Temp^.format^.BytesPerPixel = 4 then
      GLBPP:=GL_BGRA_EXT
    else
      GLBPP:=GL_BGR_EXT;
      
    Writeln(NewSizeX, ' ', NewSizeY);
      
    glGenTextures(1, @Result^.Texture);
    glBindTexture(GL_TEXTURE_2D, Result^.Texture);
    glTexImage2D(GL_TEXTURE_2D, 0, Temp^.format^.BytesPerPixel,
                 NewSizeX, NewSizeY, 0, GLBPP, GL_UNSIGNED_BYTE, Temp^.Pixels);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    
    SDL_UnlockSurface(Temp);
    SDL_FreeSurface(Temp);
    Result^.Surface:=nil;
  end else Result^.Surface:=Surface;
end;