~ubuntu-branches/ubuntu/quantal/gstreamer-vaapi/quantal

« back to all changes in this revision

Viewing changes to gst-libs/gst/vaapi/gstvaapiutils_glx.h

  • Committer: Package Import Robot
  • Author(s): Timo Aaltonen
  • Date: 2012-02-10 14:35:09 UTC
  • Revision ID: package-import@ubuntu.com-20120210143509-wq9j8uqb5leu1iik
Tags: upstream-0.3.4
ImportĀ upstreamĀ versionĀ 0.3.4

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  gstvaapiutils_glx.h - GLX utilties
 
3
 *
 
4
 *  Copyright (C) 2010-2011 Splitted-Desktop Systems
 
5
 *
 
6
 *  This library is free software; you can redistribute it and/or
 
7
 *  modify it under the terms of the GNU Lesser General Public License
 
8
 *  as published by the Free Software Foundation; either version 2.1
 
9
 *  of the License, or (at your option) any later version.
 
10
 *
 
11
 *  This library is distributed in the hope that it will be useful,
 
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
 *  Lesser General Public License for more details.
 
15
 *
 
16
 *  You should have received a copy of the GNU Lesser General Public
 
17
 *  License along with this library; if not, write to the Free
 
18
 *  Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
19
 *  Boston, MA 02110-1301 USA
 
20
 */
 
21
 
 
22
#ifndef GST_VAAPI_UTILS_GLX_H
 
23
#define GST_VAAPI_UTILS_GLX_H
 
24
 
 
25
#include "config.h"
 
26
#include <GL/gl.h>
 
27
#include <GL/glext.h>
 
28
#include <GL/glx.h>
 
29
#include <GL/glxext.h>
 
30
#include <glib/gtypes.h>
 
31
 
 
32
#if GLX_GLXEXT_VERSION < 18
 
33
typedef void (*PFNGLXBINDTEXIMAGEEXTPROC)(Display *, GLXDrawable, int, const int *);
 
34
typedef void (*PFNGLXRELEASETEXIMAGEEXTPROC)(Display *, GLXDrawable, int);
 
35
#endif
 
36
 
 
37
#if GLX_GLXEXT_VERSION < 27
 
38
/* XXX: this is not exactly that version but this is the only means to
 
39
   make sure we have the correct <GL/glx.h> with those signatures */
 
40
typedef GLXPixmap (*PFNGLXCREATEPIXMAPPROC)(Display *, GLXFBConfig, Pixmap, const int *);
 
41
typedef void (*PFNGLXDESTROYPIXMAPPROC)(Display *, GLXPixmap);
 
42
#endif
 
43
 
 
44
#ifndef GL_FRAMEBUFFER_BINDING
 
45
#define GL_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING_EXT
 
46
#endif
 
47
 
 
48
const char *
 
49
gl_get_error_string(GLenum error)
 
50
    attribute_hidden;
 
51
 
 
52
void
 
53
gl_purge_errors(void)
 
54
    attribute_hidden;
 
55
 
 
56
gboolean
 
57
gl_check_error(void)
 
58
    attribute_hidden;
 
59
 
 
60
gboolean
 
61
gl_get_param(GLenum param, guint *pval)
 
62
    attribute_hidden;
 
63
 
 
64
gboolean
 
65
gl_get_texture_param(GLenum target, GLenum param, guint *pval)
 
66
    attribute_hidden;
 
67
 
 
68
void
 
69
gl_set_bgcolor(guint32 color)
 
70
    attribute_hidden;
 
71
 
 
72
void
 
73
gl_resize(guint width, guint height)
 
74
    attribute_hidden;
 
75
 
 
76
typedef struct _GLContextState GLContextState;
 
77
struct _GLContextState {
 
78
    Display     *display;
 
79
    Window       window;
 
80
    XVisualInfo *visual;
 
81
    GLXContext   context;
 
82
    guint        swapped_buffers : 1;
 
83
};
 
84
 
 
85
GLContextState *
 
86
gl_create_context(Display *dpy, int screen, GLContextState *parent)
 
87
    attribute_hidden;
 
88
 
 
89
void
 
90
gl_destroy_context(GLContextState *cs)
 
91
    attribute_hidden;
 
92
 
 
93
void
 
94
gl_get_current_context(GLContextState *cs)
 
95
    attribute_hidden;
 
96
 
 
97
gboolean
 
98
gl_set_current_context(GLContextState *new_cs, GLContextState *old_cs)
 
99
    attribute_hidden;
 
100
 
 
101
void
 
102
gl_swap_buffers(GLContextState *cs)
 
103
    attribute_hidden;
 
104
 
 
105
typedef struct _GLTextureState GLTextureState;
 
106
struct _GLTextureState {
 
107
    GLenum      target;
 
108
    GLuint      old_texture;
 
109
    guint       was_enabled     : 1;
 
110
    guint       was_bound       : 1;
 
111
};
 
112
 
 
113
gboolean
 
114
gl_bind_texture(GLTextureState *ts, GLenum target, GLuint texture)
 
115
    attribute_hidden;
 
116
 
 
117
void
 
