void OGLViewer::initializeGL() { // OpenGL extention initialization glewInit(); // Print OpenGL vertion cout << "Renderer: " << glGetString(GL_RENDERER) << endl; cout << "OpenGL version supported " << glGetString(GL_VERSION) << endl; // Enable OpenGL features glEnable(GL_MULTISAMPLE); //glEnable(GL_LINE_SMOOTH); //glEnable(GL_POLYGON_SMOOTH); glEnable(GL_BLEND); glEnable(GL_DEPTH_TEST); // enable depth-testing glBlendEquation(GL_FUNC_ADD); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glFrontFace(GL_CCW); // set counter-clock-wise vertex order to mean the front glClearColor(0.6, 0.6, 0.6, 0.0); ////////////////////////////////////////////////////////////////////////// // Create shader files model_shader.reset(new GLSLProgram("mesh_vs.glsl", "mesh_fs.glsl", nullptr, nullptr, nullptr, true, 1, feedbackVaryings.data())); // Export vbo for shaders model_mesh->exportVBO(&model_verts, &model_uvs, &model_norms); feedbackOutput.resize(model_verts.size()); bindMesh(); }
Mesh::Mesh(): FACES(0), TRIANGLES_PER_FACE(0), VERTICES_PER_TRIANGLE(0), INDICES(0), INDEX_ARRAY_SIZE(0), DIMENSIONS(0), COLOUR_COMPONENT_COUNT(0), VERTEX_SIZE(0), VERTEX_COUNT(0), VERTEX_ARRAY_SIZE(0), name(""), indexedMesh(true), wireFrame(false), meshHandle(0) { glGenVertexArrays(1, &meshHandle); bindMesh(); }
void Mesh::draw() { bindMesh(); //Let openGL know that our input is triangles to be tesselated. glPatchParameteri(GL_PATCH_VERTICES, 3); if (indexedMesh) { /* Draw whatever is specified by the currently bound mesh (VAO) * 1. Type of primitive we want to draw * 2. Amount of indices in our array * 3. Type of variable stored in the array * 4. Pointer to the actual index array (leave as null to get the bound GL_ELEMENT_ARRAY_BUFFER instead) */ glDrawElements(GL_PATCHES, INDEX_ARRAY_SIZE, GL_UNSIGNED_INT, 0); } else { glDrawArrays(GL_TRIANGLES, 0, VERTEX_COUNT); } }