I think you should stop the timer so as not to interference your code. handler for paint event (and all events) receive no y argument.
not sure what it looks like if mvp is translate only without projection from 3D to 2D. the screen is flat 2D. On Thu, Feb 13, 2020, 10:50 PM Brian Schott <[email protected]> wrote: > Bill, > > I have changed the original F10 to produce `paint 0` and the usual key to > produce `paint 1`. > > I have critical new information though: If I press x and y several times to > reposition the cube in the expected manner, and then I press F10. The cube > seems to go back to its original position (approximately?), so perhaps the > revised gl_Translate is accomplishing something, but what? > > I am sending below the whole shaderb.ijs file. > > > cocurrent 'demoshader' > > mp=: +/ . * > sprog=: 0 > GLSL=: 0 > STOP=: 0 > > A=: 0 : 0 > pc a; > minwh 300 300;cc g opengl flush; > rem form end; > ) > > a_run=: 3 : 0 > NB. if. -. checkrequire_qtdemo_ 'gles';'api/gles' do. return. end. > require 'gl2' > coinsert 'jgl2' > require 'gles' > coinsert 'jgles' > require '~addons/ide/qt/opengl.ijs' > coinsert 'qtopengl' > STEPS=: 100 > R=: 20 30 0 > EYE=: 0 0 1 > LR=: UD=: IO=: 0 > UP=: 0 1 0 > wd A > HD=: ".wd'qhwndc g' > wd 'ptimer 100' > wd 'pshow' > ) > > 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. > > vertexAttr=: >@{. glGetAttribLocation program;'vertex' > assert. _1~: vertexAttr > colorAttr=: >@{. glGetAttribLocation program;'color' > assert. _1~: colorAttr > mvpUni=: >@{. glGetUniformLocation program;'mvp' > assert. _1~: mvpUni > > glGenBuffers 2;vbo=: 2#_1 > glBindBuffer GL_ARRAY_BUFFER; {.vbo > glBufferData GL_ARRAY_BUFFER; (#vertexData); (symdat <'vertexData'); > GL_STATIC_DRAW > glBindBuffer GL_ARRAY_BUFFER; {: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_char=: 3 : 0 > if. 0=#sysdata do. return. end. > R=: 360 | R + 2 * 'xyz' = 0 { sysdata > k=. 0{sysdata > STEPS=: 200 <. STEPS + 's' = k > STEPS=: 3 >. STEPS - 'a' = k > LR=: LR - 0.01*'l'=k > LR=: LR + 0.01*'r'=k > gl_paint 0 > ) > > a_timer=: 3 : 0 > if. 0=STOP do. return. end. > R=: 360 | R + 2 * 1 1 1 > gl_sel HD > gl_paint'' > ) > > 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 > if. y-:1 do. mvp=: gl_Translate 20 3 0 > else. > 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 0 _8) mp > glu_LookAt EYE,LR,UD,IO,UP > > NB. projection > mvp=: mvp mp gl_Perspective 30, (%/wh),1 10 > end. > > NB. note GL_FALSE, no transpose > glUniformMatrix4fv mvpUni; 1; GL_FALSE; mvp > > glBindBuffer GL_ARRAY_BUFFER; {.vbo > glEnableVertexAttribArray vertexAttr > glVertexAttribPointer vertexAttr; 3; GL_FLOAT; 0; 0; 0 > > glBindBuffer GL_ARRAY_BUFFER; {:vbo > glEnableVertexAttribArray colorAttr > glVertexAttribPointer colorAttr; 3; GL_FLOAT; 0; 0; 0 > > glDrawArrays GL_TRIANGLES; 0; 36 > > glBindBuffer GL_ARRAY_BUFFER; 0 > glDisableVertexAttribArray colorAttr > glDisableVertexAttribArray vertexAttr > > glDisable GL_DEPTH_TEST > glDisable GL_CULL_FACE > > glUseProgram 0 > > gl_clear '' > gl_rgb 255 255 255 > 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. > ) > > a_f10_fkey=: 3 : 0 > NB. STOP=: -.STOP > gl_paint 1 > ) > > a_cancel=: a_close > > a_close=: 3 : 0 > STOP=: 0 > wd 'ptimer 0' > glDeleteBuffers ::0: 2; vbo > glDeleteProgram ::0: sprog > wd 'pclose' > ) > > vertexData=: 1&fc , 0 1 2 2 1 3&{"2 ] 6 4 3$ , 0&".@(-.&',') ;._2 [ 0 : 0 > _1 _1 1 > 1 _1 1 > _1 1 1 > 1 1 1 , > 1 _1 1 > 1 _1 _1 > 1 1 1 > 1 1 _1 , > 1 _1 _1 > _1 _1 _1 > 1 1 _1 > _1 1 _1 , > _1 _1 _1 > _1 _1 1 > _1 1 _1 > _1 1 1 , > _1 _1 _1 > 1 _1 _1 > _1 _1 1 > 1 _1 1 , > _1 1 1 > 1 1 1 > _1 1 _1 > 1 1 _1 , > ) > > NB. rgb for each vertex > colorData=: 1&fc , 0 1 2 2 1 3&{"2 ] 6 4 3$ , 0&".@(-.&',') ;._2 [ 0 : 0 > 0 0 1 > 1 0 1 > 0 1 1 > 1 1 1 > 1 0 1 > 1 0 0 > 1 1 1 > 1 1 0 > 1 0 0 > 0 0 0 > 1 1 0 > 0 1 0 > 0 0 0 > 0 0 1 > 0 1 0 > 0 1 1 > 0 0 0 > 1 0 0 > 0 0 1 > 1 0 1 > 0 1 1 > 1 1 1 > 0 1 0 > 1 1 0 > ) > > NB. ========================================================= > vsrc1=: 0 : 0 > attribute highp vec3 vertex; > attribute lowp vec3 color; > varying lowp vec4 v_color; > uniform mat4 mvp; > void main(void) > { > gl_Position = mvp * vec4(vertex,1.0); > v_color = vec4(color,1.0); > } > ) > > fsrc1=: 0 : 0 > varying lowp vec4 v_color; > void main(void) > { > gl_FragColor = v_color; > } > ) > > NB. ========================================================= > vsrc2=: 0 : 0 > in vec3 vertex; > in vec3 color; > out vec4 v_color; > uniform mat4 mvp; > void main(void) > { > gl_Position = mvp * vec4(vertex,1.0); > v_color = vec4(color,1.0); > } > ) > > fsrc2=: 0 : 0 > in vec4 v_color; > void main(void) > { > gl_FragColor = v_color; > } > ) > > NB. ========================================================= > a_run'' > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
