So I found this example:

https://github.com/GNOME/gtkmm/blob/master/demos/gtk-demo/example_glarea.cc

And it has #include <epoxy/gl.h> , 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 +0000, 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 <GL/glext.h> but that didn't help.
> 
> So then I thought maybe I need to make use of GLEW. When I #include
> <GL/glew.h>, 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 <gtkmm.h>
> #include <iostream>
> #include <GL/gl.h>
> #include <GL/glu.h>
> 
> 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<Gdk::GLContext>&)
> {
>     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
> gtkmm-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtkmm-list


Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to