amino
Lightweight Robot Utility Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
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 
45 /* DESIGN
46  * ======
47  *
48  * - Per-frame GL arrays
49  * - vertices
50  * - colors
51  * - indices
52  * - Initially create per-frame VBOs
53  * - Initially compile shaders
54  *
55  *
56  */
57 
58 
60 //struct aa_rx_sg;
61 
65 struct aa_gl_globals;
66 
67 
76 AA_API void
77 aa_rx_sg_gl_init( struct aa_rx_sg *sg );
78 
95 AA_API void
97  const struct aa_rx_sg *scenegraph,
98  const struct aa_gl_globals *globals,
99  size_t n_TF, const double *TF_abs, size_t ld_TF);
100 
104 AA_API void
105 aa_gl_qutr2glmat( const double E[AA_RESTRICT 7],
106  GLfloat M[AA_RESTRICT 16] );
107 
111 AA_API void
112 aa_gl_tfmat2glmat( const double T[AA_RESTRICT 12],
113  GLfloat M[AA_RESTRICT 16] );
114 
118 AA_API void
119 aa_gl_mat_perspective( double fovy,
120  double aspect,
121  double znear, double zfar,
122  GLfloat M[16] );
123 
128  GLenum shader_type, const char* source );
129 
130 
134 AA_API GLuint aa_gl_create_program(GLuint vert_shader, GLuint frag_shader);
135 
136 
140 AA_API void aa_gl_init();
141 
142 
147 AA_API struct aa_gl_globals *
149 
154 AA_API void
155 aa_gl_globals_destroy( struct aa_gl_globals *globals );
156 
160 AA_API void
162  struct aa_gl_globals *globals,
163  const double world_E_camera[7]);
164 
168 AA_API void
170  struct aa_gl_globals *globals,
171  const double world_E_camera_home[7]);
172 
176 AA_API void
178  struct aa_gl_globals *globals );
179 
183 AA_API void
185  struct aa_gl_globals *globals,
186  const double world_v_light[3]);
187 
191 AA_API void
193  struct aa_gl_globals *globals,
194  double aspect );
195 
199 AA_API void
201  struct aa_gl_globals *globals,
202  double fovy,
203  double aspect,
204  double znear,
205  double zfar );
206 
210 AA_API void
212  struct aa_gl_globals *globals,
213  const double color[3] );
214 
218 AA_API void
220  struct aa_gl_globals *globals,
221  double power );
222 
226 AA_API void
228  struct aa_gl_globals *globals,
229  const double ambient[3] );
230 
234 AA_API void
236  struct aa_gl_globals *globals,
237  int show_visual );
238 
239 AA_API void
240 aa_gl_globals_unmask_all( struct aa_gl_globals *globals );
241 
242 AA_API int
243 aa_gl_globals_is_masked( const struct aa_gl_globals *globals, size_t i );
244 
245 AA_API void
246 aa_gl_globals_mask( struct aa_gl_globals *globals, size_t i, int value );
247 
251 AA_API void
253  struct aa_gl_globals *globals,
254  int show_collision );
255 
259 struct aa_sg_gl_buffers;
260 
265  struct aa_rx_geom *geom
266  );
267 
268 
269 struct aa_gl_buffers;
270 
277 AA_API void
278 aa_gl_buffers_destroy( struct aa_gl_buffers *buffers );
279 
285 AA_API void
286 aa_gl_buffers_schedule_destroy( struct aa_gl_buffers *buffers );
287 
294 AA_API void
295 aa_gl_buffers_cleanup( void );
296 
297 #endif /*AMINO_RX_SCENE_GL_H*/
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 GLuint aa_gl_create_program(GLuint vert_shader, GLuint frag_shader)
Create a GLSL program and attach shaders.
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 void aa_gl_mat_perspective(double fovy, double aspect, double znear, double zfar, GLfloat M[16])
Create a OpenGL matrix for a perspective transform.
Container for scene geometry.
Definition: rxtype.h:55
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_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_destroy(struct aa_gl_globals *globals)
Destroy a aa_gl_globals struct.
AA_API void aa_geom_gl_buffers_init(struct aa_rx_geom *geom)
Initialize OpenGL buffers for geometry object.
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_light_power(struct aa_gl_globals *globals, double power)
Set the power (intensity) of the light.
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_show_visual(struct aa_gl_globals *globals, int show_visual)
Set flag to enable render of visual geometry.
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.
Opaque type for a scene_graph.
AA_API GLuint aa_gl_create_shader(GLenum shader_type, const char *source)
Compile a shader from a text string.
AA_API void aa_gl_init()
Initialize GL engine.
#define AA_RESTRICT
Defined restrict keyword based on language flavor.
Definition: amino.h:90
AA_API struct aa_gl_globals * aa_gl_globals_create()
Container for globals rendering info (Forward declaration)
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_gl_buffers_cleanup(void)
Destroy previously schedule OpenGL buffers.
#define AA_API
calling and name mangling convention for functions
Definition: amino.h:86
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_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_buffers_destroy(struct aa_gl_buffers *buffers)
Destroy OpenGL buffers.
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_set_aspect(struct aa_gl_globals *globals, double aspect)
Set the camera aspect ratio.
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 void aa_gl_buffers_schedule_destroy(struct aa_gl_buffers *buffers)
Schedule destruction of OpenGL buffers.