118
gl_unbind_texture(GLTextureState *ts)
 
119
    attribute_hidden;
 
120
 
 
121
GLuint
 
122
gl_create_texture(GLenum target, GLenum format, guint width, guint height)
 
123
    attribute_hidden;
 
124
 
 
125
typedef struct _GLVTable GLVTable;
 
126
struct _GLVTable {
 
127
    PFNGLXCREATEPIXMAPPROC              glx_create_pixmap;
 
128
    PFNGLXDESTROYPIXMAPPROC             glx_destroy_pixmap;
 
129
    PFNGLXBINDTEXIMAGEEXTPROC           glx_bind_tex_image;
 
130
    PFNGLXRELEASETEXIMAGEEXTPROC        glx_release_tex_image;
 
131
    PFNGLGENFRAMEBUFFERSEXTPROC         gl_gen_framebuffers;
 
132
    PFNGLDELETEFRAMEBUFFERSEXTPROC      gl_delete_framebuffers;
 
133
    PFNGLBINDFRAMEBUFFEREXTPROC         gl_bind_framebuffer;
 
134
    PFNGLGENRENDERBUFFERSEXTPROC        gl_gen_renderbuffers;
 
135
    PFNGLDELETERENDERBUFFERSEXTPROC     gl_delete_renderbuffers;
 
136
    PFNGLBINDRENDERBUFFEREXTPROC        gl_bind_renderbuffer;
 
137
    PFNGLRENDERBUFFERSTORAGEEXTPROC     gl_renderbuffer_storage;
 
138
    PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC gl_framebuffer_renderbuffer;
 
139
    PFNGLFRAMEBUFFERTEXTURE2DEXTPROC    gl_framebuffer_texture_2d;
 
140
    PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC  gl_check_framebuffer_status;
 
141
    PFNGLGENPROGRAMSARBPROC             gl_gen_programs;
 
142
    PFNGLDELETEPROGRAMSARBPROC          gl_delete_programs;
 
143
    PFNGLBINDPROGRAMARBPROC             gl_bind_program;
 
144
    PFNGLPROGRAMSTRINGARBPROC           gl_program_string;
 
145
    PFNGLGETPROGRAMIVARBPROC            gl_get_program_iv;
 
146
    PFNGLPROGRAMLOCALPARAMETER4FVARBPROC gl_program_local_parameter_4fv;
 
147
    PFNGLACTIVETEXTUREPROC              gl_active_texture;
 
148
    PFNGLMULTITEXCOORD2FPROC            gl_multi_tex_coord_2f;
 
149
    guint                               has_texture_from_pixmap : 1;
 
150
    guint                               has_framebuffer_object  : 1;
 
151
    guint                               has_fragment_program    : 1;
 
152
    guint                               has_multitexture        : 1;
 
153
};
 
154
 
 
155
GLVTable *
 
156
gl_get_vtable(void)
 
157
    attribute_hidden;
 
158
 
 
159
typedef struct _GLPixmapObject GLPixmapObject;
 
160
struct _GLPixmapObject {
 
161
    Display        *dpy;
 
162
    GLenum          target;
 
163
    GLuint          texture;
 
164
    GLTextureState  old_texture;
 
165
    guint           width;
 
166
    guint           height;
 
167
    Pixmap          pixmap;
 
168
    GLXPixmap       glx_pixmap;
 
169
    guint           is_bound    : 1;
 
170
};
 
171
 
 
172
GLPixmapObject *
 
173
gl_create_pixmap_object(Display *dpy, guint width, guint height)
 
174
    attribute_hidden;
 
175
 
 
176
void
 
177
gl_destroy_pixmap_object(GLPixmapObject *pixo)
 
178
    attribute_hidden;
 
179
 
 
180
gboolean
 
181
gl_bind_pixmap_object(GLPixmapObject *pixo)
 
182
    attribute_hidden;
 
183
 
 
184
gboolean
 
185
gl_unbind_pixmap_object(GLPixmapObject *pixo)
 
186
    attribute_hidden;
 
187
 
 
188
typedef struct _GLFramebufferObject GLFramebufferObject;
 
189
struct _GLFramebufferObject {
 
190
    guint           width;
 
191
    guint           height;
 
192
    GLuint          fbo;
 
193
    GLuint          old_fbo;
 
194
    guint           is_bound    : 1;
 
195
};
 
196
 
 
197
GLFramebufferObject *
 
198
gl_create_framebuffer_object(
 
199
    GLenum target,
 
200
    GLuint texture,
 
201
    guint  width,
 
202
    guint  height
 
203
) attribute_hidden;
 
204
 
 
205
void
 
206
gl_destroy_framebuffer_object(GLFramebufferObject *fbo)
 
207
    attribute_hidden;
 
208
 
 
209
gboolean
 
210
gl_bind_framebuffer_object(GLFramebufferObject *fbo)
 
211
    attribute_hidden;
 
212
 
 
213
gboolean
 
214
gl_unbind_framebuffer_object(GLFramebufferObject *fbo)
 
215
    attribute_hidden;
 
216
 
 
217
#endif /* GST_VAAPI_UTILS_GLX_H */