All pastes #18934 Raw Edit

Something

public text v1 · immutable
#18934 ·published 2005-07-31 15:16 UTC
rendered paste body
function CreateTexture(aWidth, aHeight, aFormat : Cardinal; aMipmaps : Boolean; aData : Pointer) : Cardinal;
begin
  glGenTextures(1, @result);
  glBindTexture(GL_TEXTURE_2D, result);

	glPixelStorei (GL_UNPACK_ALIGNMENT, 1);

  if aFormat = GL_RGBA then
    begin
      if aMipMaps then gluBuild2DMipmaps(GL_TEXTURE_2D, 4, aWidth, aHeight, aFormat, GL_UNSIGNED_BYTE, aData)
      else glTexImage2D(GL_TEXTURE_2D, 4, 4, aWidth, aHeight, 0, aFormat, GL_UNSIGNED_BYTE, aData);
    end
  else if aFormat = GL_RGB then
    begin
      if aMipmaps then gluBuild2DMipmaps(GL_TEXTURE_2D, 3, aWidth, aHeight, aFormat, GL_UNSIGNED_BYTE, aData)
      else glTexImage2D(GL_TEXTURE_2D, 0, 3, aWidth, aHeight, 0, aFormat, GL_UNSIGNED_BYTE, aData);
    end
  else if aFormat = GL_RGB16 then
    begin
      if aMipmaps then gluBuild2DMipmaps(GL_TEXTURE_2D, 2, aWidth, aHeight, aFormat, GL_UNSIGNED_BYTE, aData)
      else glTexImage2D(GL_TEXTURE_2D, 0, 2, aWidth, aHeight, 0, aFormat, GL_UNSIGNED_BYTE, aData);
    end
  else if (aFormat = GL_RGB8) or (aFormat = GL_LUMINANCE) or (aFORMAT = GL_LUMINANCE_ALPHA) then
    begin
      if aMipmaps then gluBuild2DMipmaps(GL_TEXTURE_2D, 1, aWidth, aHeight, aFormat, GL_UNSIGNED_BYTE, aData)
      else glTexImage2D(GL_TEXTURE_2D, 0, 1, aWidth, aHeight, 0, aFormat, GL_UNSIGNED_BYTE, aData);
    end
  else
    begin
      ShowMessage('invalid or unknown texture format');
      result := 0;
    end;
end;



// note that we specify format, cause several of the same bitmap pixeltypes can have diff gl formats

function CreateTexture(aBitmap : TBitmap; aFormat : Cardinal; aMipmaps : Boolean) : Cardinal; overload;
var
  aData : Pointer;
begin
  aData := aBitmap.ScanLine[aBitmap.Height-1];
  result := CreateTexture(aBitmap.Width, aBitmap.Height, aFormat, aMipmaps, aBitmap.ScanLine[aBitmap.Height-1])
end;