1 /* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
2 
3 #ifndef LUA_OPENGLUTILS_H
4 #define LUA_OPENGLUTILS_H
5 
6 #include <string>
7 
8 //#include "LuaInclude.h"
9 #include "System/type2.h"
10 
11 class CMatrix44f;
12 class LuaMatTexture;
13 struct lua_State;
14 
15 typedef unsigned int GLuint;
16 
17 
18 class LuaOpenGLUtils {
19 	public:
20 		static const CMatrix44f* GetNamedMatrix(const std::string& name);
21 		static bool ParseTextureImage(lua_State* L, LuaMatTexture& texUnit, const std::string& image);
22 };
23 
24 
25 class LuaMatTexture {
26 	public:
27 		enum Type {
28 			LUATEX_NONE = 0,
29 			LUATEX_NAMED,
30 			LUATEX_LUATEXTURE,
31 			LUATEX_UNITTEXTURE1,
32 			LUATEX_UNITTEXTURE2,
33 			LUATEX_3DOTEXTURE,
34 			LUATEX_UNITBUILDPIC,
35 			LUATEX_UNITRADARICON,
36 			LUATEX_SHADOWMAP,
37 			LUATEX_REFLECTION,
38 			LUATEX_SPECULAR,
39 			LUATEX_HEIGHTMAP,
40 			LUATEX_SHADING,
41 			LUATEX_GRASS,
42 			LUATEX_FONT,
43 			LUATEX_FONTSMALL,
44 			LUATEX_MINIMAP,
45 
46 			LUATEX_INFOTEX_ACTIVE,
47 			LUATEX_INFOTEX_LOSMAP,
48 			LUATEX_INFOTEX_MTLMAP,
49 			LUATEX_INFOTEX_HGTMAP,
50 			LUATEX_INFOTEX_BLKMAP,
51 
52 			LUATEX_MAP_GBUFFER_NORMTEX,
53 			LUATEX_MAP_GBUFFER_DIFFTEX,
54 			LUATEX_MAP_GBUFFER_SPECTEX,
55 			LUATEX_MAP_GBUFFER_EMITTEX,
56 			LUATEX_MAP_GBUFFER_MISCTEX,
57 			LUATEX_MAP_GBUFFER_ZVALTEX,
58 
59 			LUATEX_MODEL_GBUFFER_NORMTEX,
60 			LUATEX_MODEL_GBUFFER_DIFFTEX,
61 			LUATEX_MODEL_GBUFFER_SPECTEX,
62 			LUATEX_MODEL_GBUFFER_EMITTEX,
63 			LUATEX_MODEL_GBUFFER_MISCTEX,
64 			LUATEX_MODEL_GBUFFER_ZVALTEX,
65 		};
66 
67 	public:
LuaMatTexture()68 		LuaMatTexture()
69 		: type(LUATEX_NONE), data(NULL), enable(false), enableTexParams(false) {}
70 
71 		void Finalize();
72 
73 		void Bind() const;
74 		void Unbind() const;
75 
76 		void Print(const std::string& indent) const;
77 
78 		static int Compare(const LuaMatTexture& a, const LuaMatTexture& b);
79 		bool operator <(const LuaMatTexture& mt) const {
80 			return Compare(*this, mt)  < 0;
81 		}
82 		bool operator==(const LuaMatTexture& mt) const {
83 			return Compare(*this, mt) == 0;
84 		}
85 		bool operator!=(const LuaMatTexture& mt) const {
86 			return Compare(*this, mt) != 0;
87 		}
88 
89 	public:
90 		Type type;
91 		const void* data;
92 		bool enable;
93 		bool enableTexParams;
94 
95 		int2 GetSize() const;
96 		GLuint GetTextureID() const;
97 		GLuint GetTextureTarget() const;
98 
99 	public:
100 		static const int maxTexUnits = 16;
101 };
102 
103 #endif // LUA_OPENGLUTILS_H
104