Example #1
0
			Drawable::~Drawable()
			{
				if (vertex_format_)
					renderer_->DeleteVertexFormat(vertex_format_);
				if (vertex_buffer_)
					renderer_->DeleteVertexBuffer(vertex_buffer_);
				if (vertex_array_object_)
					renderer_->context()->DeleteVertexArrayObject(vertex_array_object_);
				FreeArrays();
			}
Example #2
0
void PRTHierarchyMapping::GetMapping(
                    Mesh* renderMesh, Mesh* approxMesh,
										int* mappingIndices, float* mappingWeights)
{
	mTree = new K3Tree(renderMesh, approxMesh);
  mTree->FillTreeWithData();
  bool debug = false;
  InitArrays();
	for(int i = 0; i < renderMesh->GetNumVertices(); ++i) {
    Vertex* vertices = renderMesh->GetVertices();
		Vertex vertex = vertices[i];
		
		if(i == 12314 || i == 12272 || i == 12266) {
			PD(L"mapping info for vertex ", i);
			PD(L"Blue, Point[{", vertex.pos.x);
			PD(L",", vertex.pos.y);
			PD(L",", vertex.pos.z);
			PD(L"}]");
			mTree->SetDebug(true);
			debug = true;
		}
		else{
			mTree->SetDebug(false);
			debug = false;
		}
				
		mTree->GetMapping(vertex, indices, weights);
  
		float sumOfWeights = 0;
		for(int k = 0; k < 3; ++k) {
			if(debug) {
				PD(L"nn: ", k);
				PD(L"index :", indices[k]);
				PD(L"weights :", weights[k]);
			}
			
			mappingIndices[(i*3) + k] = indices[k];
			mappingWeights[(i*3) + k] = weights[k];
			sumOfWeights += weights[k];
		}
		
		if(sumOfWeights > 1.001f || sumOfWeights < 0.999f) {
			PD(L"sum of weights not 1");
		}
  }
  FreeArrays();
}
Example #3
0
			void Drawable::MakeRenderable()
			{
				assert(!attribs_.empty());
				renderer_->AddVertexFormat(vertex_format_, &attribs_[0], (u32)attribs_.size());
				renderer_->context()->CheckForErrors();
				
				renderer_->context()->GenVertexArrayObject(vertex_array_object_);
				renderer_->context()->BindVertexArrayObject(vertex_array_object_);
				renderer_->context()->CheckForErrors();
				
				renderer_->AddVertexBuffer(vertex_buffer_, num_vertices_ * vertex_format_->vertex_size(), vertices_array_, sht::graphics::BufferUsage::kStaticDraw);
				renderer_->context()->CheckForErrors();
				if (vertex_buffer_ == nullptr)
				{
					can_render_ = false;
					return;
				}
				
				// Free all data in memory
				FreeArrays();
				
				// There is only one attribute
				const char* base = (char*)0;
				for (u32 i = 0; i < attribs_.size(); ++i)
				{
					const sht::graphics::VertexFormat::Attrib& vf_attrib = vertex_format_->generic(i);
					renderer_->context()->VertexAttribPointer(i, vf_attrib.size, sht::graphics::DataType::kFloat, vertex_format_->vertex_size(), base + vf_attrib.offset);
					renderer_->context()->CheckForErrors();
					renderer_->context()->EnableVertexAttribArray(i);
					renderer_->context()->CheckForErrors();
				}
				
				renderer_->context()->BindVertexArrayObject(0);
				renderer_->context()->CheckForErrors();
				
				attribs_.clear();
				attribs_.shrink_to_fit();
				
				can_render_ = true;
			}