opengl3 0.0.1.pre4 → 0.0.1.pre5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +115 -0
- data/lib/opengl/version.rb +1 -1
- data/lib/opengl/wrapper/core/2_x/GL_VERSION_2_0.rb +23 -1
- metadata +3 -2
data/README.md
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
# OpenGL (opengl3)
|
2
|
+
|
3
|
+
OpenGL wrapper library for Ruby
|
4
|
+
|
5
|
+
* Pure Ruby, no C/C++/Java extension included (thanks to ffi gem)
|
6
|
+
* OpenGL 2.1 ~ 4.2
|
7
|
+
* automatic error checking each function call
|
8
|
+
* Ruby-style wrapper (not complete)
|
9
|
+
* Inspired by PyOpenGL
|
10
|
+
|
11
|
+
Tested on
|
12
|
+
|
13
|
+
* Mac OS X 10.8 (MRI 1.9.3, Rubinius)
|
14
|
+
* Linux (MRI 1.9.3, JRuby 1.7, Rubinius)
|
15
|
+
* Windows (JRuby 1.7)
|
16
|
+
|
17
|
+
## Notice
|
18
|
+
|
19
|
+
Since the project is not complete, many functions are still C-style.
|
20
|
+
But don't worry, the gem makes use of `ffi` gem to import functions, and
|
21
|
+
therefore you can use ffi objects like `FFI::MemoryPointer` to work
|
22
|
+
with C-style OpenGL entrypoints.
|
23
|
+
|
24
|
+
## Ruby-Style OpenGL APIs
|
25
|
+
|
26
|
+
Please take a look at `lib/opengl/wrapper/**/*.rb`
|
27
|
+
to see if entrypoints are wrapped.
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
* `glGetString(pname)` -> `String`
|
32
|
+
* `glGen...`-like functions
|
33
|
+
- `glGenTextures(count)` -> `Array<Integer>`
|
34
|
+
- `glGenBuffers(count)` -> `Array<Integer>`
|
35
|
+
- and more ...
|
36
|
+
* `glDelete...`-like functions
|
37
|
+
- `glDeleteTextures(Array<Integer>)`
|
38
|
+
- `glDeleteBuffers(Array<Integer>)`
|
39
|
+
- and more ...
|
40
|
+
* `glGet...`-like functions
|
41
|
+
- `glGetIntegerv(pname, count)` -> `Array<Integer>`
|
42
|
+
- `glGetFloatv(pname, count)` -> `Array<Float>`
|
43
|
+
- `glGetTexParameteriv(target, pname, count)` -> `Array<Integer>`
|
44
|
+
- `glGetTexParameterfv(target, pname, count)` -> `Array<Float>`
|
45
|
+
- `glGetShaderiv(shader, pname, count)` -> `Array<Integer>`
|
46
|
+
- and more ...
|
47
|
+
* `glShaderSource(shader, Array<String>)`
|
48
|
+
* `glGetShaderInfoLog(shader)` -> `String`
|
49
|
+
* `glGetProgramInfoLog(program)` -> `String`
|
50
|
+
* More Ruby-style functions coming soon
|
51
|
+
|
52
|
+
block-style glMapBuffer / glMapBufferRange:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY) do |ptr|
|
56
|
+
ptr.put_array_of_GLfloat(offset_in_bytes, [ 1.0, 2.0, 3.0 ])
|
57
|
+
end
|
58
|
+
```
|
59
|
+
|
60
|
+
And helper functions
|
61
|
+
|
62
|
+
* `glGetVersion()` -> `Array<Integer>`
|
63
|
+
* `glGetShadingLanguageVersion()` -> `Array<Integer>`
|
64
|
+
* `glGetAvailableExtensions()` -> `Array<String>`
|
65
|
+
* `glIsShaderCompiled?(shader)` -> `Boolean`
|
66
|
+
* `glIsProgramLinked?(program)` -> `Boolean`
|
67
|
+
* `glUniformMatrixf(location, Matrix, transpose = true)` (Experimental)
|
68
|
+
* More helper functions coming soon
|
69
|
+
|
70
|
+
Note for functions has a offset with GLvoid* type
|
71
|
+
(ex: `glDrawElements`, `glVertexAttribPointer`)
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
offset_in_bytes = 0
|
75
|
+
glVertexAttribPointer 0, 3, GL_FLOAT, GL_FALSE, 0,
|
76
|
+
OpenGL::Type.pointer_offset(offset_in_bytes)
|
77
|
+
```
|
78
|
+
|
79
|
+
## Installation
|
80
|
+
|
81
|
+
Add this line to your application's Gemfile:
|
82
|
+
|
83
|
+
gem 'opengl3', :require => 'opengl'
|
84
|
+
|
85
|
+
And then execute:
|
86
|
+
|
87
|
+
$ bundle
|
88
|
+
|
89
|
+
Or install it yourself as:
|
90
|
+
|
91
|
+
$ gem install opengl3
|
92
|
+
|
93
|
+
## Usage
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
require 'opengl'
|
97
|
+
class App
|
98
|
+
include OpenGL::Constants
|
99
|
+
|
100
|
+
def initialize
|
101
|
+
# ... (window created)
|
102
|
+
self.extend OpenGL::GL.entrypoints
|
103
|
+
# OK, you can use OpenGL now
|
104
|
+
end
|
105
|
+
|
106
|
+
end
|
107
|
+
```
|
108
|
+
|
109
|
+
## Contributing
|
110
|
+
|
111
|
+
1. Fork it
|
112
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
113
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
114
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
115
|
+
5. Create new Pull Request
|
data/lib/opengl/version.rb
CHANGED
@@ -77,7 +77,9 @@ module OpenGL
|
|
77
77
|
# @param [String, Array<String>] codes
|
78
78
|
#
|
79
79
|
def glShaderSource(shader, codes)
|
80
|
-
pointers = Array(codes).map{|s|
|
80
|
+
pointers = Array(codes).map{|s|
|
81
|
+
s.is_a?(FFI::Pointer) ? s : FFI::MemoryPointer.from_string(s)
|
82
|
+
}
|
81
83
|
ptr = FFI::MemoryPointer.new(:pointer, pointers.count)
|
82
84
|
ptr.write_array_of_pointer(pointers)
|
83
85
|
super(shader, pointers.count, ptr, nil)
|
@@ -101,5 +103,25 @@ module OpenGL
|
|
101
103
|
glGetProgramiv(program, Constants::GL_LINK_STATUS, 1)[0] != 0
|
102
104
|
end
|
103
105
|
|
106
|
+
# a variant of glUniformMatrix*fv
|
107
|
+
#
|
108
|
+
# @param [GLint] location
|
109
|
+
# @param [Matrix] matrix
|
110
|
+
# @param [Boolean] transpose
|
111
|
+
#
|
112
|
+
def glUniformMatrixf(location, mat, transpose = true)
|
113
|
+
transpose = (transpose ? Constants::GL_TRUE : Constants::GL_FALSE)
|
114
|
+
|
115
|
+
# TODO: refactor it
|
116
|
+
if defined?(::Matrix) && mat.is_a?(::Matrix)
|
117
|
+
m, n = mat.row_size, mat.column_size
|
118
|
+
dim = (m == n ? "#{m}" : "#{n}x#{m}")
|
119
|
+
|
120
|
+
ptr = Type.GLfloat(m*n).write_array_of_GLfloat(mat.to_a.flatten)
|
121
|
+
end
|
122
|
+
|
123
|
+
send(:"glUniformMatrix#{dim}fv", location, 1, transpose, ptr)
|
124
|
+
end
|
125
|
+
|
104
126
|
end
|
105
127
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opengl3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.pre5
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -248,6 +248,7 @@ files:
|
|
248
248
|
- lib/opengl/wrapper/core/4_2/GL_VERSION_4_2.rb
|
249
249
|
- lib/opengl/wrapper.rb
|
250
250
|
- lib/opengl.rb
|
251
|
+
- README.md
|
251
252
|
homepage: https://github.com/davll/ruby-opengl
|
252
253
|
licenses: []
|
253
254
|
post_install_message:
|