3
GTK와 OpenGL을 사용하여 C++ 어플리케이션을 작성하고 있습니다. XML 파일을 읽고 자체 빌드하는 GTK 빌더가 있습니다. OpenGL 창 영역을 추가해야합니다. 어떻게해야합니까?GTK 빌더에 OpenGL 윈도우 추가하기
GTK와 OpenGL을 사용하여 C++ 어플리케이션을 작성하고 있습니다. XML 파일을 읽고 자체 빌드하는 GTK 빌더가 있습니다. OpenGL 창 영역을 추가해야합니다. 어떻게해야합니까?GTK 빌더에 OpenGL 윈도우 추가하기
:
#include <gtkmm.h>
#include <gtkglmm.h>
class GLWidget : public Gtk::GL::DrawingArea {
public:
GLWidget(Glib::RefPtr<Gdk::GL::Config> glconfig)
: Gtk::GL::DrawingArea(glconfig) {}
~GLWidget() {}
virtual bool on_expose_event(GdkEventExpose* event);
};
bool GLWidget::on_expose_event(GdkEventExpose* event)
{
Glib::RefPtr<Gdk::GL::Drawable> d = get_gl_drawable();
d->gl_begin(get_gl_context());
// make this as complex as you need
glClear(GL_COLOR_BUFFER_BIT);
d->swap_buffers();
d->gl_end();
return true;
}
int main(int argc, char **argv)
{
Gtk::Main kit(argc, argv);
Gtk::GL::init(argc, argv);
Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file("ui.glade");
Gtk::Window* mainWindow;
Gtk::Alignment* container;
builder->get_widget("mainWindow", mainWindow);
builder->get_widget("Box", container);
if (mainWindow == NULL || container == NULL) {
g_critical("Gtk Builder failed to load mainWindow and/or container !\n");
return -1;
}
Glib::RefPtr<Gdk::GL::Config> glconfig;
glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGBA | Gdk::GL::MODE_DOUBLE);
if (!glconfig)
glconfig = Gdk::GL::Config::create(Gdk::GL::MODE_RGB);
if (!glconfig) {
g_critical("Cannot create OpenGL-capable config\n");
return -1;
}
GLWidget drawingArea(glconfig);
drawingArea.set_size_request(640, 480);
drawingArea.show();
container->add(drawingArea);
kit.run(*mainWindow);
return 0;
즉, 빈 컨테이너 위젯을 포함하는 UI를로드하고 이름으로 해당 핸들을 가져온 다음 코드에서 GL 사용 가능 드로잉 영역을 만들고 빈 컨테이너에 추가합니다. 일반적으로 GtkGL DrawingArea를 "load-time"으로 대체 할 수는 있지만 (this posting 참조), 그 방법은 나에게 적합하지 않습니다. 위의, 그것을 프로그래밍 방식으로 생성, 항상 않았다.
GL Drawingarea 위젯에는 gtkglext/gtkglextmm이 필요합니다.
도움이된다면 답변을 수락하고 upvote하는 것을 잊지 마십시오. – kalev