-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgl3Material.pas
112 lines (92 loc) · 2.83 KB
/
gl3Material.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
unit gl3Material;
(* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is the gl3ds main unit.
*
* The Initial Developer of the Original Code is
* Noeska Software.
* Portions created by the Initial Developer are Copyright (C) 2002-2004
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
* M van der Honing
*
*)
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
interface
uses classes, material, dglopengl, glBitmap;
type
Tgl3Material= class(TBaseMaterial)
private
FTexture: TglBitmap2D;
public
destructor Destroy; override;
procedure Apply; override;
procedure UpdateTexture; override;
end;
implementation
uses
SysUtils, Model;
destructor Tgl3Material.Destroy;
begin
if HasTexturemap = True then gldeletetextures(1, @TexId); //lets clean up afterwards...
if HasTexturemap = True then ftexture.Free;
inherited Destroy;
end;
procedure Tgl3Material.Apply;
begin
inherited;
if (FHastexturemap = True) AND (ftexture<>nil) then
begin
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, ftexture.ID);
//glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S, GL_REPEAT);
//glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); { only first two can be used }
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); { all of the above can be used }
end;
//Two Sided Materials
if FTwoSided then
glDisable(GL_CULL_FACE)
else
glEnable(GL_CULL_FACE);
end;
procedure Tgl3Material.Updatetexture;
var
hastexture: GLuint;
begin
//create texture and load from file...
if FHasTexturemap then
begin
FTexture:=TglBitmap2D.Create;
//haal pad uit scene weg, moet anders nl dmv pad uit scene doorgeven aan materiaal
if TBaseModel(self.owner).TexturePath <> '' then
if fileexists(TBaseModel(self.owner).TexturePath + Trim(ExtractFileName(fileName))) then
FTexture.LoadFromFile(TBaseModel(self.owner).TexturePath + Trim(ExtractFileName(FileName)))
else
if fileexists(fileName) then
FTexture.LoadFromFile(FFileName);
end;
//now finish up the texture and load it to openl (videocard)
if fHasTextureMap = true then
begin
FTexture.FlipVert; //why does it need to be flipped...
FTexture.GenTexture(false);
hastexture:=FTexture.Target;
FTexId := hastexture;
end;
end;
end.