void VtkVisPipelineView::showImageToMeshConversionDialog() { MeshFromRasterDialog* dlg = new MeshFromRasterDialog; connect(dlg, SIGNAL(setMeshParameters(QString, MeshLib::MeshElemType, MeshLib::UseIntensityAs)), this, SLOT(constructMeshFromImage(QString, MeshLib::MeshElemType, MeshLib::UseIntensityAs))); dlg->exec(); }
bool ShaderD3D11::renderMeshes (const Ibl::RenderRequest& inputRequest, const std::set<const Ibl::Mesh*> & meshes) const { Ibl::CullMode cachedCullMode = _deviceInterface->cullMode(); // Form a new request around the meshes request. Ibl::RenderRequest request = inputRequest; if (meshes.size() > 0) { for (auto it = meshes.begin(); it != meshes.end(); it++) { const Ibl::Mesh* mesh = (*it); request.mesh = (mesh); request.material = mesh->material(); if (!mesh->visible()) continue; if (mesh->material()->twoSided()) { _deviceInterface->setCullMode (Ibl::CullNone); } if (const Ibl::GpuTechniqueD3D11* technique = dynamic_cast<const Ibl::GpuTechniqueD3D11*>(request.technique)) { ID3DX11EffectTechnique* techniqueHandle = technique->handle(); const D3DX11_TECHNIQUE_DESC& description = technique->description(); setTechniqueParameters (request); setMeshParameters (request); for (uint32_t passIndex = 0; passIndex < description.Passes; passIndex++) { // Need to set input handle here if (technique->setupInputLayout (mesh, passIndex)) { techniqueHandle->GetPassByIndex (passIndex)->Apply(0, _immediateCtx); mesh->render(&request, technique); } } } if (mesh->material()->twoSided()) { _deviceInterface->setCullMode (cachedCullMode); } } } return true; }
void MeshFromRasterDialog::accept() { UseIntensityAs::type i_type(UseIntensityAs::ELEVATION); if (this->materialButton->isChecked()) i_type = UseIntensityAs::MATERIAL; else if (this->ignoreButton->isChecked()) i_type = UseIntensityAs::NONE; MshElemType::type e_type(MshElemType::TRIANGLE); if (this->quadButton->isChecked()) e_type = MshElemType::QUAD; else if (this->hexButton->isChecked()) e_type = MshElemType::HEXAHEDRON; emit setMeshParameters(this->mshNameEdit->text(), e_type, i_type); this->done(QDialog::Accepted); }
bool ShaderD3D11::renderInstancedBuffer (const Ibl::RenderRequest& request, const Ibl::IGpuBuffer* instanceBuffer) const { if (const Ibl::BufferD3D11* resource = dynamic_cast<const Ibl::BufferD3D11*>(instanceBuffer)) { if (const Ibl::GpuTechniqueD3D11* technique = dynamic_cast<const Ibl::GpuTechniqueD3D11*>(request.technique)) { const D3DX11_TECHNIQUE_DESC& description = technique->description(); ID3DX11EffectTechnique* techniqueHandle = technique->handle(); setTechniqueParameters (request); setMeshParameters (request); for (uint32_t passIndex = 0; passIndex < description.Passes; passIndex++) { techniqueHandle->GetPassByIndex (passIndex)->Apply(0, _immediateCtx); ID3D11Buffer* vertexBuffers[2] = { nullptr , nullptr}; UINT strides[2] = { 0, 0 }; UINT offsets[2] = { 0, 0 }; _immediateCtx->IASetIndexBuffer(nullptr, DXGI_FORMAT_UNKNOWN, 0); _immediateCtx->IASetVertexBuffers(0, 2, vertexBuffers, strides, offsets); _immediateCtx->IASetInputLayout(nullptr); // TODO: Topology as input _immediateCtx->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); _immediateCtx->DrawInstancedIndirect(resource->buffer(), 0); } } } return true; }