amino  1.0-beta2
Lightweight Robot Utility Library
scene_gl.h
Go to the documentation of this file.
1 /* -*- mode: C; c-basic-offset: 4; -*- */
2 /* ex: set shiftwidth=4 tabstop=4 expandtab: */
3 /*
4  * Copyright (c) 2015, Rice University
5  * All rights reserved.
6  *
7  * Author(s): Neil T. Dantam <ntd@rice.edu>
8  *
9  * Redistribution and use in source and binary forms, with or
10  * without modification, are permitted provided that the following
11  * conditions are met:
12  * * Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * * Redistributions in binary form must reproduce the above
15  * copyright notice, this list of conditions and the following
16  * disclaimer in the documentation and/or other materials provided
17  * with the distribution.
18  * * Neither the name of copyright holder the names of its
19  * contributors may be used to endorse or promote products derived
20  * from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
23  * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
24  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
27  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
28  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
29  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
30  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
31  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
33  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  */
37 
38 #ifndef AMINO_RX_SCENE_GL_H
39 #define AMINO_RX_SCENE_GL_H
40 
41 #include <SDL_opengl.h>
42 
48 /* DESIGN
49  * ======
50  *
51  * - Per-frame GL arrays
52  * - vertices
53  * - colors
54  * - indices
55  * - Initially create per-frame VBOs
56  * - Initially compile shaders
57  *
58  *
59  */
60 
61 
63 //struct aa_rx_sg;
64 
68 struct aa_gl_globals;
69 
70 
79 AA_API void
80 aa_rx_sg_gl_init( struct aa_rx_sg *sg );
81 
98 AA_API void
100  const struct aa_rx_sg *scenegraph,
101  const struct aa_gl_globals *globals,
102  size_t n_TF, const double *TF_abs, size_t ld_TF);
103 
107 AA_API void
108 aa_gl_qutr2glmat( const double E[AA_RESTRICT 7],
109  GLfloat M[AA_RESTRICT 16] );
110 
114 AA_API void
115 aa_gl_tfmat2glmat( const double T[AA_RESTRICT 12],
116  GLfloat M[AA_RESTRICT 16] );
117 
121 AA_API void
123  double aspect,
124  double znear, double zfar,
125  GLfloat M[16] );
126 
131  GLenum shader_type, const char* source );
132 
133 
137 AA_API GLuint aa_gl_create_program(GLuint vert_shader, GLuint frag_shader);
138 
139 
144 
145 
150 AA_API struct aa_gl_globals *
152 
157 AA_API void
158 aa_gl_globals_destroy( struct aa_gl_globals *globals );
159 
163 AA_API void
165  struct aa_gl_globals *globals,
166  const double world_E_camera[7]);
167 
171 AA_API void
173  struct aa_gl_globals *globals,
174  const double world_E_camera_home[7]);
175 
179 AA_API void
181  struct aa_gl_globals *globals );
182 
186 AA_API void
188  struct aa_gl_globals *globals,
189  const double world_v_light[3]);
190 
194 AA_API void
196  struct aa_gl_globals *globals,
197  double aspect );
198 
202 AA_API void
204  struct aa_gl_globals *globals,
205  double fovy,
206  double aspect,
207  double znear,
208  double zfar );
209 
213 AA_API void
215  struct aa_gl_globals *globals,
216  const double color[3] );
217 
221 AA_API void
223  struct aa_gl_globals *globals,
224  double power );
225 
229 AA_API void
231  struct aa_gl_globals *globals,
232  const double ambient[3] );
233 
237 AA_API void
239  struct aa_gl_globals *globals,
240  int show_visual );
241 
245 AA_API void
247  struct aa_gl_globals *globals,
248  int show_collision );
249 
253 AA_API void
254 aa_gl_globals_unmask_all( struct aa_gl_globals *globals );
255 
260 AA_API int
261 aa_gl_globals_is_masked( const struct aa_gl_globals *globals, size_t i );
262 
268 AA_API void
269 aa_gl_globals_mask( struct aa_gl_globals *globals, size_t i, int value );
270 
271 
275 struct aa_sg_gl_buffers;
276 
281  struct aa_rx_geom *geom
282  );
283 
284 struct aa_gl_buffers;
285 
292 AA_API void
293 aa_gl_buffers_destroy( struct aa_gl_buffers *buffers );
294 
300 AA_API void
301 aa_gl_buffers_schedule_destroy( struct aa_gl_buffers *buffers );
302 
309 AA_API void
311 
312 
316 AA_API const char *
317 aa_gl_error_string( GLenum error );
318 
319 #endif /*AMINO_RX_SCENE_GL_H*/
#define AA_API
calling and name mangling convention for functions
Definition: amino.h:95
#define AA_RESTRICT
Defined restrict keyword based on language flavor.
Definition: amino.h:99
AA_API void aa_gl_qutr2glmat(const double E[AA_RESTRICT 7], GLfloat M[AA_RESTRICT 16])
Convert a quaternion-translation to an OpenGL matrix.
AA_API void aa_gl_tfmat2glmat(const double T[AA_RESTRICT 12], GLfloat M[AA_RESTRICT 16])
Convert a condensed transformation matrix to an OpenGL matrix.
AA_API GLuint aa_gl_create_shader(GLenum shader_type, const char *source)
Compile a shader from a text string.
AA_API struct aa_gl_globals * aa_gl_globals_create()
Container for globals rendering info (Forward declaration)
AA_API void aa_gl_globals_set_light_power(struct aa_gl_globals *globals, double power)
Set the power (intensity) of the light.
AA_API int aa_gl_globals_is_masked(const struct aa_gl_globals *globals, size_t i)
Return the display mask value of the i'th frame.
AA_API void aa_gl_mat_perspective(double fovy, double aspect, double znear, double zfar, GLfloat M[16])
Create a OpenGL matrix for a perspective transform.
AA_API void aa_gl_globals_set_light_position(struct aa_gl_globals *globals, const double world_v_light[3])
Set the position of the light.
AA_API void aa_gl_buffers_schedule_destroy(struct aa_gl_buffers *buffers)
Schedule destruction of OpenGL buffers.
AA_API void aa_gl_init()
Initialize GL engine.
AA_API void aa_gl_globals_set_light_color(struct aa_gl_globals *globals, const double color[3])
Set the color of the light.
AA_API GLuint aa_gl_create_program(GLuint vert_shader, GLuint frag_shader)
Create a GLSL program and attach shaders.
AA_API void aa_gl_buffers_destroy(struct aa_gl_buffers *buffers)
Destroy OpenGL buffers.
AA_API void aa_gl_globals_mask(struct aa_gl_globals *globals, size_t i, int value)
Set the display mask value of the i'th frame to ‘value’.
AA_API void aa_gl_buffers_cleanup(void)
Destroy previously schedule OpenGL buffers.
AA_API void aa_gl_globals_unmask_all(struct aa_gl_globals *globals)
Set the display mask value of all frames to false.
AA_API void aa_gl_globals_set_show_collision(struct aa_gl_globals *globals, int show_collision)
Set flag to enable render of collision geometry.
AA_API void aa_gl_globals_home_camera(struct aa_gl_globals *globals)
Set the camera transform to its "home" value.
AA_API void aa_gl_globals_set_camera_home(struct aa_gl_globals *globals, const double world_E_camera_home[7])
Set the camera "home" transform.
AA_API void aa_geom_gl_buffers_init(struct aa_rx_geom *geom)
Initialize OpenGL buffers for geometry object.
AA_API const char * aa_gl_error_string(GLenum error)
Return a string describing the error.
AA_API void aa_rx_sg_render(const struct aa_rx_sg *scenegraph, const struct aa_gl_globals *globals, size_t n_TF, const double *TF_abs, size_t ld_TF)
Render the scene graph to the current GL context.
AA_API void aa_gl_globals_set_camera(struct aa_gl_globals *globals, const double world_E_camera[7])
Set the camera transform.
AA_API void aa_gl_globals_set_ambient(struct aa_gl_globals *globals, const double ambient[3])
Set the light ambient color.
AA_API void aa_gl_globals_destroy(struct aa_gl_globals *globals)
Destroy a aa_gl_globals struct.
AA_API void aa_gl_globals_set_perspective(struct aa_gl_globals *globals, double fovy, double aspect, double znear, double zfar)
Set the camera perspective matrix.
AA_API void aa_gl_globals_set_show_visual(struct aa_gl_globals *globals, int show_visual)
Set flag to enable render of visual geometry.
AA_API void aa_rx_sg_gl_init(struct aa_rx_sg *sg)
Initialize OpenGL objects in scene graph.
AA_API void aa_gl_globals_set_aspect(struct aa_gl_globals *globals, double aspect)
Set the camera aspect ratio.
Container for scene geometry.
Definition: rxtype.h:63
Opaque type for a scene_graph.