Re: Getting OpenGL 4.5 working with GTKMM
On Mon, 12 Apr 2021 11:52:14 + JLM via gtkmm-list wrote: > Just to close the loop in case anyone else runs into this, the main > problem was that I hadn't called gtkGlArea's make_current() function. > This is necessary to make the OpenGL rendering context available for > subsequent commands. Thanks! Always nice when people also report solutions to their problems :) Carlo Wood ___ gtkmm-list mailing list [email protected] https://mail.gnome.org/mailman/listinfo/gtkmm-list
Re: Getting OpenGL 4.5 working with GTKMM
Just to close the loop in case anyone else runs into this, the main
problem was that I hadn't called gtkGlArea's make_current() function.
This is necessary to make the OpenGL rendering context available for
subsequent commands.
Once I did that, both the Epoxy version number and the original
glewInit() functions work correctly. I had incorrectly thought that
rendering context was automatically made current either after
instantiating the widget, or at least in it's on_realize() signal
handler.
On Sun, 2021-04-11 at 12:41 +, JLM via gtkmm-list wrote:
> So I found this example:
>
> https://github.com/GNOME/gtkmm/blob/master/demos/gtk-demo/example_glarea.cc
>
> And it has #include , and I thought, "what is that?"
>
> So I found this:
>
> https://github.com/anholt/libepoxy
>
> And, gee, it just works!
>
> I'm not sure if this is enough, becase epoxy_gl_version() returns 0,
> but the glArea->get_required_version() returns 4.5. I'll pretend it
> doesn't matter for now and bug someone (else?) later if I'm again at
> my
> wit's end.
>
> On Sun, 2021-04-11 at 01:52 +, JLM via gtkmm-list wrote:
> > I am trying to make use of OpenGL 4.5 in a gtkGlArea. The code
> > below
> > works. However, I have the OpenGL Programming Guide Ninth Edition,
> > and
> > it uses this instead of glClearColor:
> >
> > static const float black[] = { 0.0, 0.0, 0.0, 0.0 };
> > glClearBufferfv(GL_COLOR, 0, black);
> >
> > When I try to use that, the compile doesn't find it:
> >
> > gtkgl.cpp:32:5: error: 'glClearBufferfv' was not declared in this
> > scope; did you mean 'glReadBuffer'?
> > 32 | glClearBufferfv(GL_COLOR, 0, black);
> >
> > I also tried #include but that didn't help.
> >
> > So then I thought maybe I need to make use of GLEW. When I #include
> > , that compiles at least. But, then I can't run GLEW's
> > setup:
> >
> > GLenum glewError = glewInit();
> > if(glewError != GLEW_OK)
> > {
> > std::cerr << "Error: " << glewGetErrorString(glewError) <<
> > std::endl;
> > }
> >
> > When I run, it always says:
> >
> > Error: Missing GL version
> >
> > So then I found the gtkGlArea method, set_required_version, and set
> > it:
> >
> > gl
> > Area->set_required_version(4, 5);
> >
> > But that still didn't help. So then I thought maybe the GLEW init
> > needs
> > to be in the on_realize() section, as I saw that this is where you
> > put
> > OpenGL init stuff, but that still didn't work.
> >
> > So, what do I need to #include? Should I make use of GLEW, or does
> > GTK(MM) do everything necessary to get OpenGL already? Are there
> > any
> > tutorials or examples? Most everything I find is for OpenGL 3.3,
> > but I
> > don't know how to align that with the book I've got.
> >
> > Thanks for any help you can provide.
> >
> >
> > #include
> > #include
> > #include
> > #include
> >
> > Gtk::Window* pDialog = nullptr;
> >
> > static
> > void on_button_clicked()
> > {
> > if(pDialog)
> > pDialog->hide(); //hide() will cause main::run() to end.
> > }
> >
> > bool glRender(const Glib::RefPtr&)
> > {
> > glClearColor(1.0f, 0.3f, 0.3f, 1.0f);
> > glClear(GL_COLOR_BUFFER_BIT);
> > return true;
> > }
> >
> > int main (int argc, char **argv)
> > {
> > auto app = Gtk::App
> > lication::create(argc, argv, "org.test");
> >
> > //Load the GtkBuilder file and instantiate its widgets:
> > auto refBuilder = Gtk::Builder::create();
> > try
> > {
> > refBuilder->add_from_file("glarea.glade");
> > }
> > catch(const Glib::FileError& ex)
> > {
> > std::cerr << "FileError: " << ex.what() << std::endl;
> > return 1;
> > }
> > catch(const Glib::MarkupError& ex)
> > {
> > std::cerr << "MarkupError: " << ex.what() << std::endl;
> > return 1;
> > }
> > catch(const Gtk::BuilderError& ex)
> > {
> > std::cerr << "BuilderError: " << ex.what() << std::endl;
> > return 1;
> > }
> >
> > //Get the GtkBuilder-instantiated Dialog:
> > refBuilder->get_widget("Window", pDialog);
> > if(pDialog)
> > {
> > //Get the GtkBuilder-instantiated Button, and connect a
> > signal
> > handler:
> > Gtk::MenuItem* pButton = nullptr;
> > refBuilder->get_widget("quitMenuItem", pButton);
> > if(pButton)
> > {
> > pButton->signa
> > l_activate().connect( sigc::ptr_fun(on_button_clicked) );
> > }
> >
> > Gtk::GLArea* glArea = nullptr;
> > refBuilder->get_widget("glarea", glArea);
> > if(glArea)
> > {
> > glArea->signal_render().connect(sigc::ptr_fun(glRender)
> > );
> > }
> > app->run(*pDialog);
> > }
> >
> > delete pDialog;
> >
> > return 0;
> > }
> >
> > ___
> > gtkmm-list mailing list
> > [email protected]
> > https://mail.gnome.org/mailman/listinfo/gtkmm-list
>
>
>
Re: Getting OpenGL 4.5 working with GTKMM
So I found this example:
https://github.com/GNOME/gtkmm/blob/master/demos/gtk-demo/example_glarea.cc
And it has #include , and I thought, "what is that?"
So I found this:
https://github.com/anholt/libepoxy
And, gee, it just works!
I'm not sure if this is enough, becase epoxy_gl_version() returns 0,
but the glArea->get_required_version() returns 4.5. I'll pretend it
doesn't matter for now and bug someone (else?) later if I'm again at my
wit's end.
On Sun, 2021-04-11 at 01:52 +, JLM via gtkmm-list wrote:
> I am trying to make use of OpenGL 4.5 in a gtkGlArea. The code below
> works. However, I have the OpenGL Programming Guide Ninth Edition, and
> it uses this instead of glClearColor:
>
> static const float black[] = { 0.0, 0.0, 0.0, 0.0 };
> glClearBufferfv(GL_COLOR, 0, black);
>
> When I try to use that, the compile doesn't find it:
>
> gtkgl.cpp:32:5: error: 'glClearBufferfv' was not declared in this
> scope; did you mean 'glReadBuffer'?
> 32 | glClearBufferfv(GL_COLOR, 0, black);
>
> I also tried #include but that didn't help.
>
> So then I thought maybe I need to make use of GLEW. When I #include
> , that compiles at least. But, then I can't run GLEW's
> setup:
>
> GLenum glewError = glewInit();
> if(glewError != GLEW_OK)
> {
> std::cerr << "Error: " << glewGetErrorString(glewError) <<
> std::endl;
> }
>
> When I run, it always says:
>
> Error: Missing GL version
>
> So then I found the gtkGlArea method, set_required_version, and set it:
>
> gl
> Area->set_required_version(4, 5);
>
> But that still didn't help. So then I thought maybe the GLEW init needs
> to be in the on_realize() section, as I saw that this is where you put
> OpenGL init stuff, but that still didn't work.
>
> So, what do I need to #include? Should I make use of GLEW, or does
> GTK(MM) do everything necessary to get OpenGL already? Are there any
> tutorials or examples? Most everything I find is for OpenGL 3.3, but I
> don't know how to align that with the book I've got.
>
> Thanks for any help you can provide.
>
>
> #include
> #include
> #include
> #include
>
> Gtk::Window* pDialog = nullptr;
>
> static
> void on_button_clicked()
> {
> if(pDialog)
> pDialog->hide(); //hide() will cause main::run() to end.
> }
>
> bool glRender(const Glib::RefPtr&)
> {
> glClearColor(1.0f, 0.3f, 0.3f, 1.0f);
> glClear(GL_COLOR_BUFFER_BIT);
> return true;
> }
>
> int main (int argc, char **argv)
> {
> auto app = Gtk::App
> lication::create(argc, argv, "org.test");
>
> //Load the GtkBuilder file and instantiate its widgets:
> auto refBuilder = Gtk::Builder::create();
> try
> {
> refBuilder->add_from_file("glarea.glade");
> }
> catch(const Glib::FileError& ex)
> {
> std::cerr << "FileError: " << ex.what() << std::endl;
> return 1;
> }
> catch(const Glib::MarkupError& ex)
> {
> std::cerr << "MarkupError: " << ex.what() << std::endl;
> return 1;
> }
> catch(const Gtk::BuilderError& ex)
> {
> std::cerr << "BuilderError: " << ex.what() << std::endl;
> return 1;
> }
>
> //Get the GtkBuilder-instantiated Dialog:
> refBuilder->get_widget("Window", pDialog);
> if(pDialog)
> {
> //Get the GtkBuilder-instantiated Button, and connect a signal
> handler:
> Gtk::MenuItem* pButton = nullptr;
> refBuilder->get_widget("quitMenuItem", pButton);
> if(pButton)
> {
> pButton->signa
> l_activate().connect( sigc::ptr_fun(on_button_clicked) );
> }
>
> Gtk::GLArea* glArea = nullptr;
> refBuilder->get_widget("glarea", glArea);
> if(glArea)
> {
> glArea->signal_render().connect(sigc::ptr_fun(glRender) );
> }
> app->run(*pDialog);
> }
>
> delete pDialog;
>
> return 0;
> }
>
> ___
> gtkmm-list mailing list
> [email protected]
> https://mail.gnome.org/mailman/listinfo/gtkmm-list
signature.asc
Description: OpenPGP digital signature
___
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list
