コード例 #1
0
ファイル: program.cpp プロジェクト: LBdN/Shaderkit
 bool GLProgram::removeShader(ShaderPtr shader)
 {
   if (!m_shaders.contains(shader)) return false;
   disconnect(shader.get(), SIGNAL(changed(ShaderPtr)), this, SIGNAL(shaderChanged(ShaderPtr)));
   m_shaders.remove(shader);
   if (m_prog) glRun(glDetachShader(m_prog, shader->id()));
   shader->setProgram(ProgramPtr());
   m_compiled = false;
   m_relink = true;
   emit changed();
   return true;
 }
コード例 #2
0
ファイル: program.cpp プロジェクト: uckelman/liblightgrep
ProgramPtr Program::unmarshall(void* buf, size_t len) {
  // The caller is responsible for freeing buf. We subvert std::unique_ptr
  // and std::shared_ptr here by giving them empty deleters.

  Program* p = static_cast<Program*>(buf);

  // IBeg may contain garbage; prevent operator= from calling the deleter.
  p->IBeg.release();
  // Set IBeg to the start of the instructions; set an empty deleter since
  // the caller is responsible for freeing buf.
  p->IBeg = std::unique_ptr<Instruction[], void(*)(Instruction*)>(
    reinterpret_cast<Instruction*>(p + 1), [](Instruction*){}
  );

  p->IEnd = reinterpret_cast<Instruction*>(static_cast<char*>(buf) + len);

  return ProgramPtr(p, [](Program*){});
}
コード例 #3
0
ファイル: kernel.c プロジェクト: dche/rcl
/*
 * call-seq:
 *      Kernel::new(aProgram, name)     -> a Kernel object.
 *
 * Wrapps +clCreateKernel()+.
 */
static VALUE
rcl_kernel_init(VALUE self, VALUE program, VALUE name)
{
    EXPECT_RCL_TYPE(program, Program);
    Check_Type(name, T_STRING);

    cl_program prog = ProgramPtr(program);
    const char *str = RSTRING_PTR(name);

    cl_int res;
    cl_kernel k = clCreateKernel(prog, str, &res);
    CHECK_AND_RAISE(res);

    rcl_kernel_t *pk;
    Data_Get_Struct(self, rcl_kernel_t, pk);

    pk->k = k;
    return self;
}
コード例 #4
0
ファイル: Parser.cpp プロジェクト: asgeir/old-school-projects
ProgramPtr Parser::parseProgram()
{
    if (!match(TokenType::Program)) {
        reportError(ErrorCodes::ExpectedProgram);

        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    IdentifierPtr programName = parseIdentifier();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    if (!match(TokenType::LParen)) {
        reportError(ErrorCodes::ExpectedLParen);

        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    IdentifiersPtr inputOutput = parseIdentifierList();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    if (!match(TokenType::RParen)) {
        reportError(ErrorCodes::ExpectedRParen);

        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    if (!match(TokenType::Semicolon)) {
        reportError(ErrorCodes::ExpectedSemicolon);

        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    DeclarationsPtr globalVariables = parseDeclarations();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    SubprogramDeclarationsPtr functions = parseSubprogramDeclarations();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    CompoundStatementPtr mainProgram = parseCompoundStatement();
    if (m_errorCode > ErrorCodes::NoError) {
        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    if (!match(TokenType::Period)) {
        reportError(ErrorCodes::ExpectedPeriod);

        panic(programFollow, programFollowSize);
        return ProgramPtr();
    }

    ProgramPtr program(new Program);
    program->programName = programName;
    program->inputOutput = inputOutput;
    program->variables = globalVariables;
    program->functions = functions;
    program->mainProgram = mainProgram;

    return program;
}
コード例 #5
0
ファイル: Window.cpp プロジェクト: johans/lab4
Window::Window(int width, int height, int bpp) :
    width(width), height(height), bpp(bpp), quit(false), isActive(true),
    lightPos(Vec4(2.0, 5.0, 0.5, 1.0)), topView(false),
    from(new Vec3(-2, 4.0, 8)), at(new Vec3(0.0, 0.0, -1.0)),
    up(new Vec3(0, 1, 0)), camera(from, at, up)
{
    initSDL();
    initGL();

    AC3DConverter a;
    model = ModelPtr(a.loadAC3DModel("../data/cylinder.ac"));

    BonePtr bone(model->getBone());
    bone->setPos(Vec3(-3.0, 0.0, 0.0));

    JointPtr joint = bone->getJoint();
    joint->setPos(Vec3(0.0, 0.0, 0.0));

    BonePtr b(new Bone);
    joint->setBone(b);
    BonePtr bone2 = joint->getBone();

    JointPtr joint2 = bone2->getJoint();
    joint2->setPos(Vec3(3.0, 0.0, 0.0));

    bone->setTransform(vr::Matrix::translate(0.0, 2.0, 0.0));
    bone->getJoint()->setTransform(vr::Matrix::translate(0.0, -2.0, 0.0));
    bone2->setTransform(vr::Matrix::translate(0.0, 2.0, 0.0));

    model->calcWeight();

    ShaderPtr shader(new Shader("shaders/skin.vert", "shaders/skin.frag"));
    program = ProgramPtr(new Program());
    program->addShaders(shader);

    tex = TexturePtr(new Texture());
    tex->createTextureARB("../data/alpha.png", GL_TEXTURE0_ARB);
    uniformTex = Uniform1iPtr(new Uniform<int, 1>("ualpha", program->getId()));
    uniformTex->setValue(0);
    program->addUniform(uniformTex);

    texFur = TexturePtr(new Texture());
    texFur->createTextureARB("../data/Fur1.png", GL_TEXTURE1_ARB);
    uniformTexFur = Uniform1iPtr(new Uniform<int, 1>("ufur", program->getId()));
    uniformTexFur->setValue(1);
    uniformTexFur->apply();
    program->addUniform(uniformTexFur);

    uniformPass = Uniform1iPtr(new Uniform<int, 1>("upass", program->getId()));
    program->addUniform(uniformPass);

    uniformMatrices = UniformMatrix3fvPtr(new Uniform<vr::Matrix, 3>("boneMatrices[0]", program->getId()));
    program->addUniform(uniformMatrices);

    rotation = 0.0f;

    for (unsigned int i = 0; i < 20; i++) 
    {
        pressedKeys[i] = false;
    }
}