int main(int argc, char** argv) { --argc; ++argv; const int WIDTH = 800; const int HEIGHT = 600; /* * Create window */ sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Window", sf::Style::Default, sf::ContextSettings(32)); /* * Initialize GLEW */ GLenum status = glewInit(); if(status != GLEW_OK) { std::cerr << "[F] GLEW NOT INITIALIZED: "; std::cerr << glewGetErrorString(status) << std::endl; window.close(); return -1; } glEnable(GL_TEXTURE_2D); glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); //glFrontFace(GL_CW); //glCullFace(GL_BACK); //glEnable(GL_CULL_FACE); glClearDepth(1.f); glShadeModel(GL_SMOOTH); /* * Create GUI */ tgui::Gui gui(window); tgui::Gui gui2(window); gui.setGlobalFont("fonts/DejaVuSans.ttf"); loadWidgets(gui, gui2, window); char* args[argc + 1]; /* * load geometry */ Model cube; getArgs(argc, argv, ".obj", args); if (!args[0]) { std::cerr << "[F] MUST SUPPLY 1+ OBJ FILES IN COMMAND LINE ARGS <filename.obj>" << std::endl; exit(-1); } //if cube.mesh = loadMesh(args[0]); if (!cube.mesh) { exit(-1); } //if getArgs(argc, argv, ".scale", args); if (args[0]) { cube.scale = glm::vec3(strtof(args[0], NULL)); } //if else { cube.scale = glm::vec3(1.0f); } //else /* * load shaders */ Shader vertexShader(GL_VERTEX_SHADER); getArgs(argc, argv, ".vs", args); vertexShader.loadFromFile(args[0]? args[0] : ".vs"); vertexShader.compile(); Shader fragmentShader(GL_FRAGMENT_SHADER); getArgs(argc, argv, ".fs", args); fragmentShader.loadFromFile(args[0]? args[0] : ".fs"); fragmentShader.compile(); /* * create program */ ShaderProgram program; program.attachShader(vertexShader); program.attachShader(fragmentShader); program.linkProgram(); program.addAttribute("vertexPosition_modelspace"); program.addAttribute("vertexUV"); //program.addAttribute("vertexNormal_modelspace"); program.addUniform("MVP"); program.addUniform("sampler"); Camera camera; sf::Event event; tgui::Callback callback; Planet p(&cube); /* * main loop */ while (window.isOpen()) { while (window.pollEvent(event)) { switch (event.type) { case sf::Event::Closed: window.close(); break; case sf::Event::Resized: glViewport(0, 0, event.size.width, event.size.height); camera.projection = glm::perspective(45.0f, float(event.size.width)/float(event.size.height), 0.01f, 100.0f); break; default: break; } //switch gui.handleEvent(event); } //if while (gui.pollCallback(callback)) { gui.handleEvent(event); } //if window.clear(); guiDraw(window, gui2); glClear(GL_DEPTH_BUFFER_BIT); /* * render OpenGL here */ //glValidateProgram(program.program); for (Planet* planet : planets) { render(*planet, camera, program); } //for guiDraw(window, gui); window.display(); } //while // Clean up after ourselves if (window.isOpen()) { window.close(); } //if return EXIT_SUCCESS; } //main
int main(int argc, char** argv) { const int WIDTH = 800; const int HEIGHT = 600; /* * Create window */ sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Window", sf::Style::Default, sf::ContextSettings(32)); /* * Initialize GLEW */ GLenum status = glewInit(); if(status != GLEW_OK) { std::cerr << "[F] GLEW NOT INITIALIZED: "; std::cerr << glewGetErrorString(status) << std::endl; window.close(); return -1; } /* * Create GUI */ tgui::Gui gui(window); tgui::Gui gui2(window); gui.setGlobalFont("fonts/DejaVuSans.ttf"); loadWidgets(gui, gui2, window); /* * load geometry */ GLuint vbo_geometry; loadGeometry(vbo_geometry); /* * load shader */ Shader shader; if (!shader.loadShadersFile(argc >= 2? argv[1] : 0, argc >= 3? argv[2] : 0)) { window.close(); return -1; } //if /* * create program */ Program program; if (!program.loadShader(shader)) { window.close(); return -1; } //if glEnable(GL_DEPTH_TEST); glDepthMask(GL_TRUE); glClearDepth(1.f); Camera camera; sf::Event event; tgui::Callback callback; Model model; sf::Clock clock; /* * main loop */ //spin is the object spinning about its y-axis //rotation is the object translating around the origin in a circle float spinRate = M_PI; float rotationRate = M_PI/2; while (window.isOpen()) { while (window.pollEvent(event)) { switch (event.type) { case sf::Event::Closed: window.close(); break; case sf::Event::Resized: glViewport(0, 0, event.size.width, event.size.height); camera.projection = glm::perspective(45.0f, float(event.size.width)/float(event.size.height), 0.01f, 100.0f); break; case sf::Event::KeyPressed: switch(event.key.code) { case sf::Keyboard::Escape: cleanUp(vbo_geometry, window); exit(0); break; case sf::Keyboard::Up: if (!simPaused) { rotationRate += 0; //if wanting to modify rotation spinRate += .1; } break; case sf::Keyboard::Down: if (!simPaused) { rotationRate -= 0; //if wanting to modify rotation spinRate -= .1; } break; default: break; } //switch break; case sf::Event::MouseButtonPressed: switch (event.key.code) { case sf::Mouse::Left: //rotationRate *= -1; //if wanting to modify rotation spinRate *= -1; break; default: break; } //switch break; default: break; } //switch gui.handleEvent(event); } //if while (gui.pollCallback(callback)) { gui.handleEvent(event); } //if update(model, spinRate, rotationRate, clock.restart().asSeconds()); window.clear(); window.pushGLStates(); gui2.draw(); window.popGLStates(); glClear(GL_DEPTH_BUFFER_BIT); /* * render OpenGL here */ glUseProgram(program.program); glEnableVertexAttribArray(program.location.position); glEnableVertexAttribArray(program.location.color); glBindBuffer(GL_ARRAY_BUFFER, vbo_geometry); render(model, camera, program); glBindBuffer(GL_ARRAY_BUFFER, 0); glDisableVertexAttribArray(program.location.position); glDisableVertexAttribArray(program.location.color); glUseProgram(0); window.pushGLStates(); gui.draw(); window.popGLStates(); window.display(); } //while // Clean up after ourselves cleanUp(vbo_geometry, window); return EXIT_SUCCESS; } //main
int Editor::main(const std::vector<std::string> &args) { std::string theme; if (clan::FileHelp::file_exists("Resources/GUIThemeAero/theme.css")) theme = "Resources/GUIThemeAero"; else if (clan::FileHelp::file_exists("Resources/GUIThemeBasic/theme.css")) theme = "Resources/GUIThemeBasic"; else throw clan::Exception("Not themes found"); GUIManager gui(theme); clan::DisplayWindowDescription win_desc; win_desc.set_allow_resize(false); win_desc.set_title("Editor"); win_desc.set_position(clan::Rect(100, 100, Size(SCREEN_WIDTH,SCREEN_HEIGHT)), false); window= new clan::GUIComponent (&gui, win_desc, "Window"); window->func_close().set(this, &Editor::on_window_close, window); window->func_render().set(this, &Editor::on_window_draw); window->set_constant_repaint(true); InputContext ic = window->get_ic(); device = ic.get_mouse(); Slot slot = device.sig_key_up().connect(this, &Editor::on_right_mouse_click); GUIManager gui2(theme); clan::DisplayWindowDescription popup_desc; popup_desc.set_allow_resize(false); popup_desc.set_title("Properties"); popup_desc.set_position(clan::Rect(100, 100, Size(300,100)), false); popupwindow = new clan::GUIComponent (&gui2, popup_desc, "Window"); popupwindow->set_visible(false); clan::Label* label = new clan::Label(popupwindow); label->set_geometry(clan::Rect(0,0,clan::Size(40,20))); label->set_text("Nome"); lineedit = new clan::LineEdit(popupwindow); lineedit->set_geometry(clan::Rect(40, 0, clan::Size(100, 30))); lineedit->set_text("LineEdit"); clan::PushButton* OKButton = new clan::PushButton(popupwindow); OKButton->set_geometry(clan::Rect(10,40,clan::Size(70,30))); OKButton->set_text("OK"); OKButton->func_clicked().set(this, &Editor::on_button_ok_clicked, OKButton); clan::PushButton* DeleteButton = new clan::PushButton(popupwindow); DeleteButton->set_geometry(clan::Rect(200,40,clan::Size(70,30))); DeleteButton->set_text("Delete"); DeleteButton->func_clicked().set(this, &Editor::on_button_delete_clicked, DeleteButton); toMod = new Label(window); spin = new clan::Spin(popupwindow); spin->set_geometry(clan::Rect(100,40,Size(80,20))); clan::MenuBar mb(window); mb.set_geometry(clan::Rect(0, 0, Size(SCREEN_WIDTH,30))); clan::PopupMenu ppMenu; ppMenu.insert_item("New"); ppMenu.insert_item("Open"); ppMenu.insert_item("Close"); ppMenu.set_minimum_width(100); mb.add_menu("File",ppMenu); clan::Image actor(window->get_canvas(), "Resources/actor.png"); clan::ImageView actorCreator(window); actorCreator.set_image(actor); actorCreator.set_geometry(clan::Rect(0,SCREEN_HEIGHT-actor.get_height(),Size(actor.get_width()*0.75,actor.get_height()*0.75))); actorCreator.func_input_pressed().set(this,&Editor::actor_create); clan::Label newLabel(&actorCreator); newLabel.set_geometry(clan::Rect(actor.get_width()*0.25,actor.get_height()*0.25,Size(100,20)));//0.25 -> circa metà dell'immagine ridimensionata newLabel.set_text("New Actor"); font = new clan::Font(window->get_canvas(),"tahoma",FONT_SIZE); gui.exec(); return 0; }