Henrik Sperre Johansen wrote:
On 16.04.2010 01:10, Lawson English wrote:
Igor Stasenko wrote:
On 15 April 2010 23:02, Lawson English <[email protected]> wrote:
I tried to load Andreas Raab's ffi-based OpenGL packages into Pharo
1.0...
(Installer repository: 'http://source.squeak.org/FFI')
install: 'FFI-Pools';
install: 'FFI-Kernel';
install: 'FFI-Tests'.
(Installer repository: 'http://www.squeaksource.com/CroquetGL')
install: '3DTransform';
install: 'OpenGL-Pools';
install: 'OpenGL-Core'.
OpenGL example
I wasn't quite sure how to load them with Gofer so I did it
manually with
Monticello.
However, when I "doIt" with 'OpenGL example'
I get the error:
MessageNotUnderstood: SystemDictionary>>platformName
OpenGL class>>new
OpenGL class>>newIn:
OpenGL example
No doubt its something totally trivial... Suggestions?
Select a #platformname selector with mouse , and then press alt-m to
see who implements that message.
Then try sending it from workspace until to make sure you found right
implementor.
Then modify the source code in OpenGL class>>new accordingly.
;)
Unfortunately lots of nested references to it, starting with
Smalltalk platformName.
I can get as far as changing it to SmalltalkImage current
platformName but things get strange after that...
new
Smalltalk platformName = 'Win32' ifTrue:[^OGLWin32 basicNew
initialize].
Smalltalk platformName = 'unix'
ifTrue:
[(Smalltalk windowSystemName = 'Quartz')
"implicitly big endian"
ifTrue: [^OGLUnixQuartz basicNew initialize].
"default to X11 window system"
Smalltalk isLittleEndian
ifTrue: [^OGLUnixX11LE basicNew initialize]
ifFalse: [^OGLUnixX11BE basicNew initialize]].
Smalltalk platformName = 'Mac OS' ifTrue:[
Smalltalk osVersion asNumber < 1000
ifTrue: [^OGLMacOS9 basicNew initialize]
ifFalse:[^OGLMacOSX basicNew initialize].
].
^self error:'Cannot identify platform'
Try replacing windowSystemName with (SmalltalkImage current
getSystemAttribute: 1005).
1.0 (1.1 too, actually) does not include some of the abstraction
methods introduced in Squeak, which OpenGL uses.
Sob... Almost...
Worked my way through everything and now it blows up AFTER reserving an
OGL context (there's an blank rectangle in the window at least) with the
error:
improper store into indexable object
at the line ensure:[ogl destroy].
in OpenGL>>example
example "OpenGL example"
"A very simple OpenGL example"
| ogl frames startTime deltaTime framesPerSec bounds font |
font := StrikeFont familyName: 'Atlanta' pointSize: 11.
bounds := 0...@0 extent: 4...@400.
ogl := OpenGL newIn: bounds.
ogl ifNil:[^self error: 'Unable to create renderer'].
[frames := 0.
startTime := Time millisecondClockValue.
[Sensor anyButtonPressed] whileFalse:[
"start counting at second frame since first frame is penalized
by the upload of the bitmap font outside of ogl."
frames = 1 ifTrue:[startTime := Time millisecondClockValue].
ogl beginFrame.
"--- this is the actual scene content ---"
ogl glDisable: GLDepthTest. "for the simple example only"
ogl glDisable: GLLighting. "for the simple example only"
ogl glClearColor: 1.0 with: 1.0 with: 1.0 with: 1.0.
ogl glClear: GLColorBufferBit.
ogl glRotatef: 5.0 with: 0.0 with: 0.0 with: 1.0.
ogl glColor3f: 1.0 with: 0.0 with: 0.0.
ogl glBegin: GLPolygon.
ogl glVertex2f: -0.7 with: -0.7.
ogl glVertex2f: 0.7 with: -0.7.
ogl glVertex2f: 0.7 with: 0.7.
ogl glVertex2f: -0.7 with: 0.7.
ogl glEnd.
"--- here is the 2d overlay setup ---"
ogl glMatrixMode: GLProjection.
ogl glPushMatrix.
ogl glLoadIdentity.
ogl glMatrixMode: GLModelview.
ogl glPushMatrix.
ogl glLoadIdentity.
ogl glTranslated: -1 with: 1 with: 0.0.
ogl glScaled: (2.0 / bounds width) with: (-2.0 / bounds height)
with: 1.0.
ogl glDisable: GLDepthTest.
ogl glEnable: GLBlend.
ogl glBlendFunc: GLOne with: GLOneMinusSrcAlpha.
"--- here is the 2d overlay rendering ---"
deltaTime := Time millisecondsSince: startTime.
framesPerSec := frames * 1000 / (deltaTime max: 1) asFloat.
"@@@@: Fixme. It appears as if #drawString: depends on glColor
being set.
Makes no sense but I'm not going to figure this out - probably
some mishap
wrt. GLLighting being disabled."
ogl glColor3f: 0.0 with: 0.0 with: 0.0.
ogl drawString: frames printString, ' frames: ', (framesPerSec
truncateTo: 0.1), ' fps'
at: 0...@font hei...@0 font: font color: Color black.
ogl glDisable: GLBlend.
ogl glMatrixMode: GLModelview.
ogl glPopMatrix.
ogl glMatrixMode: GLProjection.
ogl glPopMatrix.
ogl glMatrixMode: GLModelview.
"--- end the end frame operations"
ogl endFrame.
ogl swapBuffers.
frames := frames + 1.
].
] ensure:[ogl destroy].
_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project