Mercurial > pub > dyncall > bindings
comparison R/rdyncall/demo/SDL.R @ 0:0cfcc391201f
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:26:28 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:0cfcc391201f |
---|---|
1 # Package: rdyncall | |
2 # File: demo/SDL.R | |
3 # Description: 3D Rotating Cube Demo using SDL,OpenGL and GLU. (dynport demo) | |
4 | |
5 dynport(SDL) | |
6 dynport(GL) | |
7 dynport(GLU) | |
8 | |
9 # Globals. | |
10 | |
11 surface <- NULL | |
12 | |
13 # Init. | |
14 | |
15 init <- function() | |
16 { | |
17 err <- SDL_Init(SDL_INIT_VIDEO) | |
18 if (err != 0) error("SDL_Init failed") | |
19 surface <<- SDL_SetVideoMode(512,512,32,SDL_DOUBLEBUF+SDL_OPENGL) | |
20 } | |
21 | |
22 # GL Display Lists | |
23 | |
24 makeCubeDisplaylist <- function() | |
25 { | |
26 vertices <- as.double(c( | |
27 -1,-1,-1, | |
28 1,-1,-1, | |
29 -1, 1,-1, | |
30 1, 1,-1, | |
31 -1,-1, 1, | |
32 1,-1, 1, | |
33 -1, 1, 1, | |
34 1, 1, 1 | |
35 )) | |
36 | |
37 colors <- as.raw( col2rgb( rainbow(8) ) ) | |
38 | |
39 triangleIndices <- as.integer(c( | |
40 0, 2, 1, | |
41 2, 3, 1, | |
42 1, 3, 7, | |
43 1, 7, 5, | |
44 4, 5, 7, | |
45 4, 7, 6, | |
46 6, 2, 0, | |
47 6, 0, 4, | |
48 2, 7, 3, | |
49 2, 6, 7, | |
50 4, 0, 5, | |
51 0, 1, 5 | |
52 )) | |
53 | |
54 glEnableClientState(GL_VERTEX_ARRAY) | |
55 glVertexPointer(3, GL_DOUBLE, 0, vertices ) | |
56 | |
57 glEnableClientState(GL_COLOR_ARRAY) | |
58 glColorPointer(3, GL_UNSIGNED_BYTE, 0, colors ) | |
59 | |
60 displaylistId <- glGenLists(1) | |
61 glNewList( displaylistId, GL_COMPILE ) | |
62 glPushAttrib(GL_ENABLE_BIT) | |
63 glEnable(GL_DEPTH_TEST) | |
64 glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, triangleIndices) | |
65 glPopAttrib() | |
66 glEndList() | |
67 | |
68 glDisableClientState(GL_VERTEX_ARRAY) | |
69 glDisableClientState(GL_COLOR_ARRAY) | |
70 | |
71 | |
72 return(displaylistId) | |
73 } | |
74 | |
75 # Mainloop. | |
76 | |
77 mainloop <- function() | |
78 { | |
79 displaylistId <- makeCubeDisplaylist() | |
80 evt <- new.struct(SDL_Event) | |
81 blink <- 0 | |
82 tbase <- SDL_GetTicks() | |
83 quit <- FALSE | |
84 while(!quit) | |
85 { | |
86 tnow <- SDL_GetTicks() | |
87 tdemo <- ( tnow - tbase ) / 1000 | |
88 | |
89 glClearColor(0,0,blink,0) | |
90 glClear(GL_COLOR_BUFFER_BIT+GL_DEPTH_BUFFER_BIT) | |
91 | |
92 glMatrixMode(GL_PROJECTION) | |
93 glLoadIdentity() | |
94 aspect <- 512/512 | |
95 gluPerspective(60, aspect, 3, 1000) | |
96 | |
97 glMatrixMode(GL_MODELVIEW) | |
98 glLoadIdentity() | |
99 gluLookAt(0,0,5,0,0,0,0,1,0) | |
100 glRotated(sin(tdemo)*60.0, 0, 1, 0); | |
101 glRotated(cos(tdemo)*90.0, 1, 0, 0); | |
102 | |
103 glCallList(displaylistId) | |
104 | |
105 glCallList(displaylistId) | |
106 | |
107 SDL_GL_SwapBuffers() | |
108 | |
109 SDL_WM_SetCaption(paste("time:", tdemo),NULL) | |
110 blink <- blink + 0.01 | |
111 while (blink > 1) blink <- blink - 1 | |
112 while( SDL_PollEvent(evt) != 0 ) | |
113 { | |
114 if ( evt$type == SDL_QUIT ) quit <- TRUE | |
115 else if (evt$type == SDL_MOUSEBUTTONDOWN ) | |
116 { | |
117 button <- evt$button | |
118 cat("button ",button$button," at ",button$x,",",button$y,"\n") | |
119 } | |
120 } | |
121 glerr <- glGetError() | |
122 if (glerr != 0) | |
123 { | |
124 cat("GL Error:", gluErrorString(glerr) ) | |
125 quit <- 1 | |
126 } | |
127 SDL_Delay(30) | |
128 } | |
129 glDeleteLists(displaylistId, 1) | |
130 } | |
131 | |
132 cleanup <- function() | |
133 { | |
134 SDL_Quit() | |
135 } | |
136 | |
137 run <- function() | |
138 { | |
139 init() | |
140 mainloop() | |
141 cleanup() | |
142 } | |
143 | |
144 run() | |
145 | |
146 |