From e991f684566fa8872e7807a9eac99844ac60c058 Mon Sep 17 00:00:00 2001 From: Bergmann89 <info@bergmann89.de> Date: Wed, 24 Dec 2014 05:20:44 +0100 Subject: [PATCH] * added HasOpenGLSupport to FormatDescriptor to check if the given format is supported by OpenGL --- examples/SimpleLoadFromFile/SimpleLoadFromFile.lpr | 12 ++++++----- examples/SimpleLoadFromFile/SimpleLoadFromFile.lps | 23 ++++++++++++++++------ glBitmap.pas | 11 +++++++++++ 3 files changed, 35 insertions(+), 11 deletions(-) diff --git a/examples/SimpleLoadFromFile/SimpleLoadFromFile.lpr b/examples/SimpleLoadFromFile/SimpleLoadFromFile.lpr index bdb9c69..64d2db7 100644 --- a/examples/SimpleLoadFromFile/SimpleLoadFromFile.lpr +++ b/examples/SimpleLoadFromFile/SimpleLoadFromFile.lpr @@ -40,15 +40,17 @@ end; begin oglWindow := CreateOpenGLWindow('SimpleLoadFromFile', 800, 600, @WindowProc); try - tex := TglBitmap2D.Create; // create texture object - data := TglBitmapData.Create; // create texture data object + tex := TglBitmap2D.Create; // create texture object + data := TglBitmapData.Create; // create texture data object try - data.LoadFromFile( // load texture data from file + data.LoadFromFile( // load texture data from file ExtractFilePath(ApplicationName) + '../textures/BMP_24_RGB8.bmp'); - tex.UploadData(data); // upload data to video card + if not data.FormatDescriptor.HasOpenGLSupport then // check if format is supported by OpenGL + data.ConvertTo(data.FormatDescriptor.OpenGLFormat); // if not then convert + tex.UploadData(data); // upload data to video card finally - FreeAndNil(data); // after upload is done, the data object could be freed to save memory + FreeAndNil(data); // after upload is done, the data object could be freed to save memory end; while running and ProgressMesages do begin diff --git a/examples/SimpleLoadFromFile/SimpleLoadFromFile.lps b/examples/SimpleLoadFromFile/SimpleLoadFromFile.lps index 41e7f95..5c03634 100644 --- a/examples/SimpleLoadFromFile/SimpleLoadFromFile.lps +++ b/examples/SimpleLoadFromFile/SimpleLoadFromFile.lps @@ -8,9 +8,8 @@ <Unit0> <Filename Value="SimpleLoadFromFile.lpr"/> <IsPartOfProject Value="True"/> - <IsVisibleTab Value="True"/> <TopLine Value="30"/> - <CursorPos X="8" Y="45"/> + <CursorPos X="56" Y="46"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit0> @@ -23,9 +22,10 @@ <Filename Value="..\..\glBitmap.pas"/> <IsPartOfProject Value="True"/> <UnitName Value="glBitmap"/> + <IsVisibleTab Value="True"/> <EditorIndex Value="1"/> - <TopLine Value="6544"/> - <CursorPos X="47" Y="6558"/> + <TopLine Value="3822"/> + <CursorPos X="65" Y="3838"/> <UsageCount Value="20"/> <Loaded Value="True"/> </Unit2> @@ -36,7 +36,6 @@ </Unit3> <Unit4> <Filename Value="..\TextureFromFunction\TextureFromFunction.lpr"/> - <UnitName Value="SimpleLoadFromFile"/> <EditorIndex Value="2"/> <TopLine Value="68"/> <CursorPos Y="78"/> @@ -44,7 +43,7 @@ <Loaded Value="True"/> </Unit4> </Units> - <JumpHistory Count="21" HistoryIndex="20"> + <JumpHistory Count="24" HistoryIndex="23"> <Position1> <Filename Value="SimpleLoadFromFile.lpr"/> <Caret Line="47" Column="75" TopLine="22"/> @@ -129,6 +128,18 @@ <Filename Value="SimpleLoadFromFile.lpr"/> <Caret Line="45" Column="8" TopLine="30"/> </Position21> + <Position22> + <Filename Value="..\..\glBitmap.pas"/> + <Caret Line="446" Column="50" TopLine="420"/> + </Position22> + <Position23> + <Filename Value="SimpleLoadFromFile.lpr"/> + <Caret Line="46" Column="56" TopLine="30"/> + </Position23> + <Position24> + <Filename Value="..\..\glBitmap.pas"/> + <Caret Line="446" Column="14" TopLine="431"/> + </Position24> </JumpHistory> </ProjectSession> </CONFIG> diff --git a/glBitmap.pas b/glBitmap.pas index 1e804e0..574bab5 100644 --- a/glBitmap.pas +++ b/glBitmap.pas @@ -390,6 +390,10 @@ type { @return @true if the format is a grayscale format, @false otherwise } function GetIsGrayscale: Boolean; + + { @return @true if the format is supported by OpenGL, @false otherwise } + function GetHasOpenGLSupport: Boolean; + protected fFormat: TglBitmapFormat; //< format this descriptor belongs to fWithAlpha: TglBitmapFormat; //< suitable format with alpha channel @@ -442,6 +446,8 @@ type property HasColor: Boolean read GetHasColor; //< @true if the format has any color color channel, @false otherwise property IsGrayscale: Boolean read GetIsGrayscale; //< @true if the format is a grayscale format, @false otherwise + property HasOpenGLSupport: Boolean read GetHasOpenGLSupport; //< @true if the format is supported by OpenGL, @false otherwise + function GetSize(const aSize: TglBitmapSize): Integer; overload; virtual; function GetSize(const aWidth, aHeight: Integer): Integer; overload; virtual; @@ -3837,6 +3843,11 @@ begin result := (Mask.r = Mask.g) and (Mask.g = Mask.b) and (Mask.r > 0); end; +function TglBitmapFormatDescriptor.GetHasOpenGLSupport: Boolean; +begin + result := (OpenGLFormat = Format); +end; + procedure TglBitmapFormatDescriptor.SetValues; begin fFormat := tfEmpty; -- 2.1.4