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

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

gpu: first shot at a Shader::SetTexture() function.

  • Property svn:keywords set to Id
File size: 2.3 KB
RevLine 
[659]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
[668]13// ----------------
[659]14//
15
[748]16#if !defined __LOL_SHADER_H__
17#define __LOL_SHADER_H__
[659]18
[1214]19#include <stdint.h>
20
[686]21namespace lol
22{
23
[1214]24struct ShaderUniform
25{
26    friend class Shader;
27
28public:
[1228]29    inline ShaderUniform() : flags(0) {}
[1214]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
[1227]37struct ShaderAttrib
38{
39    friend class Shader;
40    friend class VertexDeclaration;
41
42public:
[1228]43    inline ShaderAttrib() : m_flags((uint64_t)0 - 1) {}
[1227]44
45private:
[1228]46    uint64_t m_flags;
[1227]47};
48
[659]49class ShaderData;
50
51class Shader
52{
53public:
[1385]54    static Shader *Create(char const *lolfx);
[668]55    static Shader *Create(char const *vert, char const *frag);
56    static void Destroy(Shader *shader);
[659]57
[1227]58    ShaderAttrib GetAttribLocation(char const *attr, struct VertexUsage usage,
59                                   int index) const;
[832]60
[1214]61    ShaderUniform GetUniformLocation(char const *uni) const;
[1215]62    void SetUniform(ShaderUniform const &uni, int i);
63    void SetUniform(ShaderUniform const &uni, ivec2 const &v);
64    void SetUniform(ShaderUniform const &uni, ivec3 const &v);
65    void SetUniform(ShaderUniform const &uni, ivec4 const &v);
[1214]66    void SetUniform(ShaderUniform const &uni, float f);
67    void SetUniform(ShaderUniform const &uni, vec2 const &v);
68    void SetUniform(ShaderUniform const &uni, vec3 const &v);
69    void SetUniform(ShaderUniform const &uni, vec4 const &v);
[1259]70    void SetUniform(ShaderUniform const &uni, mat2 const &m);
71    void SetUniform(ShaderUniform const &uni, mat3 const &m);
[1214]72    void SetUniform(ShaderUniform const &uni, mat4 const &m);
[659]73
[1452]74    /* FIXME: this should be called SetUniform, too, but we need a new
75     * type to represent textures. */
76    void SetTexture(ShaderUniform const &uni, int id, int index);
77
[659]78    void Bind() const;
[1241]79    void Unbind() const;
[659]80
[668]81protected:
82    Shader(char const *vert, char const *frag);
83    ~Shader();
84
[659]85private:
86    ShaderData *data;
87};
88
[686]89} /* namespace lol */
90
[748]91#endif // __LOL_SHADER_H__
[659]92
Note: See TracBrowser for help on using the repository browser.