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