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
>>>> &lt;http://www.smalltalkhub.com/#!/~kilon/GLTutorial&gt;
>>>>
>>>> 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.

Reply via email to