On 16 April 2010 03:32, Lawson English <[email protected]> wrote:
> 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."

it makes sense.
The font is a bit mask, which defines an opaque and (semi)transparent pixels,
not black and white ones.
So, you need to provide a color, which will be used to paint opaque pixels.

>       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
>



-- 
Best regards,
Igor Stasenko AKA sig.

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to