diff options
author | neoraider <devnull@localhost> | 2008-04-07 03:45:04 +0200 |
---|---|---|
committer | neoraider <devnull@localhost> | 2008-04-07 03:45:04 +0200 |
commit | 761c681764d4dae3b9776a57e4c3e5561e37f733 (patch) | |
tree | 47d1862ec4274466f42480ca8d68c3c7cb0e7d9c /src/Gui/RenderArea.cpp | |
parent | cbc867ee44137b24e2549271499a9d211cd6b000 (diff) | |
download | zoomedit-761c681764d4dae3b9776a57e4c3e5561e37f733.tar zoomedit-761c681764d4dae3b9776a57e4c3e5561e37f733.zip |
zoomedit: Added RenderArea with OpenGL support.
Diffstat (limited to 'src/Gui/RenderArea.cpp')
-rw-r--r-- | src/Gui/RenderArea.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/Gui/RenderArea.cpp b/src/Gui/RenderArea.cpp new file mode 100644 index 0000000..c19c0a5 --- /dev/null +++ b/src/Gui/RenderArea.cpp @@ -0,0 +1,53 @@ +#include "RenderArea.h" +#include <iostream> +#include <cstdlib> +#include <GL/gl.h> + +namespace ZoomEdit { +namespace Gui { + +GdkGLConfig *RenderArea::glconfig = NULL; + +RenderArea::RenderArea(BaseObjectType *cobject, const Glib::RefPtr<Gnome::Glade::Xml> &xml) +: Gtk::DrawingArea(cobject) { + if(!glconfig) { + glconfig = gdk_gl_config_new_by_mode((GdkGLConfigMode)(GDK_GL_MODE_RGB | GDK_GL_MODE_DOUBLE)); + if(!glconfig) glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB); // Hmm, can't find double buffered config + if(!glconfig) { + std::cerr << "*** No appropriate OpenGL-capable visual found." << std::endl; + std::exit(1); + } + } + + signal_realize().connect(sigc::mem_fun(this, &RenderArea::onRealize)); + + gtk_widget_set_gl_capability(GTK_WIDGET(cobject), glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE); +} + +RenderArea::~RenderArea() { +} + +void RenderArea::onRealize() { + GtkWidget *widget = GTK_WIDGET(gobj()); + GdkGLContext *context = gtk_widget_get_gl_context(widget); + GdkGLDrawable *drawable = gtk_widget_get_gl_drawable(widget); + + if(!gdk_gl_drawable_gl_begin(drawable, context)) + return; + + glClearColor(0, 0, 0, 0); + + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + + glEnable(GL_LINE_SMOOTH); + glEnable(GL_POINT_SMOOTH); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + + gdk_gl_drawable_gl_end(drawable); +} + +} +} |