Not sure I know what you mean but I’m using 807 on a MacBook Pro with just the 
full Jqt install.

> On Feb 27, 2020, at 9:28 PM, bill lam <[email protected]> wrote:
> 
> Did kernels need any modification?
> 
> Thu, 27 Feb 2020, Thomas McGuire написал(а):
>> It took me a while to understand this a little bit. But the shader can 
>> render any number of objects you just need to set up the data and tell the 
>> shader to paint the object. To create 2 cubes I had to modify the 
>> a_g_initialize function and the a_g_paint function. I have placed comments 
>> in the code trying to show with my limited understanding of OpenGL what is 
>> being done. To just create 2 duplicate cubes this code could be simplified.  
>> But if 2 different  types of objects needed to be rendered everything would 
>> likely stay the same with a second set of vertex and color data being added 
>> for the new object (right now I reuse vertexData and colorData).
>> 
>> 
>> a_g_initialize=: 3 : 0
>> if. p=. >@{. glGetString GL_VERSION do. smoutput 'GL_VERSION: ', memr 0 _1 
>> 2,~ p end.
>> if. 0=p do. smoutput 'cannot retrieve GL_VERSION' return. end.
>> if. p=. >@{. glGetString GL_VENDOR do. smoutput 'GL_VENDOR: ', memr 0 _1 2,~ 
>> p end.
>> if. p=. >@{. glGetString GL_RENDERER do. smoutput 'GL_RENDERER: ', memr 0 _1 
>> 2,~ p end.
>> if. p=. >@{. glGetString GL_SHADING_LANGUAGE_VERSION do. smoutput 
>> 'GL_SHADING_LANGUAGE_VERSION: ', memr 0 _1 2,~ p end.
>> GLSL=: wglGLSL''
>> 
>> wglPROC''
>> sprog=: 0
>> if. GLSL>120 do.
>> vsrc=. vsrc2
>> fsrc=. fsrc2
>> else.
>> vsrc=. vsrc1
>> fsrc=. fsrc1
>> if. 0=GLES_VERSION_jgles_ do.
>> vsrc=. vsrc,~ '#define lowp', LF, '#define mediump', LF, '#define highp', LF
>> fsrc=. fsrc,~ '#define lowp', LF, '#define mediump', LF, '#define highp', LF
>> end.
>> end.
>> vsrc=. '#version ',(":GLSL),((GLSL>:300)#(*GLES_VERSION){::' core';' 
>> es'),LF,vsrc
>> fsrc=. '#version ',(":GLSL),((GLSL>:300)#(*GLES_VERSION){::' core';' 
>> es'),LF,fsrc
>> if.(GLSL>:300)*.0~:GLES_VERSION_jgles_ do.
>> fsrc=. ('void main';'out vec4 gl_FragColor;',LF,'void main') stringreplace 
>> fsrc
>> end.
>> smoutput vsrc
>> smoutput fsrc
>> 'err program'=. gl_makeprogram vsrc;fsrc
>> if. #err do. smoutput err return. end.
>> 
>> NB. original cube data and the model-view-projection matrix
>> vertexAttr=: >@{. glGetAttribLocation program;'vertex'
>> assert. _1~: vertexAttr
>> colorAttr=: >@{. glGetAttribLocation program;'color'
>> assert. _1~: colorAttr
>> mvpUni=: >@{. glGetUniformLocation program;'mvp'
>> assert. _1~: mvpUni
>> 
>> NB. Second duplicate object as above
>> vertexAttr1=: >@{. glGetAttribLocation program;'vertex'
>> assert. _1~: vertexAttr1
>> colorAttr1=: >@{. glGetAttribLocation program;'color'
>> assert. _1~: colorAttr1
>> 
>> NB. Here is where my shape is defined. this provides the hooks
>> NB. between J data and openGL
>> NB. Here I increase the buffer vbo to 4 locations and reuse the
>> NB. object vertexData and colorData that make the colorful cube
>> glGenBuffers 2;vbo=: 4#_1
>> glBindBuffer GL_ARRAY_BUFFER; 0{vbo
>> glBufferData GL_ARRAY_BUFFER; (#vertexData); (symdat <'vertexData'); 
>> GL_STATIC_DRAW
>> glBindBuffer GL_ARRAY_BUFFER; 1{vbo
>> glBufferData GL_ARRAY_BUFFER; (#colorData); (symdat <'colorData'); 
>> GL_STATIC_DRAW
>> glBindBuffer GL_ARRAY_BUFFER; 2{vbo
>> glBufferData GL_ARRAY_BUFFER; (#vertexData); (symdat <'vertexData'); 
>> GL_STATIC_DRAW
>> glBindBuffer GL_ARRAY_BUFFER; 3{vbo
>> glBufferData GL_ARRAY_BUFFER; (#colorData); (symdat <'colorData'); 
>> GL_STATIC_DRAW
>> glBindBuffer GL_ARRAY_BUFFER; 0
>> 
>> sprog=: program
>> 
>> glClearColor 0; 0; 1; 0
>> )
>> 
>> 
>> a_g_paint=: 3 : 0
>> if. 0=sprog do. return. end.
>> 
>> wh=. gl_qwh''
>> glClearColor 0 0 0 0
>> glClear GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
>> 
>> glUseProgram sprog
>> glEnable GL_DEPTH_TEST
>> glEnable GL_CULL_FACE
>> 
>> NB. matrix convention: current matrix on the left
>> NB. note pre-multiplication
>> 
>> NB. model-view
>> NB. I created a new model: mvp1 so it will translate the cube
>> NB. so there will be 2 cubes side by side
>> mvp=: (gl_Rotate (0{R), 1 0 0 ) mp (gl_Rotate (1{R), 0 1 0) mp (gl_Rotate 
>> (2{R), 0 0 1) mp (gl_Scale STEPS%100) mp (gl_Translate 0.6 0 _8) mp 
>> glu_LookAt EYE,LR,UD,IO,UP
>> mvp1=: (gl_Rotate (0{R), 1 0 0 ) mp (gl_Rotate (1{R), 0 1 0) mp (gl_Rotate 
>> (2{R), 0 0 1) mp (gl_Scale STEPS%100) mp (gl_Translate _1.2 0 _8) mp 
>> glu_LookAt EYE,LR,UD,IO,UP
>> 
>> NB. projection
>> mvp=: mvp mp gl_Perspective 30, (%/wh),1 10
>> mvp1=: mvp1 mp gl_Perspective 30, (%/wh),1 10
>> 
>> NB. note GL_FALSE, no transpose
>> NB. Draw Object 1
>> glUniformMatrix4fv mvpUni; 1; GL_FALSE; mvp
>> 
>> glBindBuffer GL_ARRAY_BUFFER; 0{vbo
>> glEnableVertexAttribArray vertexAttr
>> glVertexAttribPointer vertexAttr; 3; GL_FLOAT; 0; 0; 0
>> 
>> glBindBuffer GL_ARRAY_BUFFER; 1{vbo
>> glEnableVertexAttribArray colorAttr
>> glVertexAttribPointer colorAttr; 3; GL_FLOAT; 0; 0; 0
>> 
>> glDrawArrays GL_TRIANGLES; 0; 36
>> 
>> NB. Draw object 2
>> glUniformMatrix4fv mvpUni; 1; GL_FALSE; mvp1
>> 
>> glBindBuffer GL_ARRAY_BUFFER; 2{vbo
>> glEnableVertexAttribArray vertexAttr1
>> glVertexAttribPointer vertexAttr1; 3; GL_FLOAT; 0; 0; 0
>> 
>> glBindBuffer GL_ARRAY_BUFFER; 3{vbo
>> glEnableVertexAttribArray colorAttr1
>> glVertexAttribPointer colorAttr1; 3; GL_FLOAT; 0; 0; 0
>> 
>> glDrawArrays GL_TRIANGLES; 0; 36
>> 
>> NB. Objects drawn perform glDisableVertexAttribArray
>> NB. what ever that is for
>> glBindBuffer GL_ARRAY_BUFFER; 0
>> glDisableVertexAttribArray colorAttr
>> glDisableVertexAttribArray vertexAttr
>> glDisableVertexAttribArray colorAttr1
>> glDisableVertexAttribArray vertexAttr1
>> 
>> glDisable GL_DEPTH_TEST
>> glDisable GL_CULL_FACE
>> 
>> glUseProgram 0
>> 
>> gl_clear ''
>> gl_rgb 0 255 0
>> gl_textcolor ''
>> gl_textxy 10 30
>> gl_text 'keys: x y z a s l r F10'
>> gl_textxy 10 50
>> gl_text 'scale: ',":STEPS%100
>> gl_textxy 10 70
>> gl_text 'angle: ',":R
>> gl_textxy 10 90
>> if. 0=sprog do. return. end.
>> gl_text 'matrix:'
>> for_i. i.4 do.
>> gl_textxy 10, 105+i*15
>> gl_text 6j2": i{mvp
>> end.
>> )
>> 
>> 
>>> On Feb 14, 2020, at 4:14 PM, Brian Schott <[email protected]> wrote:
>>> 
>>> Bill,
>>> 
>>> Thank you very much.
>>> 
>>> Mostly I want to get n turtles, not cubes, that are not rotating to time
>>> but behave like "Logo" turtles and react to commands in the Terminal window
>>> like Forward 3 and Right 90. So I want to start with 2 separate turtles and
>>> I guess I am all wrong in my idea that the long mvp commands are moving the
>>> eye, but moving the cube/turtle. So my next experiment will be to copy and
>>> edit the code beginning at the following line of code.
>>> 
>>> glGenBuffers 2;vbo=: 2#_1
>>> 
>>> So for example to make another cube/turtle I'm thinking that that line
>>> could be changed so that _2 replaces the _1. Does that make any sense?
>>> 
>>> *****************below I react to your code revisions***********************
>>> I had to change your f8 and f9 to f6 and f7 because on my Mac f8 is
>>> clipboard and f9 is run project.
>>> Now, at least when I put an smoutput into a_f6_fkey and a_f7_fkey I see
>>> they are being executed, but I do not see the cube, (and this happens
>>> without changing the focus to the Terminal window, which is needed below).
>>> After intially loading and running the shader.ijs script in the project
>>> window, I get a blank "a" window and each time I press F10 I get a new
>>> fresh, blank "a" window. But if I click on the Terminal window and then
>>> click on the "a" window and THEN press F10, I get the moving cube.
>>> Subsequent F6 and F7 presses produce the smoutput results in the Terminal
>>> window but BLANK the active "a" window.
>>> *****************above I react to your code revisions***********************
>>> 
>>> But the previous paragraph is mostly a distraction except that you code
>>> revision shows me a little about how the "handle" is important for finding
>>> the parent from the child and vice versa. And about repainting.
>>> 
>>> I am mostly interested in how commands in the Terminal window can be sent
>>> to the Cube in the "a" window. Any pointers?
>>> 
>>> 
>>> On Fri, Feb 14, 2020 at 1:58 AM bill lam <[email protected]> wrote:
>>> 
>>>> I tried to incoporate your change into shader.ijs
>>>> with f8/f9 to change value for gl_translate.
>>>> The changes lines are marked by NB. <<<<<
>>>> pressing f8/f9 can trigger repaint and the matrix
>>>> display also updated, but I can't see the cube at all.
>>>> Pressing F10 to start original code, the cube came back.
>>>> I did not pursue further but hope this is enough to
>>>> answer your question about how to repaint.
>>>> 
>>>> 
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
> 
> -- 
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --armor --export 4434BAB3
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to