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
