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

Reply via email to