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; }
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*){}); }
/* * 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; }
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; }
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; } }