aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/shaders/jsl_compiler.h
blob: f7aa48acc6cc71950d920333394539f0967acc44 (plain)
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
#ifndef __JE_JSL_COMPILER_H__
#define __JE_JSL_COMPILER_H__

#include "../../core/configuration.h"
#if defined(jin_graphics) && (jin_graphics & jin_graphics_shader)

#include <string>

#include "../../common/string.h"
#include "../../common/singleton.hpp"

namespace JinEngine
{
	namespace Graphics
	{
		namespace Shaders
		{

			extern JinEngine::String SHADER_PROJECTION_MATRIX;
			extern JinEngine::String SHADER_MODELVIEW_MATRIX;
			extern JinEngine::String SHADER_MAIN_TEXTURE;
			extern JinEngine::String SHADER_VERTEX_COORDS;
			extern JinEngine::String SHADER_TEXTURE_COORDS;
			extern JinEngine::String SHADER_VERTEX_COLOR;
			extern JinEngine::String SHADER_TIME;
			extern JinEngine::String SHADER_RENDERTARGET_SIZE;

			///
			/// Compile JSL into GLSL.
			///
			class JSLCompiler : public Singleton<JSLCompiler>
			{
			public:
				///
				/// Compile JSL shader source into GLSL. 
				/// 
				/// @param jsl JSL shader source. 
				/// @param glsl_vertex Output of vertex glsl shader source. 
				/// @param glsl_fragment Output of fragment glsl shader source.
				/// @return True if compile successful, otherwise return false.
				///
				bool compile(const std::string& jsl, std::string* glsl_vertex, std::string* glsl_fragment);

			private:
				JinEngine::String formatVertexShader(const JinEngine::String& vert);

				JinEngine::String formatFragmentShader(const JinEngine::String& frag);

			};

		} // namespace Shaders
	} // namespace Graphics
} // namespace JinEngine

#endif // (jin_graphics) && (jin_graphics & jin_graphics_shader)

#endif // __JE_JSL_COMPILER_H__