aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics/shaders/jsl_compiler.h
blob: ad3bdbb28c6f01c8c0f654a841e689a76153dffb (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__