summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2011-08-01 23:43:29 (GMT)
committerMarius Kintel <marius@kintel.net>2011-08-01 23:43:29 (GMT)
commit0846b4c2ea2eefa643917c928035fd34abf5126f (patch)
tree14d177f1b47e620b727dfc2166aa33ef083555fb
parent8dc35b539b996de45ef51db1635b4de8d6ba9244 (diff)
Minor updates. This works now, but needs a bugfix in OpenCSG
-rw-r--r--tests/CMakeLists.txt11
-rw-r--r--tests/OffscreenContext.h1
-rw-r--r--tests/OffscreenContext.mm16
-rw-r--r--tests/OffscreenView.cc10
-rw-r--r--tests/OffscreenView.h2
-rw-r--r--tests/opencsgtest.cc14
6 files changed, 30 insertions, 24 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 74d3df2..1d884c6 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -36,16 +36,19 @@ endif()
include_directories(${EIGEN2_INCLUDE_DIR})
# OpenCSG
-if (NOT $ENV{MACOSX_DEPLOY_DIR} STREQUAL "")
+if (NOT $ENV{OPENCSG_DIR} STREQUAL "")
+ set(OPENCSG_DIR "$ENV{OPENCSG_DIR}")
+elseif (NOT $ENV{MACOSX_DEPLOY_DIR} STREQUAL "")
set(OPENCSG_DIR "$ENV{MACOSX_DEPLOY_DIR}")
endif()
if (NOT OPENCSG_INCLUDE_DIR)
+ message(STATUS ${OPENCSG_DIR})
find_path(OPENCSG_INCLUDE_DIR
opencsg.h
- PATHS $ENV{MACOSX_DEPLOY_DIR}/include)
+ PATHS ${OPENCSG_DIR}/include)
find_library(OPENCSG_LIBRARY
opencsg
- PATHS $ENV{MACOSX_DEPLOY_DIR}/lib)
+ PATHS ${OPENCSG_DIR}/src)
if (NOT OPENCSG_INCLUDE_DIR OR NOT OPENCSG_LIBRARY)
message(FATAL_ERROR "OpenCSG not found")
else()
@@ -146,7 +149,7 @@ target_link_libraries(cgaltest ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_
# opencsgtest
#
add_executable(opencsgtest opencsgtest.cc OffscreenView.cc OffscreenContext.mm
- ../src/opencsgrenderer.cc ../src/CSGTermEvaluator.cc ../src/CGALEvaluator.cc
+ ../src/opencsgrenderer.cc ../src/throwntogetherrenderer.cc ../src/CSGTermEvaluator.cc ../src/CGALEvaluator.cc
../src/PolySetCGALEvaluator.cc ../src/qhash.cc ../src/nef2dxf.cc
../src/cgaladv_minkowski2.cc ../src/cgaladv_minkowski3.cc
${COMMON_SOURCES})
diff --git a/tests/OffscreenContext.h b/tests/OffscreenContext.h
index 59b6e2d..0300bcb 100644
--- a/tests/OffscreenContext.h
+++ b/tests/OffscreenContext.h
@@ -7,6 +7,7 @@
#define REPORTGLERROR(task) { GLenum tGLErr = glGetError(); if (tGLErr != GL_NO_ERROR) { std::cout << "OpenGL error " << tGLErr << " while " << task << "\n"; } }
struct OffscreenContext *create_offscreen_context(int w, int h);
+void bind_offscreen_context(OffscreenContext *ctx);
bool teardown_offscreen_context(OffscreenContext *ctx);
bool save_framebuffer(OffscreenContext *ctx, const char *filename);
diff --git a/tests/OffscreenContext.mm b/tests/OffscreenContext.mm
index 7ff7772..c8d0df7 100644
--- a/tests/OffscreenContext.mm
+++ b/tests/OffscreenContext.mm
@@ -14,6 +14,7 @@ struct OffscreenContext
NSAutoreleasePool *pool;
int width;
int height;
+ GLuint fbo;
};
@@ -56,8 +57,8 @@ OffscreenContext *create_offscreen_context(int w, int h)
/*
* Create an FBO
*/
- GLuint renderBuffer = 0;
- GLuint depthBuffer = 0;
+ GLuint renderBuffer = 0;
+ GLuint depthBuffer = 0;
// Depth buffer to use for depth testing - optional if you're not using depth testing
glGenRenderbuffersEXT(1, &depthBuffer);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthBuffer);
@@ -69,9 +70,9 @@ OffscreenContext *create_offscreen_context(int w, int h)
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderBuffer);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, w, h);
REPORTGLERROR("creating color render buffer");
- GLuint fbo = 0;
- glGenFramebuffersEXT(1, &fbo);
- glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
+ ctx->fbo = 0;
+ glGenFramebuffersEXT(1, &ctx->fbo);
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, ctx->fbo);
REPORTGLERROR("binding framebuffer");
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
@@ -196,3 +197,8 @@ bool save_framebuffer(OffscreenContext *ctx, const char *filename)
CGImageRelease(imageRef);
return true;
}
+
+void bind_offscreen_context(OffscreenContext *ctx)
+{
+ glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, ctx->fbo);
+}
diff --git a/tests/OffscreenView.cc b/tests/OffscreenView.cc
index b7ee8c7..3740c69 100644
--- a/tests/OffscreenView.cc
+++ b/tests/OffscreenView.cc
@@ -1,14 +1,15 @@
#include <GL/glew.h>
#include "OffscreenView.h"
+#include <opencsg.h>
#include "Renderer.h"
-#include "OffscreenContext.h"
#include <math.h>
#define FAR_FAR_AWAY 100000.0
OffscreenView::OffscreenView(size_t width, size_t height)
- : orthomode(false), showaxes(false), showfaces(false), showedges(false), viewer_distance(500)
+ : orthomode(false), showaxes(true), showfaces(true), showedges(false), viewer_distance(500)
{
+ for (int i = 0; i < 10; i++) this->shaderinfo[i] = 0;
this->ctx = create_offscreen_context(width, height);
initializeGL();
resizeGL(width, height);
@@ -218,9 +219,8 @@ void OffscreenView::paintGL()
glColor3d(1.0, 0.0, 0.0);
if (this->renderer) {
-#if defined(ENABLE_MDI) && defined(ENABLE_OPENCSG)
- // FIXME: This belongs in the OpenCSG renderer, but it doesn't know about this ID yet
- OpenCSG::setContext(this->opencsg_id);
+#ifdef ENABLE_OPENCSG
+ OpenCSG::setContext(0);
#endif
this->renderer->draw(showfaces, showedges);
}
diff --git a/tests/OffscreenView.h b/tests/OffscreenView.h
index 6531bcf..52ee3af 100644
--- a/tests/OffscreenView.h
+++ b/tests/OffscreenView.h
@@ -19,9 +19,9 @@ public:
bool save(const char *filename);
GLint shaderinfo[11];
+ OffscreenContext *ctx;
private:
Renderer *renderer;
- class OffscreenContext *ctx;
double w_h_ratio;
bool orthomode;
diff --git a/tests/opencsgtest.cc b/tests/opencsgtest.cc
index 4d69650..7da15e8 100644
--- a/tests/opencsgtest.cc
+++ b/tests/opencsgtest.cc
@@ -1,3 +1,4 @@
+#include <GL/glew.h>
#include "openscad.h"
#include "builtin.h"
#include "context.h"
@@ -10,9 +11,9 @@
#include "PolySetCGALEvaluator.h"
#include "OpenCSGRenderer.h"
+#include "ThrownTogetherRenderer.h"
#include "csgterm.h"
-#include <GL/glew.h>
#include "OffscreenView.h"
#include <QApplication>
@@ -207,7 +208,7 @@ int main(int argc, char *argv[])
QDir::setCurrent(original_path.absolutePath());
- csgInfo.glview = new OffscreenView(256, 256);
+ csgInfo.glview = new OffscreenView(512,512);
glewInit();
cout << "GLEW version " << glewGetString(GLEW_VERSION) << "\n";
@@ -227,19 +228,14 @@ int main(int argc, char *argv[])
}
OpenCSGRenderer opencsgRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain, csgInfo.glview->shaderinfo);
-// csgInfo.glview->setRenderFunc(thrownTogetherRenderer);
+ ThrownTogetherRenderer thrownTogetherRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain);
+// csgInfo.glview->setRenderer(&thrownTogetherRenderer);
csgInfo.glview->setRenderer(&opencsgRenderer);
csgInfo.glview->paintGL();
csgInfo.glview->save("out.png");
-// FIXME: Render & Grab buffer
-
- // QImage img = csgInfo.glview->grabFrameBuffer();
- // cout << "Image: " << img.width() << "x" << img.height() << " " << img.format() << "\n";
- // img.save("out.png");
-
destroy_builtin_functions();
destroy_builtin_modules();
contact: Jan Huwald // Impressum