source: trunk/src/gpu/shader.h @ 1215

Last change on this file since 1215 was 1215, checked in by sam, 9 years ago

gpu: add support for integer uniforms and fix a few PS3 and Linux compilation
issues that were introduced with the Direct3D changes.

  • Property svn:keywords set to Id
File size: 1.7 KB
Line 
1//
2// Lol Engine
3//
4// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net>
5//   This program is free software; you can redistribute it and/or
6//   modify it under the terms of the Do What The Fuck You Want To
7//   Public License, Version 2, as published by Sam Hocevar. See
8//   http://sam.zoy.org/projects/COPYING.WTFPL for more details.
9//
10
11//
12// The Shader class
13// ----------------
14//
15
16#if !defined __LOL_SHADER_H__
17#define __LOL_SHADER_H__
18
19#include <stdint.h>
20
21namespace lol
22{
23
24struct ShaderUniform
25{
26    friend class Shader;
27
28public:
29    ShaderUniform() : flags(0) {}
30
31private:
32    uintptr_t frag, vert;
33    /* FIXME: do we really need this to indicate which locations are valid? */
34    uint32_t flags;
35};
36
37class ShaderData;
38
39class Shader
40{
41public:
42    static Shader *Create(char const *vert, char const *frag);
43    static void Destroy(Shader *shader);
44
45    int GetAttribLocation(char const *attr) const;
46
47    ShaderUniform GetUniformLocation(char const *uni) const;
48    void SetUniform(ShaderUniform const &uni, int i);
49    void SetUniform(ShaderUniform const &uni, ivec2 const &v);
50    void SetUniform(ShaderUniform const &uni, ivec3 const &v);
51    void SetUniform(ShaderUniform const &uni, ivec4 const &v);
52    void SetUniform(ShaderUniform const &uni, float f);
53    void SetUniform(ShaderUniform const &uni, vec2 const &v);
54    void SetUniform(ShaderUniform const &uni, vec3 const &v);
55    void SetUniform(ShaderUniform const &uni, vec4 const &v);
56    void SetUniform(ShaderUniform const &uni, mat4 const &m);
57
58    void Bind() const;
59
60protected:
61    Shader(char const *vert, char const *frag);
62    ~Shader();
63
64private:
65    ShaderData *data;
66};
67
68} /* namespace lol */
69
70#endif // __LOL_SHADER_H__
71
Note: See TracBrowser for help on using the repository browser.