File: requirements_and_design.txt

package info (click to toggle)
ruby-opengl 0.60.1%2Bdfsg2-1~wheezy1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 2,048 kB
  • sloc: ansic: 24,676; ruby: 9,400; sh: 12; makefile: 10
file content (117 lines) | stat: -rw-r--r-- 3,638 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Design
======

This document records the requirements, high-level design, and the
specifications for the ruby-opengl project.

The content of this document was gleaned from the postings on the
ruby-opengl-dev list and internal notes from John G., Peter M., Vo Minh Thu,
and Robert K.


Requirements
------------

* ruby-opengl is a Ruby extension library which wraps the OpenGL, GLU,
  and GLUT libraries.

* ruby-opengl shall provide three base modules: *BaseGL*, *BaseGLU*, and
  *BaseGLUT* (the "Base Modules").

  Note: "BaseGL" etc. are not the names that appear in the code -- they are
  just handles so we can write about them in documents like this one.

* The Base Modules shall be separately loadable.

* BaseGL shall not depend on any of the other Ruby modules.

* BaseGLU shall depend on, at most, BaseGL.

* BaseGLUT shall depend on, at most, BaseGLU and BaseGL.

* Base Module syntax shall closely follow the standard C-syntax.

  The syntax for a Ruby program that uses the base modules, shall closely
  follow the standard C-like syntax that OpenGL programmers are used to,
  and that most OpenGL examples are published in:

        {{ruby}}
        require 'gl'
        Gl.glBegin( Gl::GL_POLYGON )
          Gl.glVertex2d( 0, 0 )
          Gl.glVertex2d( 0, 1 )
          Gl.glVertex2d( 1, 1 )
          Gl.glVertex2d( 1, 0 )
        Gl.glEnd

  Or:

        {{ruby}}
        require 'gl'
        include Gl
        glBegin( GL_POLYGON )
          glVertex2d( 0, 0 )
          glVertex2d( 0, 1 )
          glVertex2d( 1, 1 )
          glVertex2d( 1, 0 )
        glEnd

  The rationale for adopting the C-like syntax is:
    * Makes it familiar to OpenGL programmers.
    * Removes the burden of learning OpenGL plus some Ruby-isms, just to
      get started.
    * Makes it easier to port OpenGL programs to/from ruby-opengl.
    * The current OpenGL documentation more naturally fits ruby-opengl.
    * Putting "gl", "glu" and "glut" in front of all the names (i.e.,
      following the C-like syntax) leaves common variable names open for
      the programmers (e.g., "vertex", "color" etc. are popular topics in
      3D programming, so not robbing the ruby namespace of such valuable
      real-estate seems nice).


* It shall be possible to check out the project from svn, compile and test
  on the following platforms: Mac OS X, GNU/Linux. MS Windows operating
  systems may also be supported in the future.

* The project will make a number of pre-compiled extensions available as gems.

* The project will supply source code and build scripts (via svn checkout)
  conducive to straightforward porting to other platforms.

* There shall be a test suite that exercises each call in each of the Base
  modules.

* All project documentation will be in Markdown format in files that end in
  `.txt`.

* The project will make some efforts to track versions of OpenGL.


### Things in the future

Once the base modules are implemented, there are several ideas on things to
do next.  This list is not really requirements, but a list of nice ideas to
try:

* Provide wrappers for glBegin/glEnd, eg: polygon()...translates to
  glBegin(GL_POLYGON)....glEnd

* Untyped versions of the multi-typed gl functions:  e.g., a single
  glVertex that examines its arguments and calls the appropriate
  glVertex{234}{fisdv} call in BaseGL.



Implementation
--------------

Our plan is to continue on with Yoshi's original code, modified
to use standard OpenGL-style constant and function names.


### Build environment ###

The build environment will use:

* use rake and mkrf. 
* minimize the number of additional tools required