void SubdividerState::init() { /// Called when your application is about to enter the event loop. Load /// objects, programs, etc. setupFonts(); phongProg = new nsgl::Program("resources/shader/phong_vert.glsl", "resources/shader/phong_frag.glsl"); phongProg->buildOrCrash(); phongProg->ignoreWarnings = false; shouldDrawLines = paused = false; /// Setup the camera camera.setUpDir(kUpDir); camera.setPosition(util::Vec3f(5, 5, 5)); camera.lookAt(util::Vec3f(0, 0, 0)); camera.hasLookTarget = true; //camera jobPool = util::JobPool(1); drawHUD = true; objectSpacingFromOrigin = 2.0f * kRightDir; objectScales = 1.0f; //if (getApp()->argc > 1) // meshFileName = getApp()->argv[1]; //else // meshFileName = "resources/mesh/tetrahedron.obj"; //setMesh(meshFileName); std::string baseDir = "resources/mesh/"; availableMeshes = util::make_vector(baseDir + "cube.obj", baseDir + "lowPolyPlane.obj", baseDir + "evergreen.obj", baseDir + "cow-nonormals.obj", baseDir + "CarrotMesh.obj"); currentMeshNum = 0; setMesh(availableMeshes[currentMeshNum]); mesh.cycleToNextType(); getFontEngine().setColor(1, 1, 1, 1); //glEnable(GL_CULL_FACE); //glCullFace(GL_BACK); glEnable(GL_DEPTH_TEST); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); NSGL_ERRORS(); }
void GameStateConfigBase::refreshFont() { delete font; font = getFontEngine(); delete comb; comb = new CombatText(); }
void GameStateConfigBase::refreshFont() { delete font; font = getFontEngine(); }
void SubdividerState::render() { glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /// Draw debug state. renderDebug(); if (shouldDrawLines) glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); else glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); phongProg->glBind(); /// Draw rest ov everything util::MatrixStack MV, P; camera.applyProjectionMatrix(&P); camera.applyViewMatrix(&MV); engine::PointLight light(util::Vec3f(-4, 4, -4), util::Vec3f(1, 1, 1)); phongProg->glSendUniform("uLightPos", MV.applyToPos(light.position)); phongProg->glSendUniform("uLightCol", light.color); engine::PhongMaterial mat; mat.send(*phongProg, "UaColor", "UdColor", "UsColor", "Ushine"); MV.push(); MV.translate(-objectSpacingFromOrigin); MV.scale(objectScales); phongProg->glSendUniform("MV", MV.top()); phongProg->glSendUniform("P", P.top()); baseModel.draw(*phongProg); MV.pop(); engine::SimpleModel * subdivModel = mesh.getModel(); if (subdivModel != NULL) { mat.diffuse = util::Vec3f(1, 0, 0); mat.send(*phongProg, "UaColor", "UdColor", "UsColor", "Ushine"); MV.push(); MV.translate(objectSpacingFromOrigin); MV.scale(objectScales); phongProg->glSendUniform("MV", MV.top()); phongProg->glSendUniform("P", P.top()); subdivModel->draw(*phongProg); MV.pop(); } if (drawHUD) { getFontEngine().renderText(std::string("Mesh: ") + meshFileName + "\n\nM: NextMesh", -0.95, 0.85); getFontEngine().renderText(std::string("C: Capture Cursor") + "\n\nL: Toggle Lines" + "\n\nH: Toggle HUD" + "\n\nL/R Arrows: spacing" + "\n\nU/D Arrows: scaling", -0.95, -0.50); getFontEngine().renderText(std::string("S: Subdivide mesh") + "\n\nN: Next Subdiv Type" + "\n\nR: Reset mesh" + "\n\nSubdiv Type: " + mesh.getTypeString() + "\n\nFPS: " + getFPS(), 0, -0.50); } for (int i = 0; i < (int) postRenderFuncs.size(); i++) postRenderFuncs[i](); postRenderFuncs.clear(); }
void SubdividerState::windowResize(int w, int h) { getFontEngine().updateWindowSize(w, h); }
void SubdividerState::setupFonts() { getFontEngine().addFont(mainFontHandle, "resources/fonts/Hey_Gorgeous.ttf"); getFontEngine().useFont(mainFontHandle, 14); }