summaryrefslogtreecommitdiffstats
path: root/src/Gui/RenderArea.cpp
diff options
context:
space:
mode:
authorneoraider <devnull@localhost>2008-04-07 03:45:04 +0200
committerneoraider <devnull@localhost>2008-04-07 03:45:04 +0200
commit761c681764d4dae3b9776a57e4c3e5561e37f733 (patch)
tree47d1862ec4274466f42480ca8d68c3c7cb0e7d9c /src/Gui/RenderArea.cpp
parentcbc867ee44137b24e2549271499a9d211cd6b000 (diff)
downloadzoomedit-761c681764d4dae3b9776a57e4c3e5561e37f733.tar
zoomedit-761c681764d4dae3b9776a57e4c3e5561e37f733.zip
zoomedit: Added RenderArea with OpenGL support.
Diffstat (limited to 'src/Gui/RenderArea.cpp')
-rw-r--r--src/Gui/RenderArea.cpp53
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);
+}
+
+}
+}