コード例 #1
0
ファイル: EntityBound.cpp プロジェクト: MSoft1115/Rad3D
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;
}
コード例 #2
0
ファイル: dsf.c プロジェクト: ebuswell/Cshellsynth
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;
}
コード例 #3
0
ファイル: portamento.c プロジェクト: ebuswell/Cshellsynth
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;
}