summaryrefslogtreecommitdiff
path: root/src/glamor_gl_dispatch.h
blob: 76dadd49ecb1f7ed3768a74e979d821a53e90e0a (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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
typedef struct glamor_gl_dispatch {
	/* Transformation functions */
	void (*glMatrixMode) (GLenum mode);
	void (*glLoadIdentity) (void);
	void (*glViewport) (GLint x, GLint y, GLsizei width,
			    GLsizei height);
	/* Drawing functions */
	void (*glRasterPos2i) (GLint x, GLint y);

	/* Vertex Array */
	void (*glDrawArrays) (GLenum mode, GLint first, GLsizei count);

	/* Elements Array*/
	void (*glDrawElements) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);
	void (*glDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices);

	/* Raster functions */
	void (*glReadPixels) (GLint x, GLint y,
			      GLsizei width, GLsizei height,
			      GLenum format, GLenum type, GLvoid * pixels);

	void (*glDrawPixels) (GLsizei width, GLsizei height,
			      GLenum format, GLenum type,
			      const GLvoid * pixels);
	void (*glPixelStorei) (GLenum pname, GLint param);
	/* Texture Mapping */

	void (*glTexParameteri) (GLenum target, GLenum pname, GLint param);
	void (*glTexImage2D) (GLenum target, GLint level,
			      GLint internalFormat,
			      GLsizei width, GLsizei height,
			      GLint border, GLenum format, GLenum type,
			      const GLvoid * pixels);
	/* 1.1 */
	void (*glGenTextures) (GLsizei n, GLuint * textures);
	void (*glDeleteTextures) (GLsizei n, const GLuint * textures);
	void (*glBindTexture) (GLenum target, GLuint texture);
	void (*glTexSubImage2D) (GLenum target, GLint level,
				 GLint xoffset, GLint yoffset,
				 GLsizei width, GLsizei height,
				 GLenum format, GLenum type,
				 const GLvoid * pixels);
	/* MISC */
	void (*glFlush) (void);
	void (*glFinish) (void);
	void (*glGetIntegerv) (GLenum pname, GLint * params);
	const GLubyte *(*glGetString) (GLenum name);
	void (*glScissor) (GLint x, GLint y, GLsizei width,
			   GLsizei height);
	void (*glEnable) (GLenum cap);
	void (*glDisable) (GLenum cap);
	void (*glBlendFunc) (GLenum sfactor, GLenum dfactor);
	void (*glLogicOp) (GLenum opcode);

	/* 1.3 */
	void (*glActiveTexture) (GLenum texture);

	/* GL Extentions */
	void (*glGenBuffers) (GLsizei n, GLuint * buffers);
	void (*glBufferData) (GLenum target, GLsizeiptr size,
			      const GLvoid * data, GLenum usage);
	GLvoid *(*glMapBuffer) (GLenum target, GLenum access);
	GLvoid *(*glMapBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);
	GLboolean (*glUnmapBuffer) (GLenum target);
	void (*glBindBuffer) (GLenum target, GLuint buffer);
	void (*glDeleteBuffers) (GLsizei n, const GLuint * buffers);

	void (*glFramebufferTexture2D) (GLenum target, GLenum attachment,
					GLenum textarget, GLuint texture,
					GLint level);
	void (*glBindFramebuffer) (GLenum target, GLuint framebuffer);
	void (*glDeleteFramebuffers) (GLsizei n,
				      const GLuint * framebuffers);
	void (*glGenFramebuffers) (GLsizei n, GLuint * framebuffers);
	GLenum (*glCheckFramebufferStatus) (GLenum target);
	void (*glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1,
				   GLint srcY1, GLint dstX0, GLint dstY0,
				   GLint dstX1, GLint dstY1,
				   GLbitfield mask, GLenum filter);

	void (*glVertexAttribPointer) (GLuint index, GLint size,
				       GLenum type, GLboolean normalized,
				       GLsizei stride,
				       const GLvoid * pointer);
	void (*glDisableVertexAttribArray) (GLuint index);
	void (*glEnableVertexAttribArray) (GLuint index);
	void (*glBindAttribLocation) (GLuint program, GLuint index,
				      const GLchar * name);

	void (*glLinkProgram) (GLuint program);
	void (*glShaderSource) (GLuint shader, GLsizei count,
				const GLchar * *string,
				const GLint * length);
	void (*glUseProgram) (GLuint program);
	void (*glUniform1i) (GLint location, GLint v0);
	void (*glUniform1f) (GLint location, GLfloat v0);
	void (*glUniform4f) (GLint location, GLfloat v0, GLfloat v1,
			     GLfloat v2, GLfloat v3);
	void (*glUniform1fv) (GLint location, GLsizei count,
			      const GLfloat * value);
	void (*glUniform2fv) (GLint location, GLsizei count,
			      const GLfloat * value);
	void (*glUniform4fv) (GLint location, GLsizei count,
			      const GLfloat * value);
	void (*glUniformMatrix3fv) (GLint location, GLsizei count,
		           GLboolean transpose, const GLfloat* value);
	GLuint (*glCreateProgram) (void);
	GLuint (*glDeleteProgram) (GLuint);
	GLuint (*glCreateShader) (GLenum type);
	void (*glCompileShader) (GLuint shader);
	void (*glAttachShader) (GLuint program, GLuint shader);
	void (*glDeleteShader) (GLuint shader);
	void (*glGetShaderiv) (GLuint shader, GLenum pname,
			       GLint * params);
	void (*glGetShaderInfoLog) (GLuint shader, GLsizei bufSize,
				    GLsizei * length, GLchar * infoLog);
	void (*glGetProgramiv) (GLuint program, GLenum pname,
				GLint * params);
	void (*glGetProgramInfoLog) (GLuint program, GLsizei bufSize,
				     GLsizei * length, GLchar * infoLog);
	GLint (*glGetUniformLocation) (GLuint program,
				       const GLchar * name);

} glamor_gl_dispatch;


typedef void *(*get_proc_address_t) (const char *);

_X_EXPORT Bool
glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch,
			     int gl_version,
			     get_proc_address_t get_proc_address);


_X_EXPORT Bool
glamor_gl_dispatch_init(ScreenPtr screen,
			struct glamor_gl_dispatch *dispatch,
			int gl_version);