diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/CMakeLists.txt | 39 | ||||
| -rw-r--r-- | tests/FindGLEW.cmake | 15 | ||||
| -rw-r--r-- | tests/OffscreenContext.cc | 139 | ||||
| -rw-r--r-- | tests/OffscreenContext.h | 6 | ||||
| -rw-r--r-- | tests/OffscreenView.cc | 5 | ||||
| -rw-r--r-- | tests/csgtermtest.cc | 8 | ||||
| -rw-r--r-- | tests/opencsgtest.cc | 4 | 
7 files changed, 212 insertions, 4 deletions
| diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 509180e..1874669 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -57,6 +57,23 @@ if (NOT OPENCSG_INCLUDE_DIR)  endif()  include_directories(${OPENCSG_INCLUDE_DIR}) +# SDL (for OpenCSG on Linux & other platforms) +if (NOT $ENV{MACOSX_DEPLOY_DIR} STREQUAL "") +  message(STATU "SDL not needed for Mac OSX") +else() +  find_package(SDL REQUIRED) +  if (NOT SDL_FOUND) +    message(FATAL_ERROR "SDL not found. needed for OpenCSG testing on this platform") +  else() +    message(STATUS "SDL library found in " ${SDL_LIBRARY}) +    message(STATUS "SDL header found in " ${SDL_INCLUDE_DIR}) +    set(OPENGL_LIBRARY ${OPENGL_LIBRARY} ${SDL_LIBRARY}) +  endif() +endif() +include_directories(${SDL_INCLUDE_DIR}) + +# GLEW +  if (NOT $ENV{MACOSX_DEPLOY_DIR} STREQUAL "")    set(GLEW_DIR "$ENV{MACOSX_DEPLOY_DIR}")  endif() @@ -165,11 +182,24 @@ target_link_libraries(cgalpngtest ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${  #  # opencsgtest  # +<<<<<<< HEAD +if (NOT $ENV{MACOSX_DEPLOY_DIR} STREQUAL "") +	set(OFFSCREEN_SOURCE "OffscreenContext.mm") +else() +	set(OFFSCREEN_SOURCE "OffscreenContext.cc") +endif() + +add_executable(opencsgtest opencsgtest.cc OffscreenView.cc ${OFFSCREEN_SOURCE} +                           ../src/cgal.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 +=======  add_executable(opencsgtest opencsgtest.cc OffscreenView.cc OffscreenContext.mm                             ../src/OpenCSGRenderer.cc ../src/ThrownTogetherRenderer.cc                             ../src/CSGTermEvaluator.cc ../src/CGAL_Nef_polyhedron.cc ../src/cgalutils.cc                             ../src/CGALEvaluator.cc ../src/CGALCache.cc ../src/PolySetCGALEvaluator.cc ../src/qhash.cc                             ../src/CGAL_Nef_polyhedron_DxfData.cc ../src/cgaladv_minkowski2.cc ../src/cgaladv_convexhull2.cc +>>>>>>> upstream/visitor                             ${COMMON_SOURCES})  set_target_properties(opencsgtest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}")  target_link_libraries(opencsgtest ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENCSG_LIBRARY} ${GLEW_LIBRARY} ${COCOA_LIBRARY} ${OPENGL_LIBRARY}) @@ -202,6 +232,15 @@ add_cmdline_test(csgtexttest txt ${MINIMAL_FILES})  add_cmdline_test(csgtermtest txt ${MINIMAL_FILES})  # Add cgaltest tests to CTest +<<<<<<< HEAD +LIST(APPEND CGALTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/minimal/cube.scad) +LIST(APPEND CGALTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/minimal/sphere.scad) +LIST(APPEND CGALTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/minimal/cylinder.scad) +LIST(APPEND CGALTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/background-modifier.scad) +LIST(APPEND CGALTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/highlight-modifier.scad) +LIST(APPEND CGALTEST_FILES ${CMAKE_SOURCE_DIR}/../examples/example001.scad) +======= +>>>>>>> upstream/visitor  add_cmdline_test(cgaltest stl ${CGALTEST_FILES})  # Add cgalpngtest tests to CTest diff --git a/tests/FindGLEW.cmake b/tests/FindGLEW.cmake index e058e8c..edf590c 100644 --- a/tests/FindGLEW.cmake +++ b/tests/FindGLEW.cmake @@ -7,6 +7,9 @@  # GLEW_LIBRARY  #  +# a few lines of this file are based on the LGPL code found at  +# http://openlibraries.org/browser/trunk/FindGLEW.cmake?rev=1383  +  IF (WIN32)  	FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h  		$ENV{PROGRAMFILES}/GLEW/include @@ -20,14 +23,26 @@ IF (WIN32)  		${PROJECT_SOURCE_DIR}/src/nvgl/glew/lib  		DOC "The GLEW library")  ELSE (WIN32) +<<<<<<< HEAD +     	MESSAGE( "-- GLEW_DIR value:" ${GLEW_DIR}) +	FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h +                PATHS /usr/include /usr/local/include +                ${GLEW_DIR}/include +=======          message("GLEW_DIR: " ${GLEW_DIR})  	FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h                  PATHS ${GLEW_DIR}/include /usr/include /usr/local/include +>>>>>>> upstream/visitor                  NO_DEFAULT_PATH  		DOC "The directory where GL/glew.h resides")  	FIND_LIBRARY( GLEW_LIBRARY  		NAMES GLEW glew +<<<<<<< HEAD +		PATHS /usr/lib /usr/local/lib +                ${GLEW_DIR}/lib +=======  		PATHS ${GLEW_DIR}/lib /usr/lib /usr/local/lib +>>>>>>> upstream/visitor                  NO_DEFAULT_PATH  		DOC "The GLEW library")  ENDIF (WIN32) diff --git a/tests/OffscreenContext.cc b/tests/OffscreenContext.cc new file mode 100644 index 0000000..0795fe7 --- /dev/null +++ b/tests/OffscreenContext.cc @@ -0,0 +1,139 @@ +#include "OffscreenContext.h" + +// see http://www.gamedev.net/topic/552607-conflict-between-glew-and-sdl/ +#define NO_SDL_GLEXT +#include <GL/glew.h> + +#define GL_GLEXT_PROTOTYPES +#include <GL/gl.h> +#include <GL/glext.h> + +//#include <GL/gl.h> +//#include <GL/glu.h>      // for gluCheckExtension +#include <SDL.h> + +// Simple error reporting macros to help keep the sample code clean +#define REPORT_ERROR_AND_EXIT(desc) { std::cout << desc << "\n"; return false; } +#define NULL_ERROR_EXIT(test, desc) { if (!test) REPORT_ERROR_AND_EXIT(desc); } + +struct OffscreenContext +{ +  int width; +  int height; +  GLuint fbo; +  GLuint colorbo; +  GLuint depthbo; +}; + + +OffscreenContext *create_offscreen_context(int w, int h) +{ +  OffscreenContext *ctx = new OffscreenContext; +  ctx->width = w; +  ctx->height = h; + +  // dummy window  +  SDL_Init(SDL_INIT_VIDEO); +  SDL_SetVideoMode(256,256,32,SDL_OPENGL); + +  // must come after openGL context init (done by dummy window) +  // but must also come before various EXT calls +  glewInit(); + +/* +  //  Test if framebuffer objects are supported +  const GLubyte* strExt = glGetString(GL_EXTENSIONS); +  GLboolean fboSupported = gluCheckExtension((const GLubyte*)"GL_EXT_framebuffer_object", strExt); +  if (!fboSupported) +    REPORT_ERROR_AND_EXIT("Your system does not support framebuffer extension - unable to render scene"); + +  printf("%i\n", (int)glGenFramebuffersEXT); +  GLuint fbo; +  //ctx->fbo = 0; +  glGenFramebuffersEXT(1, &fbo); +  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); +  REPORTGLERROR("binding framebuffer"); + + +  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); +  glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24,  w, h); +  REPORTGLERROR("creating depth render buffer"); + +  // Render buffer to use for imaging +  glGenRenderbuffersEXT(1, &renderBuffer); +  glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, renderBuffer); +  glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGBA8, w, h); +  REPORTGLERROR("creating color render buffer"); + +  glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,  +                               GL_RENDERBUFFER_EXT, renderBuffer); +  REPORTGLERROR("specifying color render buffer"); + +  if (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) !=  +      GL_FRAMEBUFFER_COMPLETE_EXT) +    REPORT_ERROR_AND_EXIT("Problem with OpenGL framebuffer after specifying color render buffer."); + +  glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,  +                               GL_RENDERBUFFER_EXT, depthBuffer); +  REPORTGLERROR("specifying depth render buffer"); + +  if (glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) !=  +      GL_FRAMEBUFFER_COMPLETE_EXT) +    REPORT_ERROR_AND_EXIT("Problem with OpenGL framebuffer after specifying depth render buffer."); +*/ + +  return ctx; +} + +bool teardown_offscreen_context(OffscreenContext *ctx) +{ +  // "un"bind my FBO +//  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + +  /* +   * Cleanup +   */ +  return true; +} + +void write_targa(const char *filename, GLubyte *pixels, int width, int height) +{ +	FILE *f = fopen( filename, "w" ); +	int y; +	if (f) { +		GLubyte header[] = { +			00,00,02, 00,00,00, 00,00,00, 00,00,00, +			0xff & width, 0xff & width >> 8, +			0xff & height, 0xff & height >> 8, +			32, 0x20 }; // next-to-last = bit depth +		fwrite( header, sizeof(header), 1, f); +		for (y=height-1; y>=0; y--) +			fwrite( pixels + y*width*4, 4, width, f); +		fclose(f); +	} +} + +bool save_framebuffer(OffscreenContext *ctx, const char *filename) +{ +  /* +   * Extract the resulting rendering as an image +   */ + +  int samplesPerPixel = 4; // R, G, B and A + +  GLubyte pixels[ ctx->width * ctx->height * samplesPerPixel ]; +  glReadPixels(0, 0, ctx->width, ctx->height, GL_BGRA, GL_UNSIGNED_BYTE, pixels); +  printf("writing %s\n",filename); +  write_targa(filename,pixels,ctx->width, ctx->height); + +  return true; +} + +void bind_offscreen_context(OffscreenContext *ctx) +{ +//  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, ctx->fbo); +} diff --git a/tests/OffscreenContext.h b/tests/OffscreenContext.h index 0300bcb..f1c7123 100644 --- a/tests/OffscreenContext.h +++ b/tests/OffscreenContext.h @@ -1,7 +1,13 @@  #ifndef OFFSCREENCONTEXT_H_  #define OFFSCREENCONTEXT_H_ +#ifdef Q_WS_MAC  #include <OpenGL/OpenGL.h> +#else +#include <GL/glew.h> +#include <GL/gl.h> +#endif +  #include <iostream>         // for error output  #define REPORTGLERROR(task) { GLenum tGLErr = glGetError(); if (tGLErr != GL_NO_ERROR) { std::cout << "OpenGL error " << tGLErr << " while " << task << "\n"; } } diff --git a/tests/OffscreenView.cc b/tests/OffscreenView.cc index 447a78c..8a4b57d 100644 --- a/tests/OffscreenView.cc +++ b/tests/OffscreenView.cc @@ -1,8 +1,11 @@  #include <GL/glew.h>  #include "OffscreenView.h"  #include <opencsg.h> -#include "Renderer.h" +#include "renderer.h"  #include <math.h> +#include <stdio.h> +#include <string.h> +#include <cstdlib>  #define FAR_FAR_AWAY 100000.0 diff --git a/tests/csgtermtest.cc b/tests/csgtermtest.cc index 7c37b0a..f23ec70 100644 --- a/tests/csgtermtest.cc +++ b/tests/csgtermtest.cc @@ -111,7 +111,7 @@ int main(int argc, char **argv)  	AbstractModule *root_module;  	ModuleInstantiation root_inst; -	AbstractNode *root_node; +	const AbstractNode *root_node;  	QFileInfo fileInfo(filename);  	handle_dep(filename); @@ -144,11 +144,17 @@ int main(int argc, char **argv)  //	cout << tree.getString(*root_node) << "\n"; +<<<<<<< HEAD +	CSGTermEvaluator evaluator(tree); +	vector<CSGTerm*> empty = vector<CSGTerm*>(); +	CSGTerm *root_term = evaluator.evaluateCSGTerm(*root_node, empty, empty); +=======  	vector<CSGTerm*> highlights;  	vector<CSGTerm*> background;  	PolySetEvaluator psevaluator(tree);  	CSGTermEvaluator evaluator(tree, &psevaluator);  	CSGTerm *root_term = evaluator.evaluateCSGTerm(*root_node, highlights, background); +>>>>>>> upstream/visitor  	// cout << "Stored terms: " << evaluator.stored_term.size() << "\n";  	// for (map<int, class CSGTerm*>::iterator iter = evaluator.stored_term.begin(); diff --git a/tests/opencsgtest.cc b/tests/opencsgtest.cc index 59501a0..98e1037 100644 --- a/tests/opencsgtest.cc +++ b/tests/opencsgtest.cc @@ -235,8 +235,8 @@ int main(int argc, char *argv[])  	OpenCSGRenderer opencsgRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain, csgInfo.glview->shaderinfo);  	ThrownTogetherRenderer thrownTogetherRenderer(csgInfo.root_chain, csgInfo.highlights_chain, csgInfo.background_chain); -//	csgInfo.glview->setRenderer(&thrownTogetherRenderer); -	csgInfo.glview->setRenderer(&opencsgRenderer); +	csgInfo.glview->setRenderer(&thrownTogetherRenderer); +//	csgInfo.glview->setRenderer(&opencsgRenderer);  	csgInfo.glview->paintGL(); | 
