⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gltexture.pas

📁 这是三D开发的一些源码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
//
// 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 + -