Exemplo n.º 1
0
CircleFieldRenderer::CircleFieldRenderer(const Manifold& m,
        bool smooth,
        VertexAttributeVector<Vec2d>& field,
        float gamma): SimpleShaderRenderer(vss, fss)
{

    GLint old_prog;
    glGetIntegerv(GL_CURRENT_PROGRAM, &old_prog);
    glUseProgram(prog);

    GLuint scalar_attrib = glGetAttribLocation(prog, "circlepos");

    //    static float& gamma = CreateCVar("display.scalar_field_renderer.gamma",2.2f);
    glUniform1fARB(glGetUniformLocationARB(prog, "gamma"), gamma);
    glNewList(display_list,GL_COMPILE);

    for(FaceIDIterator f = m.faces_begin(); f != m.faces_end(); ++f) {
        if(!smooth)
            glNormal3dv(normal(m, *f).get());
        if(no_edges(m, *f)== 3)
            glBegin(GL_TRIANGLES);
        else
            glBegin(GL_POLYGON);


        for(Walker w = m.walker(*f); !w.full_circle(); w = w.circulate_face_ccw()) {
            Vec3d n(normal(m, w.vertex()));
            if(smooth)
                glNormal3dv(n.get());
            glVertexAttrib2dv(scalar_attrib, field[w.vertex()].get());
            glVertex3dv(m.pos(w.vertex()).get());
        }
        glEnd();
    }
    glEndList();
    glUseProgram(old_prog);

}
void ShaderProgram::setAttribute(GLint index, const Vector2d &v)
{
	glVertexAttrib2dv(index, &(v.x));
}
Exemplo n.º 3
0
void shader_gl3::attribute(const char* name, const double2* arg1) const {
	A2E_CHECK_ATTRIBUTE_EXISTENCE(name);
	A2E_CHECK_ATTRIBUTE_TYPE(name, GL_FLOAT_VEC2);
	glVertexAttrib2dv(A2E_SHADER_GET_ATTRIBUTE_POSITION(name), (GLdouble*)arg1);
}