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