aboutsummaryrefslogtreecommitdiff
path: root/src/lua/graphics/JSL.h
blob: af6c54d8644bb35d461d9a55dce2eeead5999115 (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
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
#ifndef __JIN_LUA_GRAPHICS_JSL_H
#define __JIN_LUA_GRAPHICS_JSL_H
#include "libjin/jin.h"
#include "../luaopen_types.h"
#include "Image.h"
#include "Color.h"
#include "Canvas.h"

namespace jin
{
namespace lua
{
namespace graphics
{

    class JSLProgram : public Object
    {
    public:
        static JSLProgram* createJSLProgram(const char* program);

        inline void use()
        {
            currentJSLProgram = this;
            jslprogram->use();
        }

        static inline void unuse()
        {
            currentJSLProgram = nullptr;
            jin::graphics::JSLProgram::unuse();
        }

        void sendFloat(const char* name, float number)
        {
            jslprogram->sendFloat(name, number);
        }

        void sendImage(const char*  name, const Image* image)
        {
            jslprogram->sendTexture(name, image->getRawImage());
        }

        void sendVec2(const char* name, float x, float y)
        {
            jslprogram->sendVec2(name, x, y);
        }

        void sendVec3(const char* name, float x, float y, float z)
        {
            jslprogram->sendVec3(name, x, y, z);
        }

        void sendVec4(const char* name, float x, float y, float z, float w)
        {
            jslprogram->sendVec4(name, x, y, z, w);
        }

        void sendCanvas(const char* name, const Canvas* canvas)
        {
            jslprogram->sendCanvas(name, canvas->getRawCanvas());
        }

        void sendColor(const char* name, const lua::graphics::color* col)
        {
            jslprogram->sendColor(name, col);
        }

        static inline JSLProgram* getCurrentJSL()
        {
            return currentJSLProgram;
        }

    private:

        static JSLProgram* currentJSLProgram;

		JSLProgram() {}

        ~JSLProgram()
        {
            delete jslprogram;
        }

        jin::graphics::JSLProgram * jslprogram;

    };

} // graphics
} // lua
} // jin

#endif // __JIN_LUA_GRAPHICS_JSL_H