atomes 1.3.1
atomes: an atomic scale modeling tool box
Loading...
Searching...
No Matches
ogl_draw.c
Go to the documentation of this file.
1/* This file is part of the 'atomes' software
2
3'atomes' is free software: you can redistribute it and/or modify it under the terms
4of the GNU Affero General Public License as published by the Free Software Foundation,
5either version 3 of the License, or (at your option) any later version.
6
7'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
8without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9See the GNU General Public License for more details.
10
11You should have received a copy of the GNU Affero General Public License along with 'atomes'.
12If not, see <https://www.gnu.org/licenses/>
13
14Copyright (C) 2022-2026 by CNRS and University of Strasbourg */
15
21
22/*
23* This file: 'ogl_draw.c'
24*
25* Contains:
26*
27
28 - The OpenGL window drawing funcions
29
30*
31* List of functions:
32
33 void print_matrices ();
34 void setup_camera ();
35 void unrotate_camera ();
36 void duplicate_fog (Fog * new_fog, Fog * old_fog);
37 void duplicate_material (Material * new_mat, Material * old_mat);
38 void duplicate_material_and_lightning (image * new_img, image * old_img);
39 void duplicate_screen_label (screen_label * new_lab, screen_label * old_lab);
40 void add_image ();
41 void at_shift (atom * at, float * shift);
42 void at_unshift (atom * at, float * shift);
43 void draw (glwin * view);
44
45 screen_string * duplicate_screen_string (screen_string * old_s);
46
47 atom * duplicate_atom (atom * at);
48 atom * free_atom (atom * at);
49
50 image * duplicate_image (image * old_img);
51
52*/
53
54#include "global.h"
55#include "glview.h"
56#include "dlp_field.h"
57#include "preferences.h"
58#include <time.h>
59
60extern ColRGBA init_color (int id, int numid);
61extern Light ** copy_light_sources (int dima, int dimb, Light ** old_sp);
63double x, y, z;
64GLUquadricObj * quadric;
73int qual;
76int step;
77
78extern int nbs, nbl;
79extern void create_atom_lists (gboolean to_pick);
80extern int create_bond_lists (gboolean to_pick);
81extern int create_selection_lists ();
82extern void create_poly_lists ();
83extern void create_ring_lists ();
84extern int create_box_lists (int b_step);
85extern int create_axis_lists ();
86extern int create_pick_lists ();
87extern int create_label_lists ();
88extern void create_measures_lists ();
89extern void create_light_lists ();
90extern void create_slab_lists (project * this_proj);
91extern void create_volumes_lists ();
92extern void create_background_lists ();
93
100{
101 g_debug ("*** Print Matrices ***");
102 g_debug ("\n");
103 g_debug (":: MODEL_MATRIX");
104 m4_print (wingl -> model_matrix);
105 g_debug ("\n");
106 g_debug (":: VIEW_MATRIX");
107 m4_print (wingl -> view_matrix);
108 g_debug ("\n");
109 g_debug (":: MODEL_VIEW_MATRIX");
110 m4_print (wingl -> model_view_matrix);
111 g_debug ("\n");
112 g_debug (":: NORMAL_MATRIX");
113 m4_print (wingl -> normal_matrix);
114 g_debug ("\n");
115 g_debug (":: PROJECTION_MATRIX");
116 m4_print (wingl -> projection_matrix);
117 g_debug ("\n");
118 g_debug (":: PROJECTION_MODEL_VIEW_MATRIX");
119 m4_print (wingl -> proj_model_view_matrix);
120}
121
128{
129 wingl -> model_position = vec3 (0.0, 0.0, -plot -> p_depth);
130 wingl -> model_matrix = m4_translation (wingl -> model_position);
131 wingl -> proj_model_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_matrix);
132 wingl -> view_matrix = m4_quat_rotation (plot -> rotation_quaternion);
133 vec4_t quat;
134 quat = plot -> rotation_quaternion;
135 quat.z = - quat.z;
136 wingl -> un_view_matrix = m4_quat_rotation (quat);
137 wingl -> model_view_matrix = m4_mul (wingl -> model_matrix, wingl -> view_matrix);
138 wingl -> normal_matrix = m4_transpose (m4_invert_affine(wingl -> model_matrix));
139 wingl -> proj_model_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_view_matrix);
140 wingl -> proj_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> view_matrix);
141 wingl -> view_model_matrix = m4_mul (wingl -> view_matrix, wingl -> model_matrix);
142 // print_matrices();
143}
144
151{
152 vec4_t quat;
153 quat = plot -> rotation_quaternion;
154 quat.z = - quat.z;
155 wingl -> model_view_matrix = m4_mul (wingl -> model_view_matrix, m4_quat_rotation (quat));
156}
157
166{
167 screen_string * new_s = g_malloc0(sizeof*new_s);
168 new_s -> word = g_strdup_printf ("%s", old_s -> word);
169 new_s -> col = old_s -> col;
170 int i;
171 for (i=0; i<3; i++) new_s -> shift[i] = old_s -> shift[i];
172 new_s -> num_instances = old_s -> num_instances;
173 new_s -> instances = duplicate_float (old_s -> num_instances, old_s -> instances);
174 new_s -> prev = NULL;
175 new_s -> last = NULL;
176 return new_s;
177}
178
188void duplicate_material (Material * new_mat, Material * old_mat)
189{
190 new_mat -> predefine = old_mat -> predefine;
191 new_mat -> albedo = old_mat -> albedo;
192 int i;
193 for (i=0; i<6; i++) new_mat -> param[i] = old_mat -> param[i];
194}
195
205void duplicate_fog (Fog * new_fog, Fog * old_fog)
206{
207 new_fog -> mode = old_fog -> mode;
208 new_fog -> based = old_fog -> based;
209 new_fog -> density = old_fog -> density;
210 int i;
211 for (i=0; i<2; i++) new_fog -> depth[i] = old_fog -> depth[i];
212 new_fog -> color = old_fog -> color;
213}
214
224{
225 new_img -> quality = old_img -> quality;
226 new_img -> render = old_img -> render;
227 duplicate_material (& new_img -> m_terial, & old_img -> m_terial);
228 new_img -> l_ghtning.lights = old_img -> l_ghtning.lights;
229 new_img -> l_ghtning.spot = copy_light_sources (old_img -> l_ghtning.lights, old_img -> l_ghtning.lights, old_img -> l_ghtning.spot);
230 duplicate_fog (& new_img -> f_g, & old_img -> f_g);
231}
232
242{
243 screen_string * stmp_a, * stmp_b;
244
245 new_lab -> position = old_lab -> position;
246 new_lab -> render = old_lab -> render;
247 new_lab -> scale = old_lab -> scale;
248 new_lab -> font = g_strdup_printf ("%s", old_lab -> font);
249 new_lab -> color = NULL;
250 int i;
251 for (i=0; i<3; i++) new_lab -> shift[i] = old_lab -> shift[i];
252 new_lab -> n_colors = old_lab -> n_colors;
253 if (old_lab -> color != NULL)
254 {
255 new_lab -> color = duplicate_color (new_lab -> n_colors, old_lab -> color);
256 }
257 new_lab -> list = NULL;
258 if (old_lab -> list != NULL)
259 {
260 new_lab -> list = duplicate_screen_string (old_lab -> list);
261 new_lab -> list -> last = duplicate_screen_string (old_lab -> list -> last);
262 stmp_a = old_lab -> list -> last;
263 stmp_b = new_lab -> list -> last;
264 while (stmp_a -> prev != NULL)
265 {
266 stmp_b -> prev = duplicate_screen_string (stmp_a -> prev);
267 stmp_b -> prev -> last = stmp_b -> last;
268 stmp_a = stmp_a -> prev;
269 stmp_b = stmp_b -> prev;
270 }
271 }
272}
273
282{
283 int i, j, k, l, m;
284 image * new_img = g_malloc0(sizeof*new_img);
285
286 // This line will copy all the stuff that is not dynamically allocated
287 * new_img = * old_img;
288
289 new_img -> back = g_malloc0(sizeof*new_img -> back);
290 duplicate_background_data (new_img -> back, old_img -> back);
291 new_img -> xyz = g_malloc0(sizeof*new_img -> xyz);
292 duplicate_axis_data (new_img -> xyz, old_img -> xyz);
293 new_img -> abc = g_malloc0(sizeof*new_img -> abc);
294 duplicate_box_data (new_img -> abc, old_img -> abc);
295 j = proj_gl -> nspec;
296 for (i=0; i<2; i++)
297 {
298 new_img -> color_map[i] = old_img -> color_map[i];
299 new_img -> show_atom[i] = duplicate_bool(j, old_img -> show_atom[i]);
300 new_img -> show_label[i] = duplicate_bool(j, old_img -> show_label[i]);
301 }
302
303 new_img -> sphererad = duplicate_double(2*j, old_img -> sphererad);
304 new_img -> pointrad = duplicate_double(2*j, old_img -> pointrad);
305 new_img -> atomicrad = duplicate_double(2*j, old_img -> atomicrad);
306 new_img -> bondrad = g_malloc0(2*j*sizeof*new_img -> bondrad);
307 new_img -> linerad = g_malloc0(2*j*sizeof*new_img -> linerad);
308 new_img -> at_color = duplicate_color (2*j, old_img -> at_color);
309 for (i=0; i<2*j; i++)
310 {
311 new_img -> bondrad[i] = duplicate_double(2*j, old_img -> bondrad[i]);
312 new_img -> linerad[i] = duplicate_double(2*j, old_img -> linerad[i]);
313 }
314
315 for (i=0; i<10; i++)
316 {
317 if (old_img -> show_coord[i])
318 {
319 new_img -> show_coord[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_coord[i]);
320 }
321 if (i < 2 || (i > 3 && i < 9))
322 {
323 if (old_img -> show_poly[i])
324 {
325 new_img -> show_poly[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_poly[i]);
326 }
327 }
328 k = (i < 2) ? proj_gl -> nspec : 1;
329 if (old_img -> spcolor[i])
330 {
331 new_img -> spcolor[i] = g_malloc0(k*sizeof*new_img -> spcolor[i]);
332 for (j=0; j<k; j++)
333 {
334 new_img -> spcolor[i][j] = duplicate_color (coord_gl -> totcoord[i], old_img -> spcolor[i][j]);
335 }
336 }
337 }
338 new_img -> at_data = g_malloc0(proj_gl -> natomes*sizeof*new_img -> at_data);
339 for (i=0; i<proj_gl -> natomes; i++)
340 {
341 new_img -> at_data[i].show[0] = proj_gl -> atoms[step][i].show[0];
342 new_img -> at_data[i].show[1] = proj_gl -> atoms[step][i].show[1];
343 new_img -> at_data[i].label[0] = proj_gl -> atoms[step][i].label[0];
344 new_img -> at_data[i].label[1] = proj_gl -> atoms[step][i].label[1];
345 new_img -> at_data[i].pick[0] = proj_gl -> atoms[step][i].pick[0];
346 new_img -> at_data[i].cloned = proj_gl -> atoms[step][i].cloned;
347 new_img -> at_data[i].style = proj_gl -> atoms[step][i].style;
348 }
349
350 for (i=0; i<5; i++) duplicate_screen_label (& new_img -> labels[i], & old_img -> labels[i]);
351 duplicate_material_and_lightning (new_img, old_img);
352
353 // Atom selection
354 for (i=0; i<2; i++) new_img -> selected[i] = duplicate_ogl_selection (old_img -> selected[i]);
355
356 // Rings poly if any 'isolated'
357 if (wingl -> rings)
358 {
359 for (i=0; i<5; i++)
360 {
361 if (wingl -> ring_max[i])
362 {
363 m = 0;
364 for (j=0; j< coord_gl -> totcoord[i+4]; j++)
365 {
366 k = coord_gl -> geolist[i+4][0][j];
367 for (l=0; l<wingl -> num_rings[i][step][k-1]; l++)
368 {
369 if (wingl -> show_rpoly[i][step][k-1][l]) m++;
370 }
371 }
372 if (m)
373 {
374 new_img -> i_rings[i] = allocdint (m+1, 2);
375 new_img -> i_rings[i][0][0] = m;
376 m = 1;
377 for (j=0; j<coord_gl -> totcoord[i+4]; j++)
378 {
379 k = coord_gl -> geolist[i+4][0][j];
380 for (l=0; l<wingl -> num_rings[i][step][k-1]; l++)
381 {
382 if (wingl -> show_rpoly[i][step][k-1][l])
383 {
384 new_img -> i_rings[i][m][0] = j;
385 new_img -> i_rings[i][m][1] = l;
386 m ++;
387 }
388 }
389 }
390 }
391 }
392 }
393 }
394
395 // Volumes
396 if (wingl -> volumes)
397 {
398 for (i=0; i<2; i++)
399 {
400 for (j=0; j<FILLED_STYLES; j++)
401 {
402 new_img -> fm_show_vol[i][j] = duplicate_bool (coord_gl -> totcoord[2+i], old_img -> fm_show_vol[i][j]);
403 for (k=0; k<coord_gl -> totcoord[2+i]; k++)
404 {
405 new_img -> fm_vol_col[i][j][k] = old_img -> fm_vol_col[i][j][k];
406 }
407 }
408 }
409 }
410 return new_img;
411}
412
419{
420 snapshot * nextsnap = g_malloc0(sizeof*nextsnap);
421 nextsnap -> img = duplicate_image (plot);
422 // Now the pointers
423 if (wingl -> anim -> frames == 0)
424 {
425 wingl -> anim -> first -> prev = NULL;
426 wingl -> anim -> last = nextsnap;
427 wingl -> anim -> last -> prev = NULL;
428 wingl -> anim -> first = nextsnap;
429 }
430 else
431 {
432 wingl -> anim -> last -> next = nextsnap;
433 nextsnap -> prev = wingl -> anim -> last;
434 wingl -> anim -> last = wingl -> anim -> last -> next;
435 wingl -> anim -> last -> img -> id = wingl -> anim -> frames;
436 }
437 wingl -> anim -> frames ++;
438}
439
441
450{
451 atom * bt = g_malloc0(sizeof*bt);
452 bt -> x = at -> x;
453 bt -> y = at -> y;
454 bt -> z = at -> z;
455 bt -> sp = at -> sp;
456 bt -> id = at -> id;
457 bt -> style = at -> style;
458 bt -> cloned = at -> cloned;
459 int i;
460 for (i=0; i<2; i++)
461 {
462 bt -> show[i] = at -> show[i];
463 bt -> pick[i] = at -> pick[i];
464 bt -> label[i] = at -> label[i];
465 }
466 for (i=0; i<5; i++)
467 {
468 bt -> coord[i] = at -> coord[i];
469 }
470 bt -> numv = at -> numv;
471 bt -> fid = at -> fid;
472 bt -> faid = at -> faid;
473 if (bt -> numv) bt -> vois = duplicate_int (bt -> numv, at -> vois);
474 return bt;
475}
476
485{
486 if (at -> vois) g_free (at -> vois);
487 g_free (at);
488 return NULL;
489}
490
499void at_shift (atom * at, float * shift)
500{
501 at -> x += shift[0];
502 at -> y += shift[1];
503 at -> z += shift[2];
504}
505
514void at_unshift (atom * at, float * shift)
515{
516 at -> x -= shift[0];
517 at -> y -= shift[1];
518 at -> z -= shift[2];
519}
520
528void draw (glwin * view)
529{
530 wingl = view;
531 proj_gl = get_project_by_id(view -> proj);
532 proj_sp = proj_gl -> nspec;
533 proj_at = proj_gl -> natomes;
534 coord_gl = proj_gl -> coord;
535 cell_gl = & proj_gl -> cell;
536 plot = wingl -> anim -> last -> img;
537 qual = plot -> quality-1;
538 acolorm = plot -> color_map[0];
539 pcolorm = plot -> color_map[1];
540 step = plot -> step;
541 int box_step = (cell_gl -> npt) ? step : 0;
542 box_gl = & cell_gl -> box[box_step];
543
544/* #ifdef DEBUG
545 clock_gettime (CLOCK_MONOTONIC, & start_time);
546 GLuint GPU_time;
547 glGenQueries (1, & GPU_time);
548 glBeginQuery (GL_TIME_ELAPSED, GPU_time);
549// #endif */
550 // First, if needed, we prepare the display lists
551 if (proj_at)
552 {
553 if (wingl -> create_shaders[ATOMS] && wingl -> n_shaders[ATOMS][step] < 0) create_atom_lists (FALSE);
554 if (wingl -> create_shaders[BONDS] && wingl -> n_shaders[BONDS][step] < 0) wingl -> n_shaders[BONDS][step] = create_bond_lists (FALSE);
555 if (wingl -> create_shaders[SELEC] && wingl -> n_shaders[SELEC][step] < 0) wingl -> n_shaders[SELEC][step] = create_selection_lists ();
556 if (wingl -> create_shaders[POLYS] && wingl -> n_shaders[POLYS][step] < 0) create_poly_lists ();
557 if (wingl -> create_shaders[RINGS] && wingl -> n_shaders[RINGS][step] < 0) create_ring_lists ();
558 if (wingl -> create_shaders[PICKS] && ! atomes_render_image) wingl -> n_shaders[PICKS][0] = create_pick_lists ();
559 if (wingl -> create_shaders[SLABS]) create_slab_lists (proj_gl);
560 if (wingl -> create_shaders[VOLMS] && wingl -> n_shaders[VOLMS][step] < 0) create_volumes_lists ();
561 if (wingl -> create_shaders[LABEL]) wingl -> n_shaders[LABEL][0] = create_label_lists ();
562 if (wingl -> create_shaders[MEASU]) create_measures_lists ();
563 }
564 else
565 {
566 int i;
567 for (i=0; i<NGLOBAL_SHADERS; i++) cleaning_shaders (wingl, i);
568 if (plot -> back -> gradient) wingl -> create_shaders[BACKG] = TRUE;
569 }
570 if (plot -> back -> gradient && wingl -> create_shaders[BACKG]) create_background_lists ();
571 if (wingl -> create_shaders[MDBOX]) wingl -> n_shaders[MDBOX][box_step] = create_box_lists (box_step);
572 if (wingl -> create_shaders[MAXIS]) wingl -> n_shaders[MAXIS][0] = create_axis_lists ();
573 if (wingl -> create_shaders[LIGHT]) create_light_lists ();
574
575 setup_camera ();
576 // We draw normal scene or picking mode scene (only atoms or selection)
577
578 if (wingl -> to_pick)
579 {
580 // Picking mode scene
581 glDisable (GL_LIGHTING);
582 glClearColor (plot -> back -> color.red,
583 plot -> back -> color.green,
584 plot -> back -> color.blue,
585 1.0);
586 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
587
589
590 glEnable (GL_LIGHTING);
591 }
592 else
593 {
594 // Normal mode scene
595 glClearColor (plot -> back -> color.red,
596 plot -> back -> color.green,
597 plot -> back -> color.blue,
598 plot -> back -> color.alpha);
599 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
600
601 // Gradient background
603
604 // Box
606
607 // Now the atoms
609
610 // The bonds
612
613 // The selected atoms/bonds
615
616 int i = plot -> render;
617 plot -> render = FILL;
618
619 // Atom labels
621
622 // Axis if centered
623 if (view -> anim -> last -> img -> xyz -> t_pos == 4) draw_vertices (MAXIS);
624
625 // Last the coordination polyhedra
628
629 // Measures
631
632 // Slab
634
635 // Volumes
637
638 // Axis if not centered
639 if (view -> anim -> last -> img -> xyz -> t_pos != 4) draw_vertices (MAXIS);
640
641 // Lights
643
644 plot -> render = i;
645
646 //draw_labels ();
647 if (wingl -> record) add_image ();
648 }
649
650/* #ifdef DEBUG
651 glEndQuery (GL_TIME_ELAPSED);
652 GLint done = 0;
653 while (! done)
654 {
655 glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT_AVAILABLE, & done);
656 }
657 GLint GPU_res;
658 glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT, & GPU_res);
659 g_print (":: TIME TO RENDER (GPU) = %f s\n", (double)GPU_res/CLOCKS_PER_SEC);
660 clock_gettime (CLOCK_MONOTONIC, & stop_time);
661 g_print (":: TIME TO RENDER (CPU) = %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time)));
662// #endif */
663}
664
atom_selection * duplicate_ogl_selection(atom_selection *old_sel)
copy an atom selection
Definition calc.c:119
gchar * param[2]
double scale(double axe)
find appropriate major tick spacing based on axis length
Definition curve.c:205
int nbs
Definition d_atoms.c:165
int nbl
Definition d_atoms.c:165
vec3_t model_position
ColRGBA col
Definition d_measures.c:77
int * shift
Definition d_measures.c:72
int atoms[NUM_STYLES][2]
Variable declarations for the creation of the DL_POLY input file(s).
int * duplicate_int(int num, int *old_val)
copy a list of int
Definition global.c:547
float * duplicate_float(int num, float *old_val)
copy a list of float
Definition global.c:579
gboolean * duplicate_bool(int num, gboolean *old_val)
copy a list of gboolean
Definition global.c:563
int ** allocdint(int xal, int yal)
allocate an int ** pointer
Definition global.c:317
double * duplicate_double(int num, double *old_val)
copy a list of double
Definition global.c:595
gboolean atomes_render_image
Definition global.c:196
Global variable declarations Global convenience function declarations Global data structure defin...
project * proj
ColRGBA * duplicate_color(int num, ColRGBA *col)
duplicate a ColRGBA pointer
Definition gtk-misc.c:1689
project * get_project_by_id(int p)
get project pointer using id number
Definition project.c:120
Variable declarations related to the OpenGL window Function declarations related to the OpenGL wind...
image * plot
Definition ogl_draw.c:72
project * proj_gl
Definition ogl_draw.c:66
glwin * wingl
Definition ogl_draw.c:65
gboolean pick
int proj_sp
Definition ogl_draw.c:67
box_info * box_gl
Definition ogl_draw.c:70
render
Definition glview.h:191
@ FILL
Definition glview.h:192
void cleaning_shaders(glwin *view, int shader)
re-initialize an OpenGL shader
int qual
Definition ogl_draw.c:73
void draw_vertices(int id)
Draw OpenGL shader program.
int step
Definition ogl_draw.c:76
labels
Definition glview.h:223
int pcolorm
Definition ogl_draw.c:75
int acolorm
Definition ogl_draw.c:74
coord_info * coord_gl
Definition ogl_draw.c:69
int proj_at
Definition ogl_draw.c:68
cell_info * cell_gl
Definition ogl_draw.c:71
#define FILLED_STYLES
Definition glwin.h:106
@ BONDS
Definition glwin.h:90
@ PICKS
Definition glwin.h:97
@ LABEL
Definition glwin.h:98
@ VOLMS
Definition glwin.h:102
@ SLABS
Definition glwin.h:101
@ POLYS
Definition glwin.h:92
@ MAXIS
Definition glwin.h:94
@ SELEC
Definition glwin.h:91
@ MDBOX
Definition glwin.h:93
@ MEASU
Definition glwin.h:99
@ ATOMS
Definition glwin.h:89
@ RINGS
Definition glwin.h:96
@ BACKG
Definition glwin.h:103
@ LIGHT
Definition glwin.h:100
#define NGLOBAL_SHADERS
Definition glwin.h:69
position
Definition m_proj.c:48
screen_string * duplicate_screen_string(screen_string *old_s)
create a copy a screen_string data structure
Definition ogl_draw.c:165
void create_background_lists()
prepare background OpenGL rendering
atom_selection * duplicate_ogl_selection(atom_selection *old_sel)
copy an atom selection
Definition calc.c:119
GLUquadricObj * quadric
Definition ogl_draw.c:64
int create_bond_lists(gboolean to_pick)
prepare bond(s) and clone bond(s) OpenGL rendering
Definition d_bonds.c:685
void print_matrices()
print OpenGL matrices
Definition ogl_draw.c:99
void draw(glwin *view)
main drawing subroutine for the OpenGL window
Definition ogl_draw.c:528
int create_box_lists(int b_step)
prepare box OpenGL rendering
Definition d_box.c:294
void at_unshift(atom *at, float *shift)
correct atomic coordinates modified to display image in cell replica
Definition ogl_draw.c:514
void unrotate_camera()
unrotate OpenGL camera
Definition ogl_draw.c:150
void duplicate_material(Material *new_mat, Material *old_mat)
duplicate material data
Definition ogl_draw.c:188
void create_ring_lists()
prepare ring(s) polyhedra OpenGL rendering
Definition d_rings.c:169
void duplicate_screen_label(screen_label *new_lab, screen_label *old_lab)
copy screen_label data structure
Definition ogl_draw.c:241
image * duplicate_image(image *old_img)
create a copy of an image data structure
Definition ogl_draw.c:281
void create_slab_lists(project *this_proj)
prepare slab(s) OpenGL rendering
Definition d_box.c:906
void at_shift(atom *at, float *shift)
modify atomic coordinates to display image in cell replica
Definition ogl_draw.c:499
void create_light_lists()
prepare light(s) OpenGL rendering
Definition d_box.c:473
ColRGBA init_color(int id, int numid)
initialize color based id number over total number of elements
Definition initcoord.c:81
void duplicate_material_and_lightning(image *new_img, image *old_img)
copy the material and lightning parameters of an image data structure
Definition ogl_draw.c:223
void create_volumes_lists()
prepare volume(s) OpenGL rendering
Definition d_box.c:947
void setup_camera()
setup OpenGL camera
Definition ogl_draw.c:127
int create_label_lists()
prepare atomic label(s) OpenGL rendering
Definition d_label.c:161
void update_gl_pick_colors()
Light ** copy_light_sources(int dima, int dimb, Light **old_sp)
create a copy of a list of light sources
Definition w_advance.c:400
int create_pick_lists()
prepare the picking list OpenGL rendering
int create_axis_lists()
prepare axis OpenGL rendering
Definition d_axis.c:268
double z
Definition ogl_draw.c:63
void duplicate_fog(Fog *new_fog, Fog *old_fog)
duplicate fog data
Definition ogl_draw.c:205
atom * free_atom(atom *at)
free an atom data structure
Definition ogl_draw.c:484
double y
Definition ogl_draw.c:63
void create_poly_lists()
prepare coordination polyhedra(s) OpenGL rendering
Definition d_poly.c:630
atom * duplicate_atom(atom *at)
copy (partially) an atom data structure
Definition ogl_draw.c:449
void create_atom_lists(gboolean to_pick)
prepare atom(s) and clone(s) OpenGL rendering
Definition d_atoms.c:643
int create_selection_lists()
prepare the selected atom(s) and bond(s) OpenGL rendering
void add_image()
add an image to the animation
Definition ogl_draw.c:418
double x
Definition ogl_draw.c:63
void create_measures_lists()
prepare measure(s) OpenGL rendering
Definition d_measures.c:668
void duplicate_screen_label(screen_label *new_lab, screen_label *old_lab)
copy screen_label data structure
Definition ogl_draw.c:241
void duplicate_box_data(box *new_box, box *old_box)
duplicate box_data data structure
void duplicate_background_data(background *new_back, background *old_back)
duplicate background data structure
void duplicate_axis_data(axis *new_axis, axis *old_axis)
duplicate axis_data data structure
Preference variable declarations.
Definition glwin.h:234
Definition glwin.h:182
Definition global.h:964
Definition glwin.h:350
double green
Definition color_box.h:35
double red
Definition color_box.h:34
double blue
Definition color_box.h:36
Definition glwin.h:967
Definition glwin.h:364
int style
Definition glwin.h:464
float z
Definition math_3d.h:149
GtkWidget * img
Definition workspace.c:70