### Home Classes Methods

### Files

- History.rdoc
- Manifest.txt
- README.rdoc
- build_install.txt
- history.txt
- requirements_and_design.txt
- roadmap.txt
- scientific_use.txt
- thanks.txt
- tutorial.txt
- 3Dlabs-License.txt

### Class Index

Quicksearch

- OpenGL
- OpenGL::TestCase
- GL
- GLU
- GLUT
- Object

No matching classes.

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

[Validate]

Generated with the Darkfish Rdoc Generator 2.