Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
C
cookbook
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
redox-os
cookbook
Commits
68786deb
Commit
68786deb
authored
6 years ago
by
Fabio Di Francesco
Browse files
Options
Downloads
Patches
Plain Diff
added sdl2_gears demo
parent
e8b6055f
Branches
Branches containing commit
Tags
Tags containing commit
1 merge request
!207
Sdl2 adjustments and sdl2 gears demo
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
recipes/freeciv/recipe.sh
+1
-0
1 addition, 0 deletions
recipes/freeciv/recipe.sh
recipes/sdl2_gears/gears.c
+359
-0
359 additions, 0 deletions
recipes/sdl2_gears/gears.c
recipes/sdl2_gears/recipe.sh
+42
-0
42 additions, 0 deletions
recipes/sdl2_gears/recipe.sh
with
402 additions
and
0 deletions
recipes/freeciv/recipe.sh
+
1
−
0
View file @
68786deb
...
...
@@ -22,6 +22,7 @@ function recipe_build {
--host
=
"
$HOST
"
\
--prefix
=
''
\
--disable-server
\
--enable-ipv6
=
no
\
--enable-client
=
sdl
\
--enable-fcmp
=
cli
\
--with-sdl-prefix
=
"
$sysroot
"
\
...
...
This diff is collapsed.
Click to expand it.
recipes/sdl2_gears/gears.c
0 → 100644
+
359
−
0
View file @
68786deb
/* gears.c */
/*
* 3-D gear wheels. This program is in the public domain.
*
* Brian Paul
*/
/* Conversion to GLUT by Mark J. Kilgard */
#include
<math.h>
#include
<stdlib.h>
#include
<GL/gl.h>
#include
<GL/glu.h>
#include
<SDL2/SDL.h>
#ifndef M_PI
#define M_PI 3.14159265
#endif
/**
Draw a gear wheel. You'll probably want to call this function when
building a display list since we do a lot of trig here.
Input: inner_radius - radius of hole at center
outer_radius - radius at center of teeth
width - width of gear
teeth - number of teeth
tooth_depth - depth of tooth
**/
static
void
gear
(
GLfloat
inner_radius
,
GLfloat
outer_radius
,
GLfloat
width
,
GLint
teeth
,
GLfloat
tooth_depth
)
{
GLint
i
;
GLfloat
r0
,
r1
,
r2
;
GLfloat
angle
,
da
;
GLfloat
u
,
v
,
len
;
r0
=
inner_radius
;
r1
=
outer_radius
-
tooth_depth
/
2
.
0
;
r2
=
outer_radius
+
tooth_depth
/
2
.
0
;
da
=
2
.
0
*
M_PI
/
teeth
/
4
.
0
;
glShadeModel
(
GL_FLAT
);
glNormal3f
(
0
.
0
,
0
.
0
,
1
.
0
);
/* draw front face */
glBegin
(
GL_QUAD_STRIP
);
for
(
i
=
0
;
i
<=
teeth
;
i
++
)
{
angle
=
i
*
2
.
0
*
M_PI
/
teeth
;
glVertex3f
(
r0
*
cos
(
angle
),
r0
*
sin
(
angle
),
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
angle
),
r1
*
sin
(
angle
),
width
*
0
.
5
);
glVertex3f
(
r0
*
cos
(
angle
),
r0
*
sin
(
angle
),
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
angle
+
3
*
da
),
r1
*
sin
(
angle
+
3
*
da
),
width
*
0
.
5
);
}
glEnd
();
/* draw front sides of teeth */
glBegin
(
GL_QUADS
);
da
=
2
.
0
*
M_PI
/
teeth
/
4
.
0
;
for
(
i
=
0
;
i
<
teeth
;
i
++
)
{
angle
=
i
*
2
.
0
*
M_PI
/
teeth
;
glVertex3f
(
r1
*
cos
(
angle
),
r1
*
sin
(
angle
),
width
*
0
.
5
);
glVertex3f
(
r2
*
cos
(
angle
+
da
),
r2
*
sin
(
angle
+
da
),
width
*
0
.
5
);
glVertex3f
(
r2
*
cos
(
angle
+
2
*
da
),
r2
*
sin
(
angle
+
2
*
da
),
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
angle
+
3
*
da
),
r1
*
sin
(
angle
+
3
*
da
),
width
*
0
.
5
);
}
glEnd
();
glNormal3f
(
0
.
0
,
0
.
0
,
-
1
.
0
);
/* draw back face */
glBegin
(
GL_QUAD_STRIP
);
for
(
i
=
0
;
i
<=
teeth
;
i
++
)
{
angle
=
i
*
2
.
0
*
M_PI
/
teeth
;
glVertex3f
(
r1
*
cos
(
angle
),
r1
*
sin
(
angle
),
-
width
*
0
.
5
);
glVertex3f
(
r0
*
cos
(
angle
),
r0
*
sin
(
angle
),
-
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
angle
+
3
*
da
),
r1
*
sin
(
angle
+
3
*
da
),
-
width
*
0
.
5
);
glVertex3f
(
r0
*
cos
(
angle
),
r0
*
sin
(
angle
),
-
width
*
0
.
5
);
}
glEnd
();
/* draw back sides of teeth */
glBegin
(
GL_QUADS
);
da
=
2
.
0
*
M_PI
/
teeth
/
4
.
0
;
for
(
i
=
0
;
i
<
teeth
;
i
++
)
{
angle
=
i
*
2
.
0
*
M_PI
/
teeth
;
glVertex3f
(
r1
*
cos
(
angle
+
3
*
da
),
r1
*
sin
(
angle
+
3
*
da
),
-
width
*
0
.
5
);
glVertex3f
(
r2
*
cos
(
angle
+
2
*
da
),
r2
*
sin
(
angle
+
2
*
da
),
-
width
*
0
.
5
);
glVertex3f
(
r2
*
cos
(
angle
+
da
),
r2
*
sin
(
angle
+
da
),
-
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
angle
),
r1
*
sin
(
angle
),
-
width
*
0
.
5
);
}
glEnd
();
/* draw outward faces of teeth */
glBegin
(
GL_QUAD_STRIP
);
for
(
i
=
0
;
i
<
teeth
;
i
++
)
{
angle
=
i
*
2
.
0
*
M_PI
/
teeth
;
glVertex3f
(
r1
*
cos
(
angle
),
r1
*
sin
(
angle
),
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
angle
),
r1
*
sin
(
angle
),
-
width
*
0
.
5
);
u
=
r2
*
cos
(
angle
+
da
)
-
r1
*
cos
(
angle
);
v
=
r2
*
sin
(
angle
+
da
)
-
r1
*
sin
(
angle
);
len
=
sqrt
(
u
*
u
+
v
*
v
);
u
/=
len
;
v
/=
len
;
glNormal3f
(
v
,
-
u
,
0
.
0
);
glVertex3f
(
r2
*
cos
(
angle
+
da
),
r2
*
sin
(
angle
+
da
),
width
*
0
.
5
);
glVertex3f
(
r2
*
cos
(
angle
+
da
),
r2
*
sin
(
angle
+
da
),
-
width
*
0
.
5
);
glNormal3f
(
cos
(
angle
),
sin
(
angle
),
0
.
0
);
glVertex3f
(
r2
*
cos
(
angle
+
2
*
da
),
r2
*
sin
(
angle
+
2
*
da
),
width
*
0
.
5
);
glVertex3f
(
r2
*
cos
(
angle
+
2
*
da
),
r2
*
sin
(
angle
+
2
*
da
),
-
width
*
0
.
5
);
u
=
r1
*
cos
(
angle
+
3
*
da
)
-
r2
*
cos
(
angle
+
2
*
da
);
v
=
r1
*
sin
(
angle
+
3
*
da
)
-
r2
*
sin
(
angle
+
2
*
da
);
glNormal3f
(
v
,
-
u
,
0
.
0
);
glVertex3f
(
r1
*
cos
(
angle
+
3
*
da
),
r1
*
sin
(
angle
+
3
*
da
),
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
angle
+
3
*
da
),
r1
*
sin
(
angle
+
3
*
da
),
-
width
*
0
.
5
);
glNormal3f
(
cos
(
angle
),
sin
(
angle
),
0
.
0
);
}
glVertex3f
(
r1
*
cos
(
0
),
r1
*
sin
(
0
),
width
*
0
.
5
);
glVertex3f
(
r1
*
cos
(
0
),
r1
*
sin
(
0
),
-
width
*
0
.
5
);
glEnd
();
glShadeModel
(
GL_SMOOTH
);
/* draw inside radius cylinder */
glBegin
(
GL_QUAD_STRIP
);
for
(
i
=
0
;
i
<=
teeth
;
i
++
)
{
angle
=
i
*
2
.
0
*
M_PI
/
teeth
;
glNormal3f
(
-
cos
(
angle
),
-
sin
(
angle
),
0
.
0
);
glVertex3f
(
r0
*
cos
(
angle
),
r0
*
sin
(
angle
),
-
width
*
0
.
5
);
glVertex3f
(
r0
*
cos
(
angle
),
r0
*
sin
(
angle
),
width
*
0
.
5
);
}
glEnd
();
}
static
int
width
=
800
;
static
int
height
=
600
;
static
SDL_Window
*
window
=
NULL
;
static
SDL_GLContext
context
=
NULL
;
static
GLfloat
view_rotx
=
20
.
0
,
view_roty
=
30
.
0
,
view_rotz
=
0
.
0
;
static
GLint
gear1
,
gear2
,
gear3
;
static
GLfloat
angle
=
0
.
0
;
static
GLfloat
delta
=
2
.
0
f
;
static
void
draw
(
void
)
{
glClear
(
GL_COLOR_BUFFER_BIT
|
GL_DEPTH_BUFFER_BIT
);
glPushMatrix
();
glRotatef
(
view_rotx
,
1
.
0
,
0
.
0
,
0
.
0
);
glRotatef
(
view_roty
,
0
.
0
,
1
.
0
,
0
.
0
);
glRotatef
(
view_rotz
,
0
.
0
,
0
.
0
,
1
.
0
);
glPushMatrix
();
glTranslatef
(
-
3
.
0
,
-
2
.
0
,
0
.
0
);
glRotatef
(
angle
,
0
.
0
,
0
.
0
,
1
.
0
);
glCallList
(
gear1
);
glPopMatrix
();
glPushMatrix
();
glTranslatef
(
3
.
1
,
-
2
.
0
,
0
.
0
);
glRotatef
(
-
2
.
0
*
angle
-
9
.
0
,
0
.
0
,
0
.
0
,
1
.
0
);
glCallList
(
gear2
);
glPopMatrix
();
glPushMatrix
();
glTranslatef
(
-
3
.
1
,
4
.
2
,
0
.
0
);
glRotatef
(
-
2
.
0
*
angle
-
25
.
0
,
0
.
0
,
0
.
0
,
1
.
0
);
glCallList
(
gear3
);
glPopMatrix
();
glPopMatrix
();
glFinish
();
}
static
void
idle
(
void
)
{
angle
+=
delta
;
if
(
angle
>
360
.
0
f
)
angle
-=
360
.
0
f
;
draw
();
SDL_GL_SwapWindow
(
window
);
}
/* new window size or exposure */
static
void
reshape
(
int
width
,
int
height
)
{
GLfloat
h
=
(
GLfloat
)
height
/
(
GLfloat
)
width
;
glViewport
(
0
,
0
,
(
GLint
)
width
,
(
GLint
)
height
);
glMatrixMode
(
GL_PROJECTION
);
glLoadIdentity
();
glFrustum
(
-
1
.
0
,
1
.
0
,
-
h
,
h
,
5
.
0
,
60
.
0
);
glMatrixMode
(
GL_MODELVIEW
);
glLoadIdentity
();
glTranslatef
(
0
.
0
,
0
.
0
,
-
40
.
0
);
}
static
void
init
(
void
)
{
static
GLfloat
pos
[
4
]
=
{
5
.
0
,
5
.
0
,
10
.
0
,
0
.
0
};
static
GLfloat
red
[
4
]
=
{
0
.
8
,
0
.
1
,
0
.
0
,
1
.
0
};
static
GLfloat
green
[
4
]
=
{
0
.
0
,
0
.
8
,
0
.
2
,
1
.
0
};
static
GLfloat
blue
[
4
]
=
{
0
.
2
,
0
.
2
,
1
.
0
,
1
.
0
};
glLightfv
(
GL_LIGHT0
,
GL_POSITION
,
pos
);
glEnable
(
GL_CULL_FACE
);
glEnable
(
GL_LIGHTING
);
glEnable
(
GL_LIGHT0
);
glEnable
(
GL_DEPTH_TEST
);
/* make the gears */
gear1
=
glGenLists
(
1
);
glNewList
(
gear1
,
GL_COMPILE
);
glMaterialfv
(
GL_FRONT
,
GL_AMBIENT_AND_DIFFUSE
,
red
);
gear
(
1
.
0
,
4
.
0
,
1
.
0
,
20
,
0
.
7
);
glEndList
();
gear2
=
glGenLists
(
1
);
glNewList
(
gear2
,
GL_COMPILE
);
glMaterialfv
(
GL_FRONT
,
GL_AMBIENT_AND_DIFFUSE
,
green
);
gear
(
0
.
5
,
2
.
0
,
2
.
0
,
10
,
0
.
7
);
glEndList
();
gear3
=
glGenLists
(
1
);
glNewList
(
gear3
,
GL_COMPILE
);
glMaterialfv
(
GL_FRONT
,
GL_AMBIENT_AND_DIFFUSE
,
blue
);
gear
(
1
.
3
,
2
.
0
,
0
.
5
,
10
,
0
.
7
);
glEndList
();
glEnable
(
GL_NORMALIZE
);
}
void
CheckSDLError
(
int
line
)
{
const
char
*
error
=
SDL_GetError
();
if
(
error
!=
""
)
{
printf
(
"SLD Error: %s
\n
"
,
error
);
if
(
line
!=
-
1
)
printf
(
"
\n
Line: %d
\n
"
,
line
);
SDL_ClearError
();
}
}
int
main
(
int
argc
,
char
*
argv
[])
{
printf
(
"Initializing SDL
\n
"
);
if
(
SDL_Init
(
SDL_INIT_VIDEO
)
<
0
)
{
printf
(
"Failed to init SDL
\n
"
);
CheckSDLError
(
__LINE__
);
return
-
1
;
}
printf
(
"Creating SDL window
\n
"
);
window
=
SDL_CreateWindow
(
"Gears"
,
-
1
,
-
1
,
width
,
height
,
SDL_WINDOW_OPENGL
);
if
(
window
==
NULL
)
{
printf
(
"Unable to create window
\n
"
);
CheckSDLError
(
__LINE__
);
return
-
1
;
}
printf
(
"SDL window created %p
\n
"
,
window
);
printf
(
"Creating SDL GL context
\n
"
);
context
=
SDL_GL_CreateContext
(
window
);
if
(
context
==
NULL
)
{
printf
(
"Unable to create SDL GL context
\n
"
);
CheckSDLError
(
__LINE__
);
return
-
1
;
}
printf
(
"SDL GL context created %p
\n
"
,
context
);
init
();
reshape
(
width
,
height
);
int
running
=
1
;
SDL_Event
event
;
while
(
running
)
{
idle
();
while
(
SDL_PollEvent
(
&
event
))
{
if
(
event
.
type
==
SDL_QUIT
)
running
=
0
;
if
(
event
.
type
==
SDL_KEYDOWN
)
{
switch
(
event
.
key
.
keysym
.
sym
)
{
case
SDLK_a
:
delta
+=
1
.
0
f
;
break
;
case
SDLK_s
:
delta
-=
1
.
0
f
;
break
;
case
SDLK_ESCAPE
:
running
=
0
;
break
;
default:
break
;
}
}
}
}
SDL_GL_DeleteContext
(
context
);
SDL_DestroyWindow
(
window
);
// Shutdown SDL 2
SDL_Quit
();
return
0
;
}
This diff is collapsed.
Click to expand it.
recipes/sdl2_gears/recipe.sh
0 → 100644
+
42
−
0
View file @
68786deb
BUILD_DEPENDS
=(
sdl2 liborbital llvm mesa mesa_glu zlib
)
function
recipe_version
{
printf
"1.0.0"
skip
=
1
}
function
recipe_update
{
echo
"skipping update"
skip
=
1
}
function
recipe_prepare
{
rm
-rf
source
mkdir source
cp
gears.c
source
}
function
recipe_build
{
sysroot
=
"
$(
realpath
../sysroot
)
"
set
-x
"
${
CXX
}
"
-O2
-I
"
$sysroot
/include"
-L
"
$sysroot
/lib"
gears.c
-o
sdl2_gears
-lSDL2
-lorbital
$(
"
${
PKG_CONFIG
}
"
--libs
glu
)
-lglapi
-lz
set
+x
skip
=
1
}
function
recipe_test
{
echo
"skipping test"
skip
=
1
}
function
recipe_clean
{
make clean
skip
=
1
}
function
recipe_stage
{
dest
=
"
$(
realpath
$1
)
"
mkdir
-pv
"
$dest
/bin"
cp
-v
"sdl2_gears"
"
$dest
/bin/sdl2_gears"
skip
=
1
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment