📄 gltexture.pas
字号:
//
// This unit is part of the GLScene Project, http://glscene.org
//
{: GLTexture<p>
Handles all the color and texture stuff.<p>
<b>History : </b><font size=-1><ul>
<li>31/03/07 - DaStr - Bugfixed TGLTexture.Assign (missed some properties)
(Bugtracker ID = 1692012) (thanks Zapology)
<li>28/03/07 - DaStr - Added explicit pointer dereferencing
(thanks Burkhard Carstens) (Bugtracker ID = 1678644)
<li>28/03/07 - DaStr - Renamed parameters in some methods
(thanks Burkhard Carstens) (Bugtracker ID = 1678658)
<li>23/03/07 - DaStr - Added missing parameters in procedure's implementation
(thanks Burkhard Carstens) (Bugtracker ID = 1681409)
<li>06/03/07 - DaStr - Removed obsolete FPC IFDEF's
(thanks Burkhard Carstens) (Bugtracker ID = 1678642)
<li>14/03/07 - DaStr - TGLPicFileImage now provides correct Width and Height
(BugtrackerID = 1680742)
<li>09/03/07 - DaStr - Added TGLMaterial.GetActualPrimaryMaterial, GetLibMaterial
Bugfixed TGLColor.Initialize and TGLColor.Destroy
(thanks Burkhard Carstens) (BugtrackerID = 1678650)
<li>04/03/07 - DaStr - Added TGLTextureTarget, [Encode/Decode]GLTextureTarget
<li>23/02/07 - DaStr - Added TGLShaderClass, TGLShaderFailedInitAction,
EGLShaderException
Added TGLShader.HandleFailedInitialization, ShaderSupported,
GetStardardNotSupportedMessage, FailedInitAction
Added default value for TGLShader.ShaderStyle
Fixed TGLShader.InitializeShader
Fixed TGLTextureExItem.Create (TGLCoordinatesStyle stuff)
<li>16/02/07 - DaStr - Global $Q- removed
Added TGLLibMaterials.GetTextureIndex, GetMaterialIndex,
GetNameOfTexture, GetNameOfLibMaterial
Added TGLMaterialLibrary.TextureByName,
GetNameOfTexture, GetNameOfLibMaterial
<li>01/02/07 - LIN - Added TGLLibMaterial.IsUsed : true if texture has registered users
<li>23/01/07 - LIN - Added TGLTextureImage.AssignToBitmap : Converts the TextureImage to a TBitmap
<li>23/01/07 - LIN - Added TGLTextureImage.AsBitmap : Returns the TextureImage as a TBitmap
<li>22/01/07 - DaStr - IGLMaterialLibrarySupported abstracted
TGLLibMaterial.TextureOffset/TextureScale.FStyle bugfxed (thanks Ian Mac)
<li>20/12/06 - DaStr - TGLColorManager.Enumcolors overloaded
TGLShader.Apply bugfixed, TGLShader.Assign added
<li>19/10/06 - LC - Fixed TGLLibMaterial.UnApply so it doesn't unapply a 2nd
texture that was never applied. Bugtracker ID=1234085
<li>19/10/06 - LC - Fixed TGLLibMaterial.Assign. Bugtracker ID=1549843 (thanks Zapology)
<li>15/09/06 - NC - TGLShader.handle as Integer -> Cardinal
<li>12/09/06 - NC - Added GetFloatTexImage and SetFloatTexImage
<li>06/03/05 - EG - FTextureEx now autocreated (like FTexture)
<li>30/11/04 - EG - No longer stores TextureEx if empty
<li>06/10/04 - NC - Corrected filtering param. setting for float texture,
Now keep using GL_TEXTURE_RECTANGLE_NV for TGLFloatDataImage
<li>05/10/04 - SG - Added Material.TextureEx (texture extension)
<li>04/10/04 - NC - Added TGLFloatDataImage
<li>03/07/04 - LR - Move InitWinColors to GLCrossPlatform
Replace TGraphics, TBitmap by TGLGraphics, TGLBitmap
<li>29/06/04 - SG - Added bmModulate blending mode
<li>08/04/04 - EG - Added AddMaterialsFromXxxx logic
<li>04/09/03 - EG - Added TGLShader.Enabled
<li>02/09/03 - EG - Added TGLColor.HSVA
<li>28/07/03 - aidave - Added TGLColor.RandomColor
<li>24/07/03 - EG - Introduced TGLTextureImageEditor mechanism
<li>04/07/03 - EG - Material.Texture now autocreating,
added per-texture brightness and gamma correction
<li>13/06/03 - EG - cubemap images can now be saved/restored as a whole
<li>05/06/03 - EG - Assign fixes (Andrzej Kaluza)
<li>23/05/03 - EG - More generic libmaterial registration
<li>08/12/02 - EG - Added tiaInverseLuminance
<li>13/11/02 - EG - Added tmmCubeMapLight0
<li>18/10/02 - EG - CubeMap texture matrix now setup for 2nd texture unit too
<li>24/07/02 - EG - Added TGLLibMaterials.DeleteUnusedMaterials
<li>13/07/02 - EG - Improved materials when lighting is off
<li>10/07/02 - EG - Added basic protection against cyclic material refs
<li>08/07/02 - EG - Multipass support
<li>18/06/02 - EG - Added TGLShader
<li>26/01/02 - EG - Makes use of new xglBegin/EndUpdate mechanism
<li>24/01/02 - EG - Added vUseDefaultSets mechanism,
TGLPictureImage no longer systematically creates a TPicture
<li>21/01/02 - EG - Fixed OnTextureNeeded calls (Leonel)
<li>20/01/02 - EG - Fixed texture memory use report error
<li>10/01/02 - EG - Added Material.FaceCulling, default texture filters
are now Linear/MipMap
<li>07/01/02 - EG - Added renderDPI to rci
<li>16/12/01 - EG - Added support for cube maps (texture and mappings)
<li>30/11/01 - EG - Texture-compression related errors now ignored (unsupported formats)
<li>14/09/01 - EG - Use of vFileStreamClass
<li>06/09/01 - EG - No longers depends on 'Windows'
<li>04/09/01 - EG - Texture binding cache
<li>31/08/01 - EG - tiaDefault wasn't honoured (Rene Lindsay)
<li>25/08/01 - EG - Added TGLBlankImage
<li>16/08/01 - EG - drawState now part of TRenderContextInfo
<li>15/08/01 - EG - TexGen support (object_linear, eye_linear and sphere_map)
<li>13/08/01 - EG - Fixed OnTextureNeeded handling (paths for mat lib)
<li>12/08/01 - EG - Completely rewritten handles management
<li>27/07/01 - EG - TGLLibMaterials now a TOwnedCollection
<li>19/07/01 - EG - Added "Enabled" to TGLTexture
<li>28/06/01 - EG - Added AddTextureMaterial TGraphic variant
<li>14/03/01 - EG - Streaming fixes by Uwe Raabe
<li>08/03/01 - EG - TGLPicFileImage.GetBitmap32 now resets filename if not found
<li>01/03/01 - EG - Fixed TGLMaterial.DestroyHandle,
Added Texture2 notifications and material cacheing
<li>26/02/01 - EG - Added support for GL_EXT_texture_filter_anisotropic
<li>23/02/01 - EG - Fixed texture matrix messup (second was using first)
<li>21/02/01 - EG - Minor fix for TextureImageRequiredMemory,
TexGen calls now based on XOpenGL
<li>14/02/01 - EG - Added support for texture format & texture compression
<li>31/01/01 - EG - Added Multitexture support
<li>28/01/01 - EG - Added MaterialOptions
<li>15/01/01 - EG - Enhanced TGLPicFileImage.LoadFromFile
<li>13/01/01 - EG - New helper functions for TGLMaterialLibrary
<li>08/01/01 - EG - Not-so-clean fix for TGLTexture.Destroy... better fix
will require awareness of rendering contexts...
<li>06/12/00 - EG - Added PrepareBuildList mechanism
<li>16/10/00 - EG - Fix in TGLPictureImage.Assign
<li>25/09/00 - EG - New texture management implemented
<li>13/08/00 - EG - Added AddTextureMaterial
<li>06/08/00 - EG - File not found error now happens only once per texture,
also added some more doc and texture transforms support
to TGLLibMaterial
<li>27/07/00 - EG - TGLPictureImage.Assign now accepts TGraphic & TPicture,
Added max texture size clamping
<li>15/07/00 - EG - Upgrade for new list/handle destruction scheme
<li>05/07/00 - EG - Added tiaTopLeftPointColorTransparent
<li>28/06/00 - EG - Added asserts for missing texture files
<li>01/06/00 - EG - Added ReloadTexture (support for texture library),
Fixed persistence of material names in a texture library
<li>28/05/00 - EG - TGLColor now has NotifyChange support for TGLBaseSceneObject
<li>23/04/00 - EG - Fixed bugs with TGLPicFileImage & TGLPersistentImage,
Added tiaOpaque
<li>17/04/00 - EG - Added Assign to DummyCube and Sprite
<li>16/04/00 - EG - Added TGLPicFileImage.Assign
<li>26/03/00 - EG - Finally fixed nasty bug in TGLMaterial.Free
<li>22/03/00 - EG - Added BeginUpdate/EndUpdate to TGLPictureImage,
Made use of [Un]SetGLState in TGLMaterial
(gain = 7-10% on T&L intensive rendering),
TGLTexBaseClass is no more (RIP)
<li>21/03/00 - EG - TGLMaterial props are now longer stored when it is
linked to a material library entry,
Added TGLPictureImage (split from TGLPersistentImage),
TGLPicFileImage has been updated and reactivated,
ColorManager is now autocreated and non longer force-linked.
<li>19/03/00 - EG - Added SaveToXxxx & LoadFromXxxx to TGLMaterialLibrary
<li>18/03/00 - EG - Added GetGLTextureImageClassesAsStrings,
Added FindGLTextureImageClassByFriendlyName,
FChanges states now ignored in TGLTexture.GetHandle,
Added SaveToFile/LoadFromFile to TextureImage
<li>17/03/00 - EG - Added tiaLuminance
<li>14/03/00 - EG - Added RegisterGLTextureImageClass stuff,
Added ImageAlpha
<li>13/03/00 - EG - Changed TGLTextureImage image persistence again,
Added "Edit" method for texture image classes,
TMagFilter/TMinFilter -> TGLMagFilter/TGLMinFilter
<li>03/03/00 - EG - Removed TImagePath,
Started major rework of the whole TGLTextureImage stuff,
Fixed and optimized TGLTexture.PrepareImage
<li>12/02/00 - EG - Added Material Library
<li>10/02/00 - EG - Fixed crash when texture is empty
<li>08/02/00 - EG - Added AsWinColor & DeclareCurrentAsDefault to TGLColor,
fixed notification on material property setXxx methods,
Objects now begin with 'TGL'
<li>07/02/00 - EG - "Update"s renamed to "NotifyChange"s
<li>06/02/00 - EG - RoundUpToPowerOf2, RoundDownToPowerOf2 and
IsPowerOf2 moved to GLMisc, added TGLPersistentImage.Assign,
fixed TGLMaterial.Assign,
disable inheritance stuff in TGLFaceProperties.Apply (needs fixing),
Diffuse & ambient color now default to openGL values
<li>05/02/00 - EG - Javadocisation, fixes and enhancements :<br>
TGLColor.Update, ConvertWinColor, TPicImage,
TGLMaterial.Apply
</ul></font>
}
unit GLTexture;
interface
{$i GLScene.inc}
uses
Classes, OpenGL1x, VectorGeometry, SysUtils, GLMisc, GLGraphics, GLContext,
GLCrossPlatform, PersistentClasses, GLUtils, GLState;
type
PColorVector = ^TColorVector;
TColorVector = TVector;
const
// color definitions
// Window's colors (must be filled at program
// startup, since they depend on the desktop scheme)
{$J+ - allow change of the following typed constants}
clrScrollBar : TColorVector = (0,0,0,1);
clrBackground : TColorVector = (0,0,0,1);
clrActiveCaption : TColorVector = (0,0,0,1);
clrInactiveCaption : TColorVector = (0,0,0,1);
clrMenu : TColorVector = (0,0,0,1);
clrWindow : TColorVector = (0,0,0,1);
clrWindowFrame : TColorVector = (0,0,0,1);
clrMenuText : TColorVector = (0,0,0,1);
clrWindowText : TColorVector = (0,0,0,1);
clrCaptionText : TColorVector = (0,0,0,1);
clrActiveBorder : TColorVector = (0,0,0,1);
clrInactiveBorder : TColorVector = (0,0,0,1);
clrAppWorkSpace : TColorVector = (0,0,0,1);
clrHighlight : TColorVector = (0,0,0,1);
clrHighlightText : TColorVector = (0,0,0,1);
clrBtnFace : TColorVector = (0,0,0,1);
clrBtnShadow : TColorVector = (0,0,0,1);
clrGrayText : TColorVector = (0,0,0,1);
clrBtnText : TColorVector = (0,0,0,1);
clrInactiveCaptionText : TColorVector = (0,0,0,1);
clrBtnHighlight : TColorVector = (0,0,0,1);
clr3DDkShadow : TColorVector = (0,0,0,1);
clr3DLight : TColorVector = (0,0,0,1);
clrInfoText : TColorVector = (0,0,0,1);
clrInfoBk : TColorVector = (0,0,0,1);
{$J- - disable change of other typed constants}
// 'static' color definitions
// sort of grays
clrTransparent : TColorVector = (0, 0, 0, 0);
clrBlack : TColorVector = (0, 0, 0, 1);
clrGray05 : TColorVector = (0.05, 0.05, 0.05, 1);
clrGray10 : TColorVector = (0.10, 0.10, 0.10, 1);
clrGray15 : TColorVector = (0.15, 0.15, 0.15, 1);
clrGray20 : TColorVector = (0.20, 0.20, 0.20, 1);
clrGray25 : TColorVector = (0.25, 0.25, 0.25, 1);
clrGray30 : TColorVector = (0.30, 0.30, 0.30, 1);
clrGray35 : TColorVector = (0.35, 0.35, 0.35, 1);
clrGray40 : TColorVector = (0.40, 0.40, 0.40, 1);
clrGray45 : TColorVector = (0.45, 0.45, 0.45, 1);
clrGray50 : TColorVector = (0.50, 0.50, 0.50, 1);
clrGray55 : TColorVector = (0.55, 0.55, 0.55, 1);
clrGray60 : TColorVector = (0.60, 0.60, 0.60, 1);
clrGray65 : TColorVector = (0.65, 0.65, 0.65, 1);
clrGray70 : TColorVector = (0.70, 0.70, 0.70, 1);
clrGray75 : TColorVector = (0.75, 0.75, 0.75, 1);
clrGray80 : TColorVector = (0.80, 0.80, 0.80, 1);
clrGray85 : TColorVector = (0.85, 0.85, 0.85, 1);
clrGray90 : TColorVector = (0.90, 0.90, 0.90, 1);
clrGray95 : TColorVector = (0.95, 0.95, 0.95, 1);
clrWhite : TColorVector = (1, 1, 1, 1);
// other grays
clrDimGray : TColorVector = (0.329412, 0.329412, 0.329412, 1);
clrGray : TColorVector = (0.752941, 0.752941, 0.752941, 1);
clrLightGray : TColorVector = (0.658824, 0.658824, 0.658824, 1);
// colors en masse
clrAquamarine : TColorVector = (0.439216, 0.858824, 0.576471, 1);
clrBlueViolet : TColorVector = (0.62352, 0.372549, 0.623529, 1);
clrBrown : TColorVector = (0.647059, 0.164706, 0.164706, 1);
clrCadetBlue : TColorVector = (0.372549, 0.623529, 0.623529, 1);
clrCoral : TColorVector = (1, 0.498039, 0.0, 1);
clrCornflowerBlue : TColorVector = (0.258824, 0.258824, 0.435294, 1);
clrDarkGreen : TColorVector = (0.184314, 0.309804, 0.184314, 1);
clrDarkOliveGreen : TColorVector = (0.309804, 0.309804, 0.184314, 1);
clrDarkOrchid : TColorVector = (0.6, 0.196078, 0.8, 1);
clrDarkSlateBlue : TColorVector = (0.419608, 0.137255, 0.556863, 1);
clrDarkSlateGray : TColorVector = (0.184314, 0.309804, 0.309804, 1);
clrDarkSlateGrey : TColorVector = (0.184314, 0.309804, 0.309804, 1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -