void RenderCleanup(Obj3d *assets) { // free assImp scene resources aiReleaseImport(assets->getScene()); // detach assImp log aiDetachAllLogStreams(); }
int main(int argc, char* argv[]) { ::testing::InitGoogleTest(&argc, argv); // seed the randomizer with the current system time time_t t;time(&t); srand((unsigned int)t); // ............................................................................ // create a logger from both CPP Assimp::DefaultLogger::create("AssimpLog_Cpp.txt",Assimp::Logger::VERBOSE, aiDefaultLogStream_DEBUGGER | aiDefaultLogStream_FILE); // .. and C. They should smoothly work together aiEnableVerboseLogging(AI_TRUE); aiLogStream logstream= aiGetPredefinedLogStream(aiDefaultLogStream_FILE, "AssimpLog_C.txt"); aiAttachLogStream(&logstream); int result = RUN_ALL_TESTS(); // ............................................................................ // but shutdown must be done from C to ensure proper deallocation aiDetachAllLogStreams(); return result; }
Renderer3d::~Renderer3d() { // We added a log stream to the library, it's our job to disable it // again. This will definitely release the last resources allocated // by Assimp. aiDetachAllLogStreams(); }
GraphicStore::~GraphicStore() { if (store) { aiReleasePropertyStore(store); aiDetachAllLogStreams(); } }
GraphicStore::~GraphicStore() { #if defined(I_LOVE_ASSIMP_AND_PRECOMPILED_IT) if (store) { aiReleasePropertyStore(store); aiDetachAllLogStreams(); } #endif }
int main (int argc, char* argv[]) { // seed the randomizer with the current system time time_t t;time(&t); srand((unsigned int)t); // ............................................................................ // create a logger from both CPP Assimp::DefaultLogger::create("AssimpLog_Cpp.txt",Assimp::Logger::VERBOSE, aiDefaultLogStream_DEBUGGER | aiDefaultLogStream_FILE); // .. and C. They should smoothly work together aiEnableVerboseLogging(AI_TRUE); aiAttachLogStream(&aiGetPredefinedLogStream( aiDefaultLogStream_FILE, "AssimpLog_C.txt")); // ............................................................................ // Informiert Test-Listener ueber Testresultate CPPUNIT_NS :: TestResult testresult; // Listener zum Sammeln der Testergebnisse registrieren CPPUNIT_NS :: TestResultCollector collectedresults; testresult.addListener (&collectedresults); // Listener zur Ausgabe der Ergebnisse einzelner Tests CPPUNIT_NS :: BriefTestProgressListener progress; testresult.addListener (&progress); // Test-Suite ueber die Registry im Test-Runner einfuegen CPPUNIT_NS :: TestRunner testrunner; testrunner.addTest (CPPUNIT_NS :: TestFactoryRegistry :: getRegistry ().makeTest ()); testrunner.run (testresult); // Resultate im Compiler-Format ausgeben CPPUNIT_NS :: CompilerOutputter compileroutputter (&collectedresults, std::cerr); compileroutputter.write (); #if 0 // Resultate im XML-Format ausgeben std::ofstream of("output.xml"); CPPUNIT_NS :: XmlOutputter xml (&collectedresults, of); xml.write (); #endif // ............................................................................ // but shutdown must be done from C to ensure proper deallocation aiDetachAllLogStreams(); // Rueckmeldung, ob Tests erfolgreich waren return collectedresults.wasSuccessful () ? 0 : 1; }
int main(int argc, char **argv) { struct aiLogStream stream; initGame(); glutInitWindowSize(windowWidth, windowHeight); glutInitWindowPosition(100,100); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInit(&argc, argv); glutCreateWindow("Progetto OpenGL - Informatica Grafica"); glutDisplayFunc(display); glutIdleFunc(display); glutKeyboardFunc(handleKeypress); glutPassiveMotionFunc(mouseMovement); //check for mouse movement glutMotionFunc(mouseMovement); glutReshapeFunc(handleResize); glutMouseFunc(handleMouseKeypress); // get a handle to the predefined STDOUT log stream and attach // it to the logging system. It will be active for all further // calls to aiImportFile(Ex) and aiApplyPostProcessing. stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL); aiAttachLogStream(&stream); // ... exactly the same, but this stream will now write the // log file to assimp_log.txt stream = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"assimp_log.txt"); aiAttachLogStream(&stream); if (!InitGL()) { fprintf(stderr,"Initialization failed"); return FALSE; } glutGet(GLUT_ELAPSED_TIME); glutMainLoop(); cleanUp(); // We added a log stream to the library, it's our job to disable it // again. This will definitely release the last resources allocated // by Assimp. aiDetachAllLogStreams(); return 0; }
AssimpLoader::~AssimpLoader() { aiDetachAllLogStreams(); }
// Very complex stuff, impossible to explain. int main(int argc, char *argv []) { //Set the error callback glfwSetErrorCallback(onError); //Initialize GLFW if (!glfwInit()){ exit(EXIT_FAILURE); } //Set the GLFW window creation hints - these are optional //glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); //Request a specific OpenGL version //glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); //Request a specific OpenGL version //glfwWindowHint(GLFW_SAMPLES, 4); //Request 4x antialiasing //glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); //Declare a window object GLFWwindow* window; window = glfwCreateWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "Screen Space Fluid Rendering", NULL /* glfwGetPrimaryMonitor() */, NULL); if (!window){ fprintf(stderr, "Failed to open GLFW window.\n"); glfwTerminate(); exit(EXIT_FAILURE); } glfwMakeContextCurrent(window); // Output some information puts(glfwGetVersionString()); printf("OpenGL version supported %s\n", glGetString(GL_VERSION)); setupCallback(window); // AssImp init // get a handle to the predefined STDOUT log stream and attach // it to the logging system. It remains active for all further // calls to aiImportFile(Ex) and aiApplyPostProcessing. aiLogStream aiStream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT, NULL); aiAttachLogStream(&aiStream); // -------------------------------------------- // Initialize GLEW // -------------------------------------------- glewExperimental = GL_TRUE; GLenum err = glewInit(); //If GLEW hasn't initialized if (err != GLEW_OK){ fprintf(stderr, "Error: %s\n", glewGetErrorString(err)); return 1; } // -------------------------------------------- // DevIL init // -------------------------------------------- ilInit(); /* * Now that we should have a valid GL context, perform our OpenGL * initialization, before we enter our main loop. */ initialize(window); mainLoop(window); unload(window); // We added a log stream to the library, it's our job to disable it // again. This will definitely release the last resources allocated // by Assimp. aiDetachAllLogStreams(); //Close OpenGL window and terminate GLFW glfwDestroyWindow(window); //Finalize and clean up GLFW glfwTerminate(); exit(EXIT_SUCCESS); }
/* ---------------------------------------------------------------------------- */ int main(int argc, char **argv) { struct aiLogStream stream; glutInitWindowSize(900,600); glutInitWindowPosition(100,100); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInit(&argc, argv); glutCreateWindow("Assimp - Very simple OpenGL sample"); glutDisplayFunc(display); glutReshapeFunc(reshape); /* get a handle to the predefined STDOUT log stream and attach it to the logging system. It remains active for all further calls to aiImportFile(Ex) and aiApplyPostProcessing. */ stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL); aiAttachLogStream(&stream); /* ... same procedure, but this stream now writes the log messages to assimp_log.txt */ stream = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"assimp_log.txt"); aiAttachLogStream(&stream); /* the model name can be specified on the command line. If none is specified, we try to locate one of the more expressive test models from the repository (/models-nonbsd may be missing in some distributions so we need a fallback from /models!). */ if( 0 != loadasset( argc >= 2 ? argv[1] : "../../test/models-nonbsd/X/dwarf.x")) { if( argc != 1 || (0 != loadasset( "../../../../test/models-nonbsd/X/dwarf.x") && 0 != loadasset( "../../test/models/X/Testwuson.X"))) { return -1; } } glClearColor(0.1f,0.1f,0.1f,1.f); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); /* Uses default lighting parameters */ glEnable(GL_DEPTH_TEST); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glEnable(GL_NORMALIZE); /* XXX docs say all polygons are emitted CCW, but tests show that some aren't. */ if(getenv("MODEL_IS_BROKEN")) glFrontFace(GL_CW); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glutGet(GLUT_ELAPSED_TIME); glutMainLoop(); /* cleanup - calling 'aiReleaseImport' is important, as the library keeps internal resources until the scene is freed again. Not doing so can cause severe resource leaking. */ aiReleaseImport(scene); /* We added a log stream to the library, it's our job to disable it again. This will definitely release the last resources allocated by Assimp.*/ aiDetachAllLogStreams(); return 0; }
// The start of the Application int App::start(const std::vector<CL_String> &args) { quit = false; CL_GL1WindowDescription desc; desc.set_title("ClanLib Object 3D Example"); desc.set_size(CL_Size(640, 480), true); desc.set_multisampling(4); desc.set_depth_size(16); CL_DisplayWindow window(desc); #ifdef _DEBUG //struct aiLogStream stream; //stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL); //aiAttachLogStream(&stream); //stream = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"assimp_log.txt"); //aiAttachLogStream(&stream); #endif // Connect the Window close event CL_Slot slot_quit = window.sig_window_close().connect(this, &App::on_window_close); // Connect a keyboard handler to on_key_up() CL_Slot slot_input_up = (window.get_ic().get_keyboard()).sig_key_up().connect(this, &App::on_input_up); // Get the graphic context CL_GraphicContext gc = window.get_gc(); #ifdef USE_OPENGL_1 CL_GraphicContext_GL1 gc_gl1 = gc; #endif // Prepare the display gc.set_map_mode(cl_user_projection); CL_PolygonRasterizer polygon_rasterizer; polygon_rasterizer.set_culled(true); polygon_rasterizer.set_face_cull_mode(cl_cull_back); polygon_rasterizer.set_front_face(cl_face_side_clockwise); gc.set_polygon_rasterizer(polygon_rasterizer); CL_BufferControl buffer_control; buffer_control.enable_depth_test(true); buffer_control.set_depth_compare_function(cl_comparefunc_lequal); buffer_control.enable_depth_write(true); gc.set_buffer_control(buffer_control); #ifdef USE_OPENGL_1 // Set the lights CL_LightModel_GL1 light_model; light_model.enable_lighting(true); light_model.set_flat_shading(false); light_model.set_scene_ambient_light(CL_Colorf(0.2f, 0.2f, 0.2f, 1.0f)); gc_gl1.set_light_model(light_model); CL_LightSource_GL1 light_distant; light_distant.set_spot_cutoff(180.0f); light_distant.set_diffuse_intensity(CL_Colorf(1.0f, 1.0f, 1.0f, 1.0f)); light_distant.set_position(CL_Vec4f(0.0f, -2.0f, 30.0f, 0.0f).normalize3()); gc_gl1.set_light(0, light_distant); cl1Enable(GL_NORMALIZE); #endif #ifdef USE_OPENGL_2 Shader shader(gc); #endif // Create the objects aiSetImportPropertyFloat(AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE,89.53f); const struct aiScene* scene_teapot = aiImportFile("../Clan3D/Resources/teapot.dae",aiProcessPreset_TargetRealtime_MaxQuality); if (!scene_teapot) throw CL_Exception("Cannot load the teapot model"); const struct aiScene* scene_clanlib = aiImportFile("../Clan3D/Resources/clanlib.dae",aiProcessPreset_TargetRealtime_MaxQuality); if (!scene_clanlib) throw CL_Exception("Cannot load the clanlib model"); const struct aiScene* scene_tuxball = aiImportFile("../Clan3D/Resources/tux_ball.dae",aiProcessPreset_TargetRealtime_MaxQuality | aiProcess_FlipUVs); if (!scene_tuxball) throw CL_Exception("Cannot load the tux ball model"); // Load the texture CL_Texture tux(gc, "../Clan3D/Resources/tux.png"); float angle = 0.0f; // Run until someone presses escape while (!quit) { CL_Mat4f perp = CL_Mat4f::perspective(45.0f, ((float) gc.get_width()) / ((float) gc.get_height()), 0.1f, 1000.0f); gc.set_projection(perp); gc.clear(CL_Colorf::black); gc.clear_depth(1.0f); angle += 1.0f; if (angle >= 360.0f) angle -= 360.0f; #ifdef USE_OPENGL_2 shader.Set(gc); shader.Use(gc); #else gc.set_program_object(cl_program_color_only); #endif CL_PrimitivesArray prim_array(gc); gc.set_modelview(CL_Mat4f::identity()); gc.mult_scale(1.0f,1.0f, -1.0f); // So +'ve Z goes into the screen gc.mult_translate(0.0f, 0.0f, 2.0f); gc.mult_rotate(CL_Angle(angle, cl_degrees), 0.0f, 1.0f, 0.0f, false); gc.push_modelview(); recursive_render(gc, scene_teapot, scene_teapot->mRootNode, false); gc.pop_modelview(); gc.push_modelview(); gc.mult_scale(0.5f, 0.5f, 0.5f); gc.mult_translate(0.0f, -0.5f, 0.0f); recursive_render(gc, scene_clanlib, scene_clanlib->mRootNode, false); gc.pop_modelview(); #ifdef USE_OPENGL_2 shader.Set(gc, 0); shader.Use(gc); #else gc.set_program_object(cl_program_single_texture); #endif gc.set_texture(0, tux); gc.set_modelview(CL_Mat4f::identity()); gc.mult_scale(1.0f,1.0f, -1.0f); // So +'ve Z goes into the screen gc.mult_translate(0.7f, 0.5f, 2.0f); gc.mult_scale(0.05f, 0.05f, 0.05f); gc.mult_rotate(CL_Angle(angle * 4.0f, cl_degrees), 0.0f, 1.0f, 0.0f, false); recursive_render(gc, scene_tuxball, scene_tuxball->mRootNode, true); gc.reset_texture(0); gc.reset_program_object(); // Flip the display, showing on the screen what we have drawed // since last call to flip() window.flip(1); // This call processes user input and other events CL_KeepAlive::process(); } aiReleaseImport(scene_tuxball); aiReleaseImport(scene_clanlib); aiReleaseImport(scene_teapot); aiDetachAllLogStreams(); return 0; }
/* ---------------------------------------------------------------------------- */ int main(int argc, char **argv) { struct aiLogStream stream; glutInitWindowSize(900,600); glutInitWindowPosition(100,100); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInit(&argc, argv); glutCreateWindow("Michael Eller - Final Project (Preview)"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutSetCursor(GLUT_CURSOR_NONE); glutKeyboardFunc(key); sky[0] = LoadTexBMP("../sky0.bmp"); sky[1] = LoadTexBMP("../sky1.bmp"); printf("FLT_MAX = %f\n",FLT_MAX); /* get a handle to the predefined STDOUT log stream and attach it to the logging system. It remains active for all further calls to aiImportFile(Ex) and aiApplyPostProcessing. */ stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL); aiAttachLogStream(&stream); /* ... same procedure, but this stream now writes the log messages to assimp_log.txt */ stream = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"assimp_log.txt"); aiAttachLogStream(&stream); loadasset(Xwing); glClearColor(0.1f,0.1f,0.1f,1.f); glutMouseFunc(MouseButton); glutMotionFunc(MouseMotion); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); /* Uses default lighting parameters */ glEnable(GL_LIGHT1); /* Light corresponding to star in skybox */ glEnable(GL_DEPTH_TEST); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glEnable(GL_NORMALIZE); glEnable(GL_TEXTURE_CUBE_MAP_SEAMLESS); /* XXX docs say all polygons are emitted CCW, but tests show that some aren't. */ if(getenv("MODEL_IS_BROKEN")) glFrontFace(GL_CW); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); glutGet(GLUT_ELAPSED_TIME); glutMainLoop(); /* cleanup - calling 'aiReleaseImport' is important, as the library keeps internal resources until the scene is freed again. Not doing so can cause severe resource leaking. */ aiReleaseImport(scene); /* We added a log stream to the library, it's our job to disable it again. This will definitely release the last resources allocated by Assimp.*/ aiDetachAllLogStreams(); return 0; }
// The start of the Application int App::start(const std::vector<CL_String> &args) { quit = false; CL_OpenGLWindowDescription desc; desc.set_title("ClanLib Shadow Example"); desc.set_size(CL_Size(640, 640), true); desc.set_multisampling(4); desc.set_depth_size(16); CL_DisplayWindow window(desc); #ifdef _DEBUG //struct aiLogStream stream; //stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL); //aiAttachLogStream(&stream); //stream = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"assimp_log.txt"); //aiAttachLogStream(&stream); #endif aiSetImportPropertyFloat(AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE,89.53f); // Connect the Window close event CL_Slot slot_quit = window.sig_window_close().connect(this, &App::on_window_close); // Connect a keyboard handler to on_key_up() CL_Slot slot_input_up = (window.get_ic().get_keyboard()).sig_key_up().connect(this, &App::on_input_up); // Get the graphic context CL_GraphicContext gc = window.get_gc(); GraphicStore graphic_store(gc); scene.gs = &graphic_store; // Prepare the display gc.set_map_mode(cl_user_projection); CL_PolygonRasterizer polygon_rasterizer; polygon_rasterizer.set_culled(true); polygon_rasterizer.set_face_cull_mode(cl_cull_back); polygon_rasterizer.set_front_face(cl_face_side_clockwise); gc.set_polygon_rasterizer(polygon_rasterizer); create_scene(gc); CL_FrameBuffer framebuffer(gc); CL_Texture new_depth_texture(gc, CL_Size(1024, 1024), cl_depth_component); new_depth_texture.set_wrap_mode(cl_wrap_clamp_to_edge, cl_wrap_clamp_to_edge, cl_wrap_clamp_to_edge); framebuffer.attach_depth_buffer(new_depth_texture); scene.gs->texture_shadow = new_depth_texture; camera_angle = 0.0f; CL_Font font(gc, "tahoma", 24); FramerateCounter framerate_counter; unsigned int time_last = CL_System::get_time(); // Run until someone presses escape while (!quit) { framerate_counter.frame_shown(); unsigned int time_now = CL_System::get_time(); time_delta = time_now - time_last; time_last = time_now; rotate_teapot(); control_camera(); update_light(gc); calculate_matricies(gc); render_from_lightsource(gc, framebuffer); render_from_camera(gc, framebuffer); gc.set_modelview(CL_Mat4f::identity()); gc.set_map_mode(cl_map_2d_upper_left); CL_String fps(cl_format("%1 fps", framerate_counter.get_framerate())); font.draw_text(gc, 16-2, gc.get_height()-16-2, fps, CL_Colorf(0.0f, 0.0f, 0.0f, 1.0f)); font.draw_text(gc, 16, gc.get_height()-16-2, fps, CL_Colorf(1.0f, 1.0f, 1.0f, 1.0f)); // Use flip(1) to lock the fps window.flip(0); // This call processes user input and other events CL_KeepAlive::process(); } aiDetachAllLogStreams(); return 0; }
// ---------------------------------------------------------------------------- int main(int argc, char **argv) { aiLogStream stream; //glutInitWindowSize(900,600); //glutInitWindowPosition(100,100); //glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //glutInit(&argc, argv); //glutCreateWindow("Assimp - Very simple OpenGL sample"); //glutDisplayFunc(display); //glutReshapeFunc(reshape); sf::IntRect viewport(0,0,800,600); sf::RenderWindow window(sf::VideoMode(viewport.width,viewport.height,32), "SFML Window"); reshape(viewport.width,viewport.height); // get a handle to the predefined STDOUT log stream and attach // it to the logging system. It remains active for all further // calls to aiImportFile(Ex) and aiApplyPostProcessing. stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL); aiAttachLogStream(&stream); // ... same procedure, but this stream now writes the // log messages to assimp_log.txt stream = aiGetPredefinedLogStream(aiDefaultLogStream_FILE,"assimp_log.txt"); aiAttachLogStream(&stream); // the model name can be specified on the command line. If none // is specified, we try to locate one of the more expressive test // models from the repository (/models-nonbsd may be missing in // some distributions so we need a fallback from /models!). std::string assimp_models = getenv("ASSIMP"); std::string dwarf, testMod; dwarf=assimp_models+"/test/models-nonbsd/MD5/Bob.md5mesh"; testMod=assimp_models+ "/test/models/X/Testwuson.X"; if( 0 != loadasset( argc >= 2 ? argv[1] : dwarf.c_str())) { if( argc != 1 || (0 != loadasset( dwarf.c_str()) && 0 != loadasset( testMod.c_str()))) { //return -1; ; } } glClearColor(0.1f,0.1f,0.1f,1.f); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); // Uses default lighting parameters glEnable(GL_DEPTH_TEST); glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE); glEnable(GL_NORMALIZE); // XXX docs say all polygons are emitted CCW, but tests show that some aren't. if(getenv("MODEL_IS_BROKEN")) glFrontFace(GL_CW); glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE); //glutGet(GLUT_ELAPSED_TIME); //glutMainLoop(); while (window.isOpen()) { // Process events sf::Event Event; while (window.pollEvent(Event)) { // Close window : exit if (Event.type == sf::Event::Closed) window.close(); // Escape key : exit if ((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::Escape)) window.close(); // Resize event : adjust viewport if (Event.type == sf::Event::Resized){ reshape(Event.size.width, Event.size.height); } } //draw/update display(); window.display(); } // cleanup - calling 'aiReleaseImport' is important, as the library // keeps internal resources until the scene is freed again. Not // doing so can cause severe resource leaking. aiReleaseImport(scene); // We added a log stream to the library, it's our job to disable it // again. This will definitely release the last resources allocated // by Assimp. aiDetachAllLogStreams(); return 0; }