That works.

It's about three times as complicated as I was hoping for, so I'll
want to study the mechanisms, but you've given me what looks like a
good starting point.

Thanks,

-- 
Raul


On Fri, Jun 26, 2015 at 10:11 PM, bill lam <[email protected]> wrote:
> Here is a simple example from opengl superbible
>
>> https://github.com/openglsuperbible/sb6code/blob/master/src/singlepoint/singlepoint.cpp
>
> A direct translation without gles utility verbs is (beware
> line wrapping)
>
> require 'gles'
>
> coclass 'singlepoint'
> coinsert 'jgles'
>
> fix_version=: 3 : 0
> GLSL=. wglGLSL''
> ('#version 430 core';'#version ',(":GLSL),((GLSL>:300)#(*GLES_VERSION){::' 
> core';' es')) stringreplace y
> )
>
> create=: init
> destroy=: codestroy
>
> form_close=: 3 : 0
> shutdown''
> wd 'pclose'
> destroy''
> )
>
> form_g_initialize=: startup
> form_g_paint=: render
>
> FORM=: 0 : 0
> pc form;
> minwh 300 300;cc g opengl flush;
> )
>
> forminit=: 3 : 0
> wd FORM
> wd 'pn ', title
> wd 'pshow'
> )
>
> NB. =========================================================
>
> program=: 0
> vao=: ,0
>
> init=: 3 : 0
> title=: 'OpenGL SuperBible - Single Point'
> forminit''
> )
>
> vs_source=: 0 : 0
> #version 430 core
>
> void main(void)
> {
>     gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
> }
> )
>
> fs_source=: 0 : 0
> #version 430 core
>
> out vec4 color;
>
> void main(void)
> {
>     color = vec4(0.0, 0.8, 1.0, 1.0);
> }
> )
>
> startup=: 3 : 0
> vs_source=: fix_version vs_source
> fs_source=: fix_version fs_source
>
> program=: glCreateProgram''
> fs=. glCreateShader GL_FRAGMENT_SHADER
> glShaderSource fs; 1; (,symdat <'fs_source'); <<0
> glCompileShader fs
>
> vs=. glCreateShader GL_VERTEX_SHADER
> glShaderSource vs; 1; (,symdat <'vs_source'); <<0
> glCompileShader vs
>
> glAttachShader program; vs
> glAttachShader program; fs
>
> glLinkProgram program
>
> glGenVertexArrays 1; vao
> glBindVertexArray {.vao
> )
>
> render=: 3 : 0
> red=. 1.0 0.0 0.0 1.0
> glClearBufferfv GL_COLOR; 0; red
>
> glUseProgram program
>
> glPointSize 40.0
>
> glDrawArrays GL_POINTS; 0; 1
> )
>
> shutdown=: 3 : 0
> glDeleteVertexArrays 1; vao
> glDeleteProgram program
> )
>
> ''conew'singlepoint'
>
> Пт, 26 июн 2015, Raul Miller написал(а):
>> https://www.opengl.org/discussion_boards/showthread.php/164054-Frag-shader-without-vertex-shader
>> seems to confirm that vertex shaders are supposed to be optional.
>>
>> But I have added a vertex shader, and that did not help.
>>
>> Also, I moved glUseProgram into the paint event - and that made no
>> difference. (It should not make a difference, though, as the
>> underlying system is basically a state machine - once something gets
>> set to a value it should retain that value until something else
>> changes it. Still, when trying to isolate a problem, every assumption
>> remains suspect.)
>>
>> require 'graphics/gl2 api/gles'
>> coinsert 'jgl2 jgles'
>>
>> FORM=: 0 : 0
>>  pc form closeok;
>>  minwh 320 240; cc gl opengl flush;
>> )
>> vshader=: 0 :0
>>   #version 120
>>   void main(void) {
>>     gl_Position=ftransform();
>>   }
>> )
>> fshader=: 0 :0
>>   #version 120
>>   void main(void) {
>>     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
>>   }
>> )
>> form_run=: 3 : 0
>>   wd FORM
>>   wd 'pshow'
>> )
>> form_gl_initialize=: 3 : 0
>>   smoutput 'initializing'
>>   smoutput wglGLSL''
>>   'err program'=: gl_makeprogram vshader;fshader
>>   if.#err do.
>>     smoutput 'fail'
>>     smoutput err return. end.
>> )
>> form_gl_paint=: 3 : 0
>>   smoutput 'painting'
>>   glUseProgram program
>> )
>> form_run''
>>
>> Session still gets:
>> initializing
>> 450
>> painting
>>
>> painting
>>
>> And, the rendered image is still black.
>>
>> Thanks,
>>
>> --
>> Raul
>>
>> On Fri, Jun 26, 2015 at 9:54 PM, bill lam <[email protected]> wrote:
>> > Also can you confirm vertex (rather than fragment) shader is optional?
>> >  On Jun 27, 2015 8:56 AM, "Raul Miller" <[email protected]> wrote:
>> >
>> >> That's an interesting clue. Thank you.
>> >>
>> >> But I'm still not understanding something important. For example, this
>> >> still renders black:
>> >>
>> >> require 'graphics/gl2 api/gles'
>> >> coinsert 'jgl2 jgles'
>> >>
>> >> FORM=: 0 : 0
>> >>  pc form closeok;
>> >>  minwh 320 240; cc gl opengl flush;
>> >> )
>> >> fshader=: 0 :0
>> >>   #version 110
>> >>   void main(void) {
>> >>     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
>> >>   }
>> >> )
>> >> form_run=: 3 : 0
>> >>   wd FORM
>> >>   wd 'pshow'
>> >> )
>> >> form_gl_initialize=: 3 : 0
>> >>   smoutput 'initializing'
>> >>   smoutput wglGLSL''
>> >>   'err program'=: gl_makeprogram '';fshader
>> >>   if.#err do.
>> >>     smoutput 'fail'
>> >>     smoutput err return. end.
>> >>   glUseProgram program
>> >> )
>> >> form_gl_paint=: 3 : 0
>> >>   smoutput 'painting'
>> >> )
>> >> form_run''
>> >>
>> >> The output I get is:
>> >>
>> >> initializing
>> >> 450
>> >> painting
>> >>
>> >> painting
>> >>
>> >> (I also am wondering where that blank line is coming from...)
>> >>
>> >> Thanks,
>> >>
>> >> --
>> >> Raul
>> >>
>> >> On Fri, Jun 26, 2015 at 8:44 PM, bill lam <[email protected]> wrote:
>> >> > you run opengl functions in form_run but opengl context has not yet
>> >> > available at that point. try put them inside the initialize callback. 
>> >> > see
>> >> > the shader.ijs demo.
>> >> >
>> >> > you can query the version of shader langauge in the initialize callback
>> >> and
>> >> > determine whether you need the #version header.
>> >> > On Jun 27, 2015 8:28 AM, "Raul Miller" <[email protected]> wrote:
>> >> >
>> >> >> I am trying to implement a minimal example of using a shader within J.
>> >> >>
>> >> >> This means: no vertex shader. I just want to paint the screen a solid
>> >> >> color.
>> >> >>
>> >> >> This means: no #version header (which I believe is equivalent to
>> >> #version
>> >> >> 110).
>> >> >>
>> >> >> Unfortunately, while this should work in principle, a number of
>> >> >> variations on the implementation have not worked for me.
>> >> >>
>> >> >> I can show that opengl is working, using the glClear mechanism, but
>> >> >> while that accomplishes the "set the screen to a single color"
>> >> >> subtask, it does not get me my minimal shader which was the point of
>> >> >> the exercise.
>> >> >>
>> >> >> Here's an example:
>> >> >>
>> >> >> load 'pacman'
>> >> >> 'install' jpkg 'graphics/gl2 api/gles'
>> >> >> require 'graphics/gl2 api/gles'
>> >> >> coinsert 'jgl2 jgles'
>> >> >>
>> >> >> FORM=: 0 : 0
>> >> >>  pc form closeok;
>> >> >>  minwh 320 240; cc gl opengl flush;
>> >> >> )
>> >> >> fshader=: 0 :0
>> >> >>   void main(void) {
>> >> >>     gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
>> >> >>   }
>> >> >> )
>> >> >> form_run=: 3 : 0
>> >> >>   wd FORM
>> >> >>   'err program'=: gl_makeprogram '';fshader
>> >> >>   if.#err do. smoutput err return. end.
>> >> >>   wd 'pshow'
>> >> >>   gl_paint ''
>> >> >> )
>> >> >> form_gl_paint=: 3 : 0
>> >> >>   smoutput 'painting'
>> >> >>   glClearColor 0 0 1 1
>> >> >>   glClear GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT
>> >> >>   glUseProgram program
>> >> >> )
>> >> >> form_run''
>> >> >>
>> >> >> Now...
>> >> >>
>> >> >> Part of the problem is that I do not know what is happening in libjqt,
>> >> >> and those entry points are not documented. But I do not necessarily
>> >> >> need that, I hope, not right now anyways.
>> >> >>
>> >> >> Anyways, if I eliminate the glClearColor and glClear statements, the
>> >> >> image is black. But if the shader were to be used, the image would be
>> >> >> red.
>> >> >>
>> >> >> How do I make this work?
>> >> >>
>> >> >> Thanks,
>> >> >>
>> >> >> --
>> >> >> Raul
>> >> >> ----------------------------------------------------------------------
>> >> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> >> >>
>> >> > ----------------------------------------------------------------------
>> >> > For information about J forums see http://www.jsoftware.com/forums.htm
>> >> ----------------------------------------------------------------------
>> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> >>
>> > ----------------------------------------------------------------------
>> > 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 --recv-keys 4434BAB3
> 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