Example #1
0
void
GLIndexArray::compile() {

	m_IsCompiled = true;

	if (0 != m_InternalIndexArray && m_InternalIndexArray->size() != 0) {

		std::shared_ptr<std::vector<unsigned int>> pArray;
		if (m_UseAdjacency) {
			buildAdjacencyList();
			pArray = m_AdjIndexArray;
		}
		else
			pArray = m_InternalIndexArray;

		IBuffer *b = NULL;

		if (m_GLBuffer == 0) {
			b = RESOURCEMANAGER->createBuffer(m_Name);
			b->setStructure(std::vector < Enums::DataType > {Enums::UINT});
			m_GLBuffer = b->getPropi(IBuffer::ID);
		}
		else {
			b = RESOURCEMANAGER->getBuffer(m_Name);
		}
		b->setData(pArray->size() * sizeof(unsigned int), &(*pArray)[0]);
		//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_GLBuffer);
		//glBufferData(GL_ELEMENT_ARRAY_BUFFER, pArray->size() * sizeof(unsigned int), &(*pArray)[0], GL_STATIC_DRAW);
		//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
		//b->setPropui(IBuffer::SIZE, pArray->size() * sizeof(unsigned int));
	}
}
Example #2
0
bool 
GLVertexArray::compile (void) { 

	if (m_IsCompiled)
		return false;

	m_IsCompiled = true;

	for (int i = 0; i < VertexData::MaxAttribs; i++){

		if (0 != m_InternalArrays[i] && m_InternalArrays[i]->size() != 0){
			std::shared_ptr<std::vector<VertexData::Attr>> &pArray = m_InternalArrays[i];

			IBuffer *b = NULL;

			std::string s = m_Name + ":" + VertexData::Syntax[i];
			if (m_GLBuffers[i] == 0) {
				b = RESOURCEMANAGER->createBuffer(s);
				b->setStructure(std::vector < Enums::DataType > {Enums::FLOAT, Enums::FLOAT, Enums::FLOAT, Enums::FLOAT});
				m_GLBuffers[i] = b->getPropi(IBuffer::ID);
			}
			else {
				b = RESOURCEMANAGER->getBuffer(s);
			}
			b->setData(pArray->size() * 4 * sizeof(float), (float*)&(*pArray)[0]);
		}
	}
	return true;
}
Example #3
0
void DlgDbgBuffers::setBufferList(){

	std::vector<std::string> names;
	IBuffer *b;
	wxPGProperty *pid, *appended;

	std::string indexName, shortName, fullName;

	pgBuffers->ClearPage(0);
	bufferSettingsList.clear();
	currentBuffer = NO_BUFFER;

	RESOURCEMANAGER->getBufferNames(&names);

	for (auto name : names) {

		fullName = name;
		shortName = File::GetName(name);
		if (m_UseShortNames)
			indexName = shortName;
		else
			indexName = fullName;

		b = RESOURCEMANAGER->getBuffer(name);
		b->refreshBufferParameters();
		std::vector<Enums::DataType> structure = b->getStructure();

		bufferSettingsList[indexName] = BufferSettings();
		if (structure.size() == 0)
			bufferSettingsList[indexName].types.push_back(Enums::FLOAT);
		else
			bufferSettingsList[indexName].types = b->getStructure();
		bufferSettingsList[indexName].lines = 16;
		bufferSettingsList[indexName].currentPage = 0;
		bufferSettingsList[indexName].ID = b->getPropi(IBuffer::ID);
		bufferSettingsList[indexName].size = b->getPropui(IBuffer::SIZE);
		bufferSettingsList[indexName].bufferPtr = b;
		bufferSettingsList[indexName].fullName = fullName;
		bufferSettingsList[indexName].shortName = shortName;

		int s = 0;
		for (auto t : bufferSettingsList[indexName].types) {
			s += Enums::getSize(t);
		}
		bufferSettingsList[indexName].lineSize = s;

		int totalLines = bufferSettingsList[indexName].size / s;
		if (bufferSettingsList[indexName].size % s != 0)
			totalLines++;

		int totalPages = totalLines / (bufferSettingsList[indexName].lines);
		if (totalLines % bufferSettingsList[indexName].lines != 0)
			totalPages++;

		pid = pgBuffers->Append(new wxStringProperty(wxT("" + indexName), wxPG_LABEL,"<composed>"));
		appended = pgBuffers->AppendIn(pid, new wxIntProperty(wxT("ID"), wxPG_LABEL, bufferSettingsList[indexName].ID));
		appended->Enable(false);
		appended = pgBuffers->AppendIn(pid, new wxIntProperty(wxT("Size (bytes)"), wxPG_LABEL, bufferSettingsList[indexName].size));
		appended->Enable(false);
		appended = pgBuffers->AppendIn(pid, new wxIntProperty(wxT("Total pages"), wxPG_LABEL, totalPages));
		appended->Enable(false);
		appended = pgBuffers->AppendIn(pid, new wxIntProperty(wxT("Total lines"), wxPG_LABEL, totalLines));
		appended->Enable(false);
		appended = pgBuffers->AppendIn(pid, new wxIntProperty(wxT("Components"), wxPG_LABEL, bufferSettingsList[indexName].types.size()));
		appended->Enable(false);
	}

	if (bufferSettingsList.size() > 0)
		currentBuffer = m_UseShortNames ? File::GetName(names[0]):indexName;

	pgBuffers->CollapseAll();
}
Example #4
0
void 
PassOptixPrime::initOptixPrime() {
	
	// Create Context
	CHK_PRIME(rtpContextCreate(RTP_CONTEXT_TYPE_CUDA, &m_Context));

	// Create Vertex Buffer
	std::shared_ptr<IRenderable> &renderable = RENDERMANAGER->getScene(m_SceneVector[0])->getSceneObject(0)->getRenderable();
	int vbo = renderable->getVertexData()->getBufferID(0);
	int numVert = renderable->getVertexData()->getNumberOfVertices();
	//std::shared_ptr<std::vector<VertexAttrib>> &vertex = renderable->getVertexData()->getDataOf(0);

	size_t size;
	void * devPtr;
	int k = cudaGraphicsGLRegisterBuffer(&cgl, vbo, cudaGraphicsRegisterFlagsReadOnly);
	k = cudaGraphicsMapResources(1, &cgl, 0);
	k = cudaGraphicsResourceGetMappedPointer((void **)&devPtr, &size, cgl);

	CHK_PRIME(rtpBufferDescCreate(
		m_Context,
		RTP_BUFFER_FORMAT_VERTEX_FLOAT4,
		RTP_BUFFER_TYPE_CUDA_LINEAR,
		devPtr,
		&m_VerticesDesc)
		);
	CHK_PRIME(rtpBufferDescSetRange(m_VerticesDesc, 0, numVert));

	// Create Index Buffer
	std::shared_ptr<IndexData> &ind = renderable->getIndexData();
	std::vector<int> v; 
	ind->getIndexDataAsInt(&v);
	GLuint index;
	IBuffer *b;
	b = RESOURCEMANAGER->createBuffer(m_Name);
	index = b->getPropi(IBuffer::ID);
	
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, v.size() * sizeof(int), &(v)[0], GL_STATIC_DRAW);
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
	int numInd = (int)v.size();

	void * devPtrInd;
	k = cudaGraphicsGLRegisterBuffer(&cglInd, index, cudaGraphicsRegisterFlagsReadOnly);
	k = cudaGraphicsMapResources(1, &cglInd, 0);
	k = cudaGraphicsResourceGetMappedPointer((void **)&devPtrInd, &size, cglInd);
	CHK_PRIME(rtpBufferDescCreate(
		m_Context,
		RTP_BUFFER_FORMAT_INDICES_INT3,
		RTP_BUFFER_TYPE_CUDA_LINEAR, 
		devPtrInd,
		&m_IndicesDesc)
		);
	CHK_PRIME(rtpBufferDescSetRange(m_IndicesDesc, 0, numInd/3));

	// Create Model
	CHK_PRIME(rtpModelCreate(m_Context, &m_Model));
	CHK_PRIME(rtpModelSetTriangles(m_Model, m_IndicesDesc, m_VerticesDesc));
	int useCallerTris = 0;
	CHK_PRIME(rtpModelSetBuilderParameter(m_Model, RTP_BUILDER_PARAM_USE_CALLER_TRIANGLES, sizeof(int), &useCallerTris));
	CHK_PRIME(rtpModelUpdate(m_Model, 0));
	CHK_PRIME(rtpModelFinish(m_Model));

	cudaGraphicsUnmapResources(1, &cgl, 0);

	// Create Rays Buffer
	int rayBufferID = m_Rays->getPropi(IBuffer::ID);
	int rayBufferRayCount = m_Rays->getPropui(IBuffer::SIZE) / (8 * sizeof(float));

	void * devPtrBuff;
	k = cudaGraphicsGLRegisterBuffer(&cglBuff, rayBufferID, cudaGraphicsRegisterFlagsReadOnly);
	k = cudaGraphicsMapResources(1, &cglBuff, 0);
	k = cudaGraphicsResourceGetMappedPointer((void **)&devPtrBuff, &size, cglBuff);

	CHK_PRIME(rtpBufferDescCreate(
		m_Context,
		RTP_BUFFER_FORMAT_RAY_ORIGIN_TMIN_DIRECTION_TMAX,
		RTP_BUFFER_TYPE_CUDA_LINEAR,
		devPtrBuff,
		&m_RaysDesc)
		);
	CHK_PRIME(rtpBufferDescSetRange(m_RaysDesc, 0, rayBufferRayCount));

	
	// Create Hits Buffer
	int hitBufferID = m_Hits->getPropi(IBuffer::ID);
	void * devPtrBuffH;
	k = cudaGraphicsGLRegisterBuffer(&cglBuffH, hitBufferID, cudaGraphicsRegisterFlagsWriteDiscard);
	k = cudaGraphicsMapResources(1, &cglBuffH, 0);
	k = cudaGraphicsResourceGetMappedPointer((void **)&devPtrBuffH, &size, cglBuffH);

	CHK_PRIME(rtpBufferDescCreate(
		m_Context,
		RTP_BUFFER_FORMAT_HIT_T_TRIID_U_V,
		RTP_BUFFER_TYPE_CUDA_LINEAR,
		devPtrBuffH,
		&m_HitsDesc)
		);
	CHK_PRIME(rtpBufferDescSetRange(m_HitsDesc, 0, rayBufferRayCount));

	// Prepare query
	CHK_PRIME(rtpQueryCreate(m_Model, m_QueryType, &m_Query));
	CHK_PRIME(rtpQuerySetRays(m_Query, m_RaysDesc));
	CHK_PRIME(rtpQuerySetHits(m_Query, m_HitsDesc));

	m_Init = true;
}