Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /examples/iso2d-demo/main.c
ViewVC logotype

Annotation of /examples/iso2d-demo/main.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1880 - (view) (download) (as text)

1 : jhr 1880 /*! \file main.c
2 :     *
3 :     * \author John Reppy
4 :     *
5 :     * Main program for Diderot ISO2d animation.
6 :     */
7 :    
8 :     /*
9 :     * COPYRIGHT (c) 2012 The Diderot Project (http://diderot-language.cs.uchicago.edu)
10 :     * All rights reserved.
11 :     */
12 :    
13 :     #include <AntTweakBar.h>
14 :     #if defined(__APPLE__)
15 :     # include <GLUT/glut.h>
16 :     #else
17 :     # include <GL/glut.h>
18 :     #endif
19 :     #include "vr-lite-cam.h"
20 :    
21 :     /* pixel dimensions of output */
22 :     #define WIDTH 512
23 :     #define HEIGHT 512
24 :    
25 :     /***** Globals for viewing, etc. *****/
26 :    
27 :     Nrrd *Diderot; // input image nrrd
28 :     unsigned int Width; // view window width
29 :     unsigned int Height; // view window height
30 :     GLuint ImageTexture; // Texture ID of background image
31 :    
32 :     // Callback function called by GLUT to render screen
33 :     void Display(void)
34 :     {
35 :     // Clear frame buffer
36 :     glClearColor (0, 0, 0, 1);
37 :     glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
38 :    
39 :     glEnable(GL_DEPTH_TEST);
40 :     glDisable(GL_CULL_FACE);
41 :    
42 :     // Draw background
43 :    
44 :     // Draw current render state
45 :    
46 :     // Draw tweak bars
47 :     TwDraw();
48 :    
49 :     // Present frame buffer
50 :     glutSwapBuffers();
51 :     }
52 :    
53 :     // Callback function called by GLUT when window size changes
54 :     void Reshape (int width, int height)
55 :     {
56 :     // Set OpenGL viewport and camera
57 :     glViewport (0, 0, width, height);
58 :     glMatrixMode (GL_PROJECTION);
59 :     glLoadIdentity ();
60 :     /* FIXME */
61 :     glMatrixMode (GL_MODELVIEW);
62 :     glLoadIdentity ();
63 :     /* FIXME */
64 :    
65 :     // Send the new window size to AntTweakBar
66 :     TwWindowSize (width, height);
67 :    
68 :     // remember width and height
69 :     Width = width;
70 :     Height = height;
71 :    
72 :     }
73 :    
74 :     // initialize a texture from a grayscale Nrrd file
75 :     void InitTexture (Nrrd *nin)
76 :     {
77 :     if ((nin->dim != 2)
78 :     || (nin->axis[0].kind != nrrdKindSpace)
79 :     || (nin->axis[1].kind != nrrdKindSpace)) {
80 :     fprintf (stderr, "unable to handle nrrd file\n");
81 :     exit (1);
82 :     }
83 :    
84 :     // determine the pixel format for the texture
85 :     GLenum type;
86 :     switch (nin->type) {
87 :     case nrrdTypeUChar: type = GL_UNSIGNED_BYTE; break;
88 :     case nrrdTypeFloat: type = GL_FLOAT; break;
89 :     default:
90 :     fprintf (stderr, "unable to handle nrdd file type %d\n", nin->type);
91 :     exit (1);
92 :     }
93 :    
94 :     // generate the TeXID
95 :     GLuint texId;
96 :     glGenTextures (1, &texId);
97 :    
98 :     // load the texture data
99 :     glBindTexture (GL_TEXTURE_2D, texId);
100 :     glTexImage2D (GL_TEXTURE_2D, /* or GL_TEXTURE_RECTANGLE ? */
101 :     0,
102 :     GL_RED,
103 :     nin->axis[0]->size, nin->axis[1]->size, 0,
104 :     GL_RED, type,
105 :     nin->data);
106 :     /* check for error */
107 :    
108 :     ImageTexture = texId;
109 :     }
110 :    
111 :     int main (int argc, const char **argv)
112 :     {
113 :     // Initialize GLUT
114 :     glutInit (&argc, argv);
115 :     glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
116 :     glutInitWindowSize (WIDTH, HEIGHT);
117 :     glutCreateWindow ("Diderot Iso2D Animation");
118 :     glutCreateMenu (0);
119 :    
120 :     // Set GLUT callbacks
121 :     glutDisplayFunc (Display);
122 :     glutReshapeFunc (Reshape);
123 :     atexit (TwTerminate); // Called after glutMainLoop ends
124 :    
125 :     // Initialize AntTweakBar
126 :     TwInit (TW_OPENGL, 0);
127 :    
128 :     // Set GLUT event callbacks
129 :     // - Directly redirect GLUT mouse button events to AntTweakBar
130 :     glutMouseFunc ((GLUTmousebuttonfun)TwEventMouseButtonGLUT);
131 :     // - Directly redirect GLUT mouse motion events to AntTweakBar
132 :     glutMotionFunc ((GLUTmousemotionfun)TwEventMouseMotionGLUT);
133 :     // - Directly redirect GLUT mouse "passive" motion events to AntTweakBar (same as MouseMotion)
134 :     glutPassiveMotionFunc ((GLUTmousemotionfun)TwEventMouseMotionGLUT);
135 :     // - Directly redirect GLUT key events to AntTweakBar
136 :     glutKeyboardFunc ((GLUTkeyboardfun)TwEventKeyboardGLUT);
137 :     // - Directly redirect GLUT special key events to AntTweakBar
138 :     glutSpecialFunc ((GLUTspecialfun)TwEventSpecialGLUT);
139 :     // - Send 'glutGetModifers' function pointer to AntTweakBar;
140 :     // required because the GLUT key event functions do not report key modifiers states.
141 :     TwGLUTModifiersFunc (glutGetModifiers);
142 :    
143 :     // load Diderot image as nrrd file
144 :     Nrrd *Diderot = nrrdNew();
145 :     if (nrrdLoad(diderot, "data/ddro-80.nrrd", 0) != 0) {
146 :     char *msg = biffGetDone(NRRD);
147 :     fprintf (stderr, "Error loading nrrd file: %s", msg);
148 :     free (msg);
149 :     return 0;
150 :     }
151 :    
152 :     ISO_World_t *wrld = ISO_Init ();
153 :    
154 :     ISO_Initially (wrld);
155 :    
156 :     uint32_t nSteps = ISO_Run (wrld, 0);
157 :    
158 :     // get results
159 :     Nrrd *nData = nrrdNew();
160 :     if (ISO_OutputGet_outRGBA (wrld, nData)) {
161 :     // error
162 :     fprintf(stderr, "Error getting nrrd data\n");
163 :     return 1;
164 :     }
165 :    
166 :     if (nrrdSave("out.nrrd", nData, NULL)) {
167 :     char *err = biffGetDone(NRRD);
168 :     fprintf(stderr, "Trouble saving nrrd struct: %s\n", err);
169 :     return 1;
170 :     }
171 :    
172 :     ISO_Shutdown (wrld);
173 :    
174 :     return 0;
175 :     }

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0