Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName
^Smalltalk osVersion = 'linux'
ifTrue: ['libGL.so.1']
ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode
"This method was automatically generated."
"void glMatrixMode(GLenum mode);"
<apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'>
^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest?
Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one) Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes. I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev < squeak-dev@lists.squeakfoundation.org> wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName ^Smalltalk osVersion = 'linux' ifTrue: ['libGL.so.1'] ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode "This method was automatically generated." "void glMatrixMode(GLenum mode);" <apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'> ^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest? Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
Hi all, beware of FFI 'long' and 'ulong'. They are currently meaning (32 bits) int and unsigned int! This dates back from the 80s when there were still odd OS with segmented memory and 16-bits int. long was thought as a safe int32_t at that time... and still means just that in current FFI.
I'd like to replace them with 'int' and 'uint', but we need to ensure backward compatibility etc...
FFI has ExternalType signedLongLong or just 'longlong' and ExternalType unsignedLongLong or 'ulonglong' which are 64 bits on all architectures. See implementors of #initializeAtomicTypes #initializeFFIConstants
If you want a type that can hold a pointer on both 32 and 64bits arch, then it's doable with a FFI type alias For example I have things like this in HDF5 module Notice the single #(fieldName fieldType) which defines an alias, while ordinary FFI struct gets an array of #(fieldName fieldType) (and replace Size_t with Intptr_t if the purpose is hodling a pointer, otherwise the ayatollahs of C standard will lash you)
ExternalStructure subclass: #'Size_t' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'HDF5-External-atomic'
Size_t class >>fields "Size_t defineFields" ^Smalltalk wordSize = 4 ifTrue: [#( value 'ulong')] ifFalse: [#( value 'ulonglong')]
However the "fields" must be re-generated when platform changes... I tried to automate that sometimes ago, see:
ExternalStructure class>>install "Resuming the image on another architecture may require a re-compilation of structure layout." | newPlatform | newPlatform := Smalltalk platformName. PreviousPlatform = newPlatform ifFalse: [self recompileStructures. PreviousPlatform := newPlatform]
It works if you switch from Win64 to MacOS64 for example... However, this mechanism is not used yet at time of code loading, so importing code generated on a different platform won't automatically update the structures (or alias) - the FFI package has no mechanism for that (maybe we could add a hook in MC?).
Le mer. 11 mars 2020 à 23:58, Bert Freudenberg bert@freudenbergs.de a écrit :
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one) Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes. I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev < squeak-dev@lists.squeakfoundation.org> wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName ^Smalltalk osVersion = 'linux' ifTrue: ['libGL.so.1'] ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode "This method was automatically generated." "void glMatrixMode(GLenum mode);" <apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'> ^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest? Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
Le jeu. 12 mars 2020 à 13:21, Nicolas Cellier < nicolas.cellier.aka.nice@gmail.com> a écrit :
Hi all, beware of FFI 'long' and 'ulong'. They are currently meaning (32 bits) int and unsigned int! This dates back from the 80s when there were still odd OS with segmented memory and 16-bits int. long was thought as a safe int32_t at that time... and still means just that in current FFI.
I'd like to replace them with 'int' and 'uint', but we need to ensure backward compatibility etc...
FFI has ExternalType signedLongLong or just 'longlong' and ExternalType unsignedLongLong or 'ulonglong' which are 64 bits on all architectures. See implementors of #initializeAtomicTypes #initializeFFIConstants
If you want a type that can hold a pointer on both 32 and 64bits arch, then it's doable with a FFI type alias For example I have things like this in HDF5 module Notice the single #(fieldName fieldType) which defines an alias, while ordinary FFI struct gets an array of #(fieldName fieldType) (and replace Size_t with Intptr_t if the purpose is hodling a pointer, otherwise the ayatollahs of C standard will lash you)
ExternalStructure subclass: #'Size_t' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'HDF5-External-atomic'
Size_t class >>fields "Size_t defineFields" ^Smalltalk wordSize = 4 ifTrue: [#( value 'ulong')] ifFalse: [#( value 'ulonglong')]
However the "fields" must be re-generated when platform changes... I tried to automate that sometimes ago, see:
ExternalStructure class>>install "Resuming the image on another architecture may require a re-compilation of structure layout." | newPlatform | newPlatform := Smalltalk platformName. PreviousPlatform = newPlatform ifFalse: [self recompileStructures. PreviousPlatform := newPlatform]
It works if you switch from Win64 to MacOS64 for example... However, this mechanism is not used yet at time of code loading, so importing code generated on a different platform won't automatically update the structures (or alias) - the FFI package has no mechanism for that (maybe we could add a hook in MC?).
Hmm, there is already a MC hook that recompiles the field spec (it sends
#compileFields). But it does not re-generate field accessors (self compileFields: fieldSpec withAccessors: #never.) Further calls to checkFieldLayoutChange don't recompile the fields either, because the compiledSpec is now up-to-date "thanks" to MC hook.
I think I did that purposedly for avoiding a bunch of 'only timestamp changed', but this was not the right solution for cross-platform support. Since Eliot has also protected spurious recompilation thru #maybeCompileAccessor:withSelector: it's safer to regenerate the accessors. I do change that now in https://source.squeak.org/FFI/FFI-Kernel-nice.68.diff
Le mer. 11 mars 2020 à 23:58, Bert Freudenberg bert@freudenbergs.de a écrit :
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one) Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes. I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev < squeak-dev@lists.squeakfoundation.org> wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName ^Smalltalk osVersion = 'linux' ifTrue: ['libGL.so.1'] ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode "This method was automatically generated." "void glMatrixMode(GLenum mode);" <apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'> ^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest? Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
Would it be possible to include an opaque "pointer" basic type in the FFI, to prevent reinventing the wheel in each project? It should reshape accordingly with the platform. If not possible, what are the hurdles?
Nicolas Cellier nicolas.cellier.aka.nice@gmail.com schrieb am Do., 12. März 2020, 13:21:
Hi all, beware of FFI 'long' and 'ulong'. They are currently meaning (32 bits) int and unsigned int! This dates back from the 80s when there were still odd OS with segmented memory and 16-bits int. long was thought as a safe int32_t at that time... and still means just that in current FFI.
I'd like to replace them with 'int' and 'uint', but we need to ensure backward compatibility etc...
FFI has ExternalType signedLongLong or just 'longlong' and ExternalType unsignedLongLong or 'ulonglong' which are 64 bits on all architectures. See implementors of #initializeAtomicTypes #initializeFFIConstants
If you want a type that can hold a pointer on both 32 and 64bits arch, then it's doable with a FFI type alias For example I have things like this in HDF5 module Notice the single #(fieldName fieldType) which defines an alias, while ordinary FFI struct gets an array of #(fieldName fieldType) (and replace Size_t with Intptr_t if the purpose is hodling a pointer, otherwise the ayatollahs of C standard will lash you)
ExternalStructure subclass: #'Size_t' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'HDF5-External-atomic'
Size_t class >>fields "Size_t defineFields" ^Smalltalk wordSize = 4 ifTrue: [#( value 'ulong')] ifFalse: [#( value 'ulonglong')]
However the "fields" must be re-generated when platform changes... I tried to automate that sometimes ago, see:
ExternalStructure class>>install "Resuming the image on another architecture may require a re-compilation of structure layout." | newPlatform | newPlatform := Smalltalk platformName. PreviousPlatform = newPlatform ifFalse: [self recompileStructures. PreviousPlatform := newPlatform]
It works if you switch from Win64 to MacOS64 for example... However, this mechanism is not used yet at time of code loading, so importing code generated on a different platform won't automatically update the structures (or alias) - the FFI package has no mechanism for that (maybe we could add a hook in MC?).
Le mer. 11 mars 2020 à 23:58, Bert Freudenberg bert@freudenbergs.de a écrit :
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one) Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes. I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev < squeak-dev@lists.squeakfoundation.org> wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName ^Smalltalk osVersion = 'linux' ifTrue: ['libGL.so.1'] ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode "This method was automatically generated." "void glMatrixMode(GLenum mode);" <apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'> ^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest? Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
Well, we have void *, it's opaque enough. In this case, the storage area must be allocated on heap by some foreign function, and a pointer to it passed back as handle. The problem with void * is that it is not specific enough. We thus generally create a type alias. A type alias is a subclass of ExternalStructure. As such, the class name can be used as a type specification in external function interface. An aliased type differs from a regular struct by the fields definition at class side. While structure has fields made of an array of pairs #( #(memberName ffiType) ), an aliased type as a single array #( nil ffiType ). Using nil avoids creating an accessor. The ffiType can be an integer large enough to hold a pointer (intptr_t, but we do not support that in FFI) - See WinHandle in the FFI-Win32 examples - or 'void *' (I think it may work, but it's a long time since I did not test).
Le jeu. 12 mars 2020 à 15:21, Jakob Reschke forums.jakob@resfarm.de a écrit :
Would it be possible to include an opaque "pointer" basic type in the FFI, to prevent reinventing the wheel in each project? It should reshape accordingly with the platform. If not possible, what are the hurdles?
Nicolas Cellier nicolas.cellier.aka.nice@gmail.com schrieb am Do., 12. März 2020, 13:21:
Hi all, beware of FFI 'long' and 'ulong'. They are currently meaning (32 bits) int and unsigned int! This dates back from the 80s when there were still odd OS with segmented memory and 16-bits int. long was thought as a safe int32_t at that time... and still means just that in current FFI.
I'd like to replace them with 'int' and 'uint', but we need to ensure backward compatibility etc...
FFI has ExternalType signedLongLong or just 'longlong' and ExternalType unsignedLongLong or 'ulonglong' which are 64 bits on all architectures. See implementors of #initializeAtomicTypes #initializeFFIConstants
If you want a type that can hold a pointer on both 32 and 64bits arch, then it's doable with a FFI type alias For example I have things like this in HDF5 module Notice the single #(fieldName fieldType) which defines an alias, while ordinary FFI struct gets an array of #(fieldName fieldType) (and replace Size_t with Intptr_t if the purpose is hodling a pointer, otherwise the ayatollahs of C standard will lash you)
ExternalStructure subclass: #'Size_t' instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'HDF5-External-atomic'
Size_t class >>fields "Size_t defineFields" ^Smalltalk wordSize = 4 ifTrue: [#( value 'ulong')] ifFalse: [#( value 'ulonglong')]
However the "fields" must be re-generated when platform changes... I tried to automate that sometimes ago, see:
ExternalStructure class>>install "Resuming the image on another architecture may require a re-compilation of structure layout." | newPlatform | newPlatform := Smalltalk platformName. PreviousPlatform = newPlatform ifFalse: [self recompileStructures. PreviousPlatform := newPlatform]
It works if you switch from Win64 to MacOS64 for example... However, this mechanism is not used yet at time of code loading, so importing code generated on a different platform won't automatically update the structures (or alias) - the FFI package has no mechanism for that (maybe we could add a hook in MC?).
Le mer. 11 mars 2020 à 23:58, Bert Freudenberg bert@freudenbergs.de a écrit :
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one) Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes. I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev < squeak-dev@lists.squeakfoundation.org> wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName ^Smalltalk osVersion = 'linux' ifTrue: ['libGL.so.1'] ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode "This method was automatically generated." "void glMatrixMode(GLenum mode);" <apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'> ^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest? Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
On 12/03/20 5:51 pm, Nicolas Cellier wrote:
FFI has ExternalType signedLongLong or just 'longlong' and ExternalType unsignedLongLong or 'ulonglong' which are 64 bits on all architectures.
C is one of my favorite programming languages (for speed) but its types are horrible. I prefer explicit names like uint8, int8 etc, particularly for low level operations like bit shifts or holding persistent data. E.g.,
#if sizeof(int) == 32 typedef int int32; #endif #if sizeof(long) == 32 typedef long int32; #endif
Also something like:
#define _nullp ((char *)0) #define s2p(aSize) ((void *)(_nullp + (int)aSize)) #define p2s(aPointer) ((char *)(aPointer) - _nullp)
takes care of the integer/pointer mix up warnings.
Regards .. Subbu
On 28/05/20 10:36 pm, K K Subbu wrote:
#if sizeof(int) == 32 typedef int int32; #endif #if sizeof(long) == 32 typedef long int32; #endif
Please ignore this nonsense. I meant to write a pseudo code and it came out looking like some weird C like stuff.
sleep deficit? lack of coffee? lockdown blues? perhaps all.
:-( .. Subbu
Quick update. (remember, this is a side project of mine, I am not on this full time, just on "wind-down" time from the PEG grammar I am working on)
Taking Bert's advice
Step 1: verify working on 32 bit machines. Well, I do not have a 32 bit machine that can run squeak (old pentium laptop --the kind that catches on fire) and I tried running side-by-side on Ubuntu.
64 bit runs fine, 32 bit tries to launch and cannot find the display driver. I could install 32 bit compat libs on my Slackware distro boot, but I prefer to keep that pristine.
I don't care for fighting with Ubuntu, so if anybody knows a quick fix, much appreciated. I can get the exact error if needed, just need to reboot and retry.
step 2: Make it work on 64 bits.
FFI calls crap out with the Croquet install so I attempted going from first principles as described here: http://pharo.gemtalksystems.com/book/LanguageAndLibraries/3DGraphicsAndOpenG...
.
This example:
| ogl green canvas fade |
ogl := OpenGL newIn: (0@0 extent: 300@300).
canvas := OGLCanvas new initialize: ogl.
fade:= 0.
1000 timesRepeat: [
ogl glClearColor:0 with: fade with: 0 with: 1.
ogl glClear: 16r4000.
ogl swapBuffers.
fade := fade + 0.001.
].
after up a black square, dies here:
glClear: mask
"This method was automatically generated."
"void glClear(GLbitfield mask);"
<apicall: void 'glClear' (ulong) module: 'opengl32.dll'>
^self externalCallFailed
with the externalCallFailed. (why is it looking for a freaking .dll?)
My thought process is now:
1. Write a c openGL program and verify it works. (the mesa-gears linux example works fine)
2. Work through FFI in Squeak so I can debug at that level.
---- On Wed, 11 Mar 2020 18:57:39 -0400 Bert Freudenberg bert@freudenbergs.de wrote ----
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one)
Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes.
I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev mailto:squeak-dev@lists.squeakfoundation.org wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName
^Smalltalk osVersion = 'linux'
ifTrue: ['libGL.so.1']
ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode
"This method was automatically generated."
"void glMatrixMode(GLenum mode);"
<apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'>
^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest?
Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
On 18/03/20 5:28 PM, gettimothy via Squeak-dev wrote:
Step 1: verify working on 32 bit machines. Well, I do not have a 32 bit machine that can run squeak (old pentium laptop --the kind that catches on fire) and I tried running side-by-side on Ubuntu. 64 bit runs fine, 32 bit tries to launch and cannot find the display driver. I could install 32 bit compat libs on my Slackware distro boot, but I prefer to keep that pristine. I don't care for fighting with Ubuntu, so if anybody knows a quick fix, much appreciated. I can get the exact error if needed, just need to reboot and retry.
Have you tried booting 32-bit Ubuntu from a live USB (4GB+) drive for your experiments?
Regards .. Subbu
Hi Subbu,
I will keep it in mind. My focus now is on building openGL tutorial programs such as this: https://paroj.github.io/gltut/index.html or this: https://www.linuxjournal.com/content/introduction-opengl-programming
the exercise is already giving me insight into the Squeak openGL and should be of use when I get to the FFI part.
cheers,
t
---- On Thu, 19 Mar 2020 04:00:06 -0400 K K Subbu mailto:kksubbu.ml@gmail.com wrote ----
On 18/03/20 5:28 PM, gettimothy via Squeak-dev wrote:
Step 1: verify working on 32 bit machines. Well, I do not have a 32 bit machine that can run squeak (old pentium laptop --the kind that catches on fire) and I tried running side-by-side on Ubuntu. 64 bit runs fine, 32 bit tries to launch and cannot find the display driver. I could install 32 bit compat libs on my Slackware distro boot, but I prefer to keep that pristine. I don't care for fighting with Ubuntu, so if anybody knows a quick fix, much appreciated. I can get the exact error if needed, just need to reboot and retry.
Have you tried booting 32-bit Ubuntu from a live USB (4GB+) drive for your experiments?
Regards .. Subbu
The OpenGL class has two example methods on the class side. Trying these is what I meant with "make sure it works in 32 bits":
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: 400@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 height@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].
- Bert -
On Thu, Mar 19, 2020 at 5:57 AM gettimothy via Squeak-dev < squeak-dev@lists.squeakfoundation.org> wrote:
Hi Subbu,
I will keep it in mind. My focus now is on building openGL tutorial programs such as this: https://paroj.github.io/gltut/index.html or this: https://www.linuxjournal.com/content/introduction-opengl-programming
the exercise is already giving me insight into the Squeak openGL and should be of use when I get to the FFI part.
cheers,
t
---- On Thu, 19 Mar 2020 04:00:06 -0400 *K K Subbu <kksubbu.ml@gmail.com kksubbu.ml@gmail.com>* wrote ----
On 18/03/20 5:28 PM, gettimothy via Squeak-dev wrote:
Step 1: verify working on 32 bit machines. Well, I do not have a 32 bit machine that can run squeak (old pentium laptop --the kind that catches on fire) and I tried running side-by-side on Ubuntu. 64 bit runs fine, 32 bit tries to launch and cannot find the display driver. I could install 32 bit compat libs on my Slackware distro boot, but I prefer to keep that pristine. I don't care for fighting with Ubuntu, so if anybody knows a quick fix, much appreciated. I can get the exact error if needed, just need to reboot and retry.
Have you tried booting 32-bit Ubuntu from a live USB (4GB+) drive for your experiments?
Regards .. Subbu
Squeak 32 does not run 'seamlessly' on ubuntu 18 . After a day of wrangling it, It starts and I can set the preferences wizard up to rhe point where it must connect to the Internet to download and install ffi, osprocess, git, etc ..at that point, what should be the 'ok' button says 'you dont have internet access' or something to that effect.
Tldr; could not get to OpenGL example on 32 bit install on 64 bit Ubuntu 18 with i386 libs installed.
I got tired of trying and moved to another approach.
If you know of a fix for the internet stuff, I can try again come Tuesday
Fwiw, the 64 bit squeak installs fine as does the CroquetGL stuff and OpenGL example does not work. The ffi? primitives fail.
On a happy note, I was able to build a simple c example after a day, today, of wrangling, and displai a triangle.
Linking libraries was huge issue, which I grok now, and it leads ne to wonder how the Squeak OpenGL is even aware of the existing libraries.. (i doubt it is)
For example -lGL had to be xhanged to -lOpenGL in my program as did the -L path to get C to talk to the graphics card via the OpenGL stuff.
Cheers
t
---- On Thu, 19 Mar 2020 19:06:37 -0400 bert@freudenbergs.de wrote ----
The OpenGL class has two example methods on the class side. Trying these is what I meant with "make sure it works in 32 bits":
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: 400@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 height@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].
- Bert -
On Thu, Mar 19, 2020 at 5:57 AM gettimothy via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Hi Subbu,
I will keep it in mind. My focus now is on building openGL tutorial programs such as this: https://paroj.github.io/gltut/index.html or this: https://www.linuxjournal.com/content/introduction-opengl-programming
the exercise is already giving me insight into the Squeak openGL and should be of use when I get to the FFI part.
cheers,
t
---- On Thu, 19 Mar 2020 04:00:06 -0400 K K Subbu kksubbu.ml@gmail.com wrote ----
On 18/03/20 5:28 PM, gettimothy via Squeak-dev wrote:
Step 1: verify working on 32 bit machines. Well, I do not have a 32 bit machine that can run squeak (old pentium laptop --the kind that catches on fire) and I tried running side-by-side on Ubuntu. 64 bit runs fine, 32 bit tries to launch and cannot find the display driver. I could install 32 bit compat libs on my Slackware distro boot, but I prefer to keep that pristine. I don't care for fighting with Ubuntu, so if anybody knows a quick fix, much appreciated. I can get the exact error if needed, just need to reboot and retry.
Have you tried booting 32-bit Ubuntu from a live USB (4GB+) drive for your experiments?
Regards .. Subbu
Ubuntu 18 is hugely broken; Canonical took out all the 32 bit support, so if you want to run 32 bit apps, you have to install ALL the 32 bit libraries. Better solution is to install 16.04, it’d be the easiest way to go.
/————————————————————/ For encrypted mail use jgpfersich@protonmail.com Get a free account at ProtonMail.com Web: https://objectnets.net and https://objectnets.org https://datascilv.com https://datascilv.org
On Mar 19, 2020, at 17:48, gettimothy via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Squeak 32 does not run 'seamlessly' on ubuntu 18 . After a day of wrangling it, It starts and I can set the preferences wizard up to rhe point where it must connect to the Internet to download and install ffi, osprocess, git, etc ..at that point, what should be the 'ok' button says 'you dont have internet access' or something to that effect.
Tldr; could not get to OpenGL example on 32 bit install on 64 bit Ubuntu 18 with i386 libs installed.
I got tired of trying and moved to another approach.
If you know of a fix for the internet stuff, I can try again come Tuesday
Fwiw, the 64 bit squeak installs fine as does the CroquetGL stuff and OpenGL example does not work. The ffi? primitives fail.
On a happy note, I was able to build a simple c example after a day, today, of wrangling, and displai a triangle.
Linking libraries was huge issue, which I grok now, and it leads ne to wonder how the Squeak OpenGL is even aware of the existing libraries.. (i doubt it is)
For example -lGL had to be xhanged to -lOpenGL in my program as did the -L path to get C to talk to the graphics card via the OpenGL stuff.
Cheers
t
---- On Thu, 19 Mar 2020 19:06:37 -0400 bert@freudenbergs.de wrote ----
The OpenGL class has two example methods on the class side. Trying these is what I meant with "make sure it works in 32 bits":
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: 400@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 height@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].
- Bert -
On Thu, Mar 19, 2020 at 5:57 AM gettimothy via Squeak-dev squeak-dev@lists.squeakfoundation.org wrote:
Hi Subbu,
I will keep it in mind. My focus now is on building openGL tutorial programs such as this: https://paroj.github.io/gltut/index.html or this: https://www.linuxjournal.com/content/introduction-opengl-programming
the exercise is already giving me insight into the Squeak openGL and should be of use when I get to the FFI part.
cheers,
t
---- On Thu, 19 Mar 2020 04:00:06 -0400 K K Subbu kksubbu.ml@gmail.com wrote ----
On 18/03/20 5:28 PM, gettimothy via Squeak-dev wrote:
Step 1: verify working on 32 bit machines. Well, I do not have a 32 bit machine that can run squeak (old pentium laptop --the kind that catches on fire) and I tried running side-by-side on Ubuntu. 64 bit runs fine, 32 bit tries to launch and cannot find the display driver. I could install 32 bit compat libs on my Slackware distro boot, but I prefer to keep that pristine. I don't care for fighting with Ubuntu, so if anybody knows a quick fix, much appreciated. I can get the exact error if needed, just need to reboot and retry.
Have you tried booting 32-bit Ubuntu from a live USB (4GB+) drive for your experiments?
Regards .. Subbu
Hi Bert,
I got the latest 5.3 32 bit installed on the old laptop.
on linux, glxgears works.
OpenGL example does not work.
Same error as on the 64 bit box:
glPixelStorei: pname with: param
"This method was automatically generated."
"void glPixelStorei(GLenum pname, GLint param);"
<apicall: void 'glPixelStorei' (ulong long) module: '#openGLLibraryName'>
^self externalCallFailed
cheers,
tty
---- On Wed, 11 Mar 2020 18:57:39 -0400 Bert Freudenberg mailto:bert@freudenbergs.de wrote ----
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one)
Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes.
I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev mailto:squeak-dev@lists.squeakfoundation.org wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName
^Smalltalk osVersion = 'linux'
ifTrue: ['libGL.so.1']
ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode
"This method was automatically generated."
"void glMatrixMode(GLenum mode);"
<apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'>
^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest?
Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
What's the actual error in 32 bits?
Also, make sure that FFI works at all - I think there are test examples in the FFI package.
- Bert -
On Tue, Mar 24, 2020 at 11:59 AM gettimothy gettimothy@zoho.com wrote:
Hi Bert,
I got the latest 5.3 32 bit installed on the old laptop.
on linux, glxgears works.
OpenGL example does not work.
Same error as on the 64 bit box:
glPixelStorei: pname with: param "This method was automatically generated." "void glPixelStorei(GLenum pname, GLint param);" <apicall: void 'glPixelStorei' (ulong long) module: '#openGLLibraryName'> ^self externalCallFailed
cheers,
tty
---- On Wed, 11 Mar 2020 18:57:39 -0400 *Bert Freudenberg <bert@freudenbergs.de bert@freudenbergs.de>* wrote ----
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one) Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes. I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev < squeak-dev@lists.squeakfoundation.org> wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName ^Smalltalk osVersion = 'linux' ifTrue: ['libGL.so.1'] ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode "This method was automatically generated." "void glMatrixMode(GLenum mode);" <apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'> ^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest? Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
Hi Bert,
The actual error is "externalCallFailed" output.
I will do the FFI stuff tomorrow.
Much appreciated.
tty.
---- On Tue, 24 Mar 2020 18:20:46 -0400 Bert Freudenberg bert@freudenbergs.de wrote ----
What's the actual error in 32 bits?
Also, make sure that FFI works at all - I think there are test examples in the FFI package.
- Bert -
On Tue, Mar 24, 2020 at 11:59 AM gettimothy mailto:gettimothy@zoho.com wrote:
Hi Bert,
I got the latest 5.3 32 bit installed on the old laptop.
on linux, glxgears works.
OpenGL example does not work.
Same error as on the 64 bit box:
glPixelStorei: pname with: param
"This method was automatically generated."
"void glPixelStorei(GLenum pname, GLint param);"
<apicall: void 'glPixelStorei' (ulong long) module: '#openGLLibraryName'>
^self externalCallFailed
cheers,
tty
---- On Wed, 11 Mar 2020 18:57:39 -0400 Bert Freudenberg mailto:bert@freudenbergs.de wrote ----
I'd suggest to get OpenGL working outside of Croquet first:
http://www.squeaksource.com/CroquetGL.html
Step 1: Verify this works in 32 bits. (assuming you are doing this on Linux, you can run 32 bit Squeak side-by-side with the 64 bit one)
Step 2: Make it work in 64 bits.
The second step requires that you understand how FFI works, and how it handles e.g. pointers and integer sizes.
I am assuming we do have a working 64 bit FFI, at least for x86_64 machines.
E.g. the OGLUnix>>glExtGetProcAddress: method returns a pointer. On a 32 bit system, that fits into a 'ulong' which is 32 bits. On a 64 bit system, a pointer is 64 bits wide so it would not fit into a 32 bit word. Now I don't know how many bits 'ulong' has in our 64 bit FFI, but that declaration may have to change. Etc. pp.
If you have questions about FFI then those are best directed at the vm-dev list since it is dealing with VM-level interfaces. CC'ing, please follow up there.
- Bert -
On Wed, Mar 11, 2020 at 2:54 PM gettimothy via Squeak-dev mailto:squeak-dev@lists.squeakfoundation.org wrote:
Okey dokey,
Poking along, there is a stray glyph in OGLUnix openGLLibraryName after
openGLLibraryName
^Smalltalk osVersion = 'linux'
ifTrue: ['libGL.so.1']
ifFalse: ['GL']
I removed it in my install and got past that error.
Working exclusively with Croquet(Master)...
My next error is in OGLUnixX11LE(OpenGL)>>glMatrixMode:
glMatrixMode: mode
"This method was automatically generated."
"void glMatrixMode(GLenum mode);"
<apicall: void 'glMatrixMode' (ulong) module: '#openGLLibraryName'>
^self externalCallFailed
The apicall:... fails
How to think about this?
Is Croquet behind OpenGL latest?
Would teaching myself OpenGL programming be of use to the Croquet project?
cheers,
tty
squeak-dev@lists.squeakfoundation.org