summaryrefslogtreecommitdiffstats
path: root/src/shell-glsl-effect.h
blob: 3759e7172d01731807c30fe6cfc5ff62ec44f6aa (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
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
#ifndef __SHELL_GLSL_EFFECT_H__
#define __SHELL_GLSL_EFFECT_H__

#include "st.h"
#include <gtk/gtk.h>

/**
 * ShellSnippetHook:
 * Temporary hack to work around Cogl not exporting CoglSnippetHook in
 * the 1.0 API. Don't use.
 */
typedef enum {
  /* Per pipeline vertex hooks */
  SHELL_SNIPPET_HOOK_VERTEX = 0,
  SHELL_SNIPPET_HOOK_VERTEX_TRANSFORM,

  /* Per pipeline fragment hooks */
  SHELL_SNIPPET_HOOK_FRAGMENT = 2048,

  /* Per layer vertex hooks */
  SHELL_SNIPPET_HOOK_TEXTURE_COORD_TRANSFORM = 4096,

  /* Per layer fragment hooks */
  SHELL_SNIPPET_HOOK_LAYER_FRAGMENT = 6144,
  SHELL_SNIPPET_HOOK_TEXTURE_LOOKUP
} ShellSnippetHook;

#define SHELL_TYPE_GLSL_EFFECT (shell_glsl_effect_get_type ())
G_DECLARE_DERIVABLE_TYPE (ShellGLSLEffect, shell_glsl_effect,
                          SHELL, GLSL_EFFECT, ClutterOffscreenEffect)

struct _ShellGLSLEffectClass
{
  ClutterOffscreenEffectClass parent_class;

  CoglPipeline *base_pipeline;

  void (*build_pipeline) (ShellGLSLEffect *effect);
};

void shell_glsl_effect_add_glsl_snippet (ShellGLSLEffect  *effect,
                                         ShellSnippetHook  hook,
                                         const char       *declarations,
                                         const char       *code,
                                         gboolean          is_replace);

int  shell_glsl_effect_get_uniform_location (ShellGLSLEffect *effect,
                                             const char      *name);
void shell_glsl_effect_set_uniform_float    (ShellGLSLEffect *effect,
                                             int              uniform,
                                             int              n_components,
                                             int              total_count,
                                             const float     *value);
void shell_glsl_effect_set_uniform_matrix   (ShellGLSLEffect *effect,
                                             int              uniform,
                                             gboolean         transpose,
                                             int              dimensions,
                                             int              total_count,
                                             const float     *value);

#endif /* __SHELL_GLSL_EFFECT_H__ */