void EntityBound::OnShapeSelectedChanged() { safe_delete (mRenderColMesh); Node * pNode = Editor::Instance()->GetSelectNode(); if (!KIND_OF(Mesh, pNode)) return ; Mesh * pMesh = (Mesh *)pNode; if (pMesh->GetSource() == NULL) return ; ColMesh * pColMesh = pMesh->GetSource()->GetColMesh(); if (pColMesh->GetNumOfIndices() == 0 || pColMesh->GetNumOfIndices() > 65535) return ; int iVertexCount = pColMesh->GetNumOfVertices(); int iIndexCount = pColMesh->GetNumOfIndices(); Float3 * pColVert = pColMesh->GetVertices(); int * pColIndex = pColMesh->GetIndices(); mRenderColMesh = new RenderOp(); mRenderColMesh->vertexDeclarations[0].AddElement(eVertexSemantic::POSITION, eVertexType::FLOAT3); mRenderColMesh->vertexBuffers[0] = HWBufferManager::Instance()->NewVertexBuffer(sizeof(float) * 3, iVertexCount); Float3 * vdata = (Float3 *)mRenderColMesh->vertexBuffers[0]->Lock(eLockFlag::WRITE); for (int i = 0; i < iVertexCount; ++i) { vdata[i] = pColVert[i]; } mRenderColMesh->vertexBuffers[0]->Unlock(); mRenderColMesh->indexBuffer = HWBufferManager::Instance()->NewIndexBuffer(iIndexCount); unsigned short * idata = (unsigned short *)mRenderColMesh->indexBuffer->Lock(eLockFlag::WRITE); for (int i = 0; i < pColMesh->GetNumOfIndices() / 3; ++i) { unsigned short a = (unsigned short)pColIndex[i * 3 + 0]; unsigned short b = (unsigned short)pColIndex[i * 3 + 1]; unsigned short c = (unsigned short)pColIndex[i * 3 + 2]; *idata++ = a; *idata++ = b; *idata++ = c; } mRenderColMesh->indexBuffer->Unlock(); mRenderColMesh->primCount = iIndexCount / 2; mRenderColMesh->primType = ePrimType::LINE_LIST; }
static VALUE rbcs_dsf_set_bright(VALUE self, VALUE bright) { cs_dsf_t *cself; Data_Get_Struct(self, cs_dsf_t, cself); if(KIND_OF(bright, rb_cNumeric)) { cs_dsf_set_bright(cself, NUM2DBL(bright)); } else { VALUE bright_port = rb_iv_get(self, "@bright_port"); if(NIL_P(bright_port)) { bright_port = Data_Wrap_Struct(cJackPort, 0, fake_free, cself->bright_port); rb_iv_set(self, "@bright_port", bright_port); } jr_client_connect(self, bright, bright_port); // ignore return value cs_dsf_set_bright(cself, NAN); } return bright; }
static VALUE rbcs_porta_set_lag(VALUE self, VALUE lag) { cs_porta_t *cself; Data_Get_Struct(self, cs_porta_t, cself); if(KIND_OF(lag, rb_cNumeric)) { cs_porta_set_lag(cself, NUM2DBL(lag)); } else { VALUE lag_port = rb_iv_get(self, "@lag_port"); if(NIL_P(lag_port)) { lag_port = Data_Wrap_Struct(cJackPort, 0, fake_free, cself->lag_port); rb_iv_set(self, "@lag_port", lag_port); } jr_client_connect(self, lag, lag_port); // ignore return value cs_porta_set_lag(cself, NAN); } return lag; }