Igor got you will try to avoid using #sizeOf: , even for a readability I can replace it with a simple method returning the same thing depending in platform.
Now because I am confused lets clarify how the whole things works because I see many errors in my code and clearly I don't understand how Nativeboost works. Note I am a C noob , so excuse me if I say anything stupid here. As far as functions call are concerned I see 3 possible scenariors a ) function(int var). Here the C function expects a simple variable of some type (int in this case) according to what you told me to make such variable I will do var := Nativeboost allocate:( NBExternalType typeof:'int') if I want to pass a value in that variable then I will do var nbInt32AtOffset: 0 put: 6 will call that function with Object function: var b) function(int* var) how I create the variable (pointer) ? how I put value in the variable (pointer) ? c) function( &var) Now I assume I will create a var variable same way as (a) var := Nativeboost allocate:( NBExternalType typeof:'int') but how I pass the address of var to the function ? I read the pdf of nativeboost but It did not clarify those things or simply I did not understand. Thanks on the instructions about NBExternalArray. So the reason of using this object is for convenience ? Igor Stasenko wrote > On 1 July 2013 20:40, kilon < > [email protected] > > wrote: >> Thanks Igor , yes I was aware of String Cr because I have done some >> googling >> around and it did find information on the subject. Apparently it failed >> because I had an error in my source. >> >> So for our next challenge is learning how to fetch data that a pointer >> points to. >> >> in this case I have an array that contains my vertex positions , called >> vertexPositions >> >> vertexPositions >> "the positions of vertices to be passed to opengl" >> >> ^ #( 0.75 0.75 0.0 1.0 >> 0.75 -0.75 0.0 1.0 >> -0.75 -0.75 0.0 1.0 ) >> >> so far so good >> >> so I create a pointer for that array >> >> vptrsize := (NBExternalType sizeOf: 'float')* self vertexPositions size. >> >> and then take that pointer and insert in each position the individual >> values >> from vertexPositions >> >> vertexPositions withIndexDo: [:each :i | >> "using nbUInt32AtOffset because we know pointer is 4 bytes :) >> " >> vpos nbFloat32AtOffset: (i-1)*(NBExternalType sizeOf: >> 'float') put: >> each value. >> Transcript show: ' I am putting to vpos in index: '; show: i-1; >> show:' >> value: '; show: each value; cr. >> ]. >> >> so far so good. >> > > just one small advice: do not use #sizeOf: sparingly.. it parsing the > type > and doing full type resolution when you do that. > you can remember the size of the type you need at boot/startup time, > there is no chance > it can change within same session :) > > but of course for demonstration purposes and readability it good. > >> now the tricky part is that I have a function that expects that Array , >> not >> the smalltalk version but the C version we just created >> >> gl bufferData_target: GL_ARRAY_BUFFER size: vptrsize data: ....... >> usage: >> GL_STATIC_DRAW. >> >> where you see the dots is where I should pass the data, in this case the >> C >> array >> >> I could do a vpo nbFloat32AtOffset: but that will return me only the >> individual value at the specific point (index) of the array, while I want >> to >> pass the entire array. >> >> So how I do that ? >> >> I explored NBExternalAdress and I cant find something that would return >> an >> array. Am I missing something obvious here ? >> > > just pass NBExternalAdress instance as argument and you done. > >> NBExternalAdress value , returns the number of the address and not that >> data >> contained in that address. >> >> I also see a NBExternalArray but I am not sure if it is what I should be >> using . >> > > arrayClass := NBExternalArray ofType: 'float'. > array := arrayClass new: 5. "or externalNew:5 , if you want to > allocate it in external memory" > > array at: 1 put: 10.1 "use just like normal Array" > > to pass it to function use: > > self soemFunction: array address. > >> Igor Stasenko wrote >>> On 30 June 2013 21:11, kilon < >> >>> [email protected] >> >>> > wrote: >>>> I am not going to post my code here cause it has become too big , you >>>> can >>>> find it here >>>> >>>> http://www.smalltalkhub.com/#!/~kilon/GLTutorial >>>> <http://www.smalltalkhub.com/#!/~kilon/GLTutorial> >>>> >>>> I tried adding newlines with String cr to my shaders strings, but >>>> apparently >>>> opengl is not convinced. It looks like smalltalk cr is not converted to >>>> C >>>> "\n" newlines. So how I do that ? >>>> >>> >>> simply replace all occurences of >>> Character cr >>> with >>> Character lf >>> (or crlf, if it wants that) >>> >>>> -- >>>> View this message in context: >>>> http://forum.world.st/Understanding-NBOpenGL-tp4686514p4696465.html >>>> Sent from the Pharo Smalltalk Developers mailing list archive at >>>> Nabble.com. >>>> >>> >>> >>> >>> -- >>> Best regards, >>> Igor Stasenko. >> >> >> >> >> >> -- >> View this message in context: >> http://forum.world.st/Understanding-NBOpenGL-tp4686514p4696666.html >> Sent from the Pharo Smalltalk Developers mailing list archive at >> Nabble.com. >> > > > > -- > Best regards, > Igor Stasenko. -- View this message in context: http://forum.world.st/Understanding-NBOpenGL-tp4686514p4696858.html Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
