Example #1
0
	UINT VertexBuffer<VertexFormat>::AddVerts(const VertexFormat *verts, UINT _numVerts)
	{
		size_t ret;
		// Test if this buffer has already been finalized
		if(!vertexBufferPtr)
		{
			ret = 0;
			//// Implement a solution for the Renderer Lab
			//for(size_t i = 0; i < _numVerts; ++i)
				//vertices.push_back(verts[i]);

			D3D11_BUFFER_DESC vbd;
			vbd.Usage = D3D11_USAGE_DEFAULT;
			vbd.ByteWidth = sizeof(VertexFormat) * _numVerts;
			vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
			vbd.CPUAccessFlags = 0;
			vbd.MiscFlags = 0;
			vbd.StructureByteStride = 0;
			D3D11_SUBRESOURCE_DATA vinitData;
			vinitData.pSysMem = verts;
			HR(Renderer::theDevicePtr->CreateBuffer( &vbd, &vinitData, &vertexBufferPtr));
		}
		else
		{
			D3D11_BUFFER_DESC ibd;

			vertexBufferPtr->GetDesc(&ibd);

			D3D11_SUBRESOURCE_DATA iinitData;
			UINT oldBuffeSize = ibd.ByteWidth / sizeof(VertexFormat);
			UINT newBuffeSize = oldBuffeSize + _numVerts;

			iinitData.pSysMem = new VertexFormat[newBuffeSize];
			//memcpy((char *)(iinitData.pSysMem) + 100, 
			memcpy((char *)(iinitData.pSysMem) + ibd.ByteWidth, 
				verts, sizeof(VertexFormat) * _numVerts);

			//ZeroMemory((char *)(iinitData.pSysMem) + ibd.ByteWidth, sizeof(UINT) * _numIndices);

			ibd.ByteWidth += sizeof(VertexFormat) * _numVerts;
			//ibd.Usage = D3D11_USAGE_DEFAULT;
			//CComPtr<ID3D11Buffer> newIndexBufferPtr;
			ID3D11Buffer *newVertexBufferPtr;

			HR(Renderer::theDevicePtr->CreateBuffer(&ibd, &iinitData, &newVertexBufferPtr));

			SetD3DName(vertexBufferPtr, "The Index Buffer");

			Renderer::theContextPtr->CopySubresourceRegion(newVertexBufferPtr, 0, 0, 0, 0,
				vertexBufferPtr, 0, 0);

			ReleaseCOM(vertexBufferPtr);
			vertexBufferPtr = newVertexBufferPtr;
			//newIndexBufferPtr.CopyTo(&indexBufferPtr.p);

			delete [] iinitData.pSysMem;
			ret = oldBuffeSize;
		}
		return (UINT)ret;
	}
	UINT IndexBuffer::AddIndicesSolution(const UINT *_indices, UINT _numIndices)
	{
		static bool added = false;
		if(!added)
		{
			PrintConsole::GetReference().AddSolution(L"ED2", "Renderer", Float3(1.0f, 0.0f, 0.0f), 
				L"IndexBuffer::AddIndicesSolution");
			added = true;
		}
		UINT ret = 0;

		/// Test if we have a buffer yet
		if(indexBufferPtr)
		{
			D3D11_BUFFER_DESC ibd;

			indexBufferPtr->GetDesc(&ibd);

			D3D11_SUBRESOURCE_DATA iinitData;
			UINT oldBuffeSize = ibd.ByteWidth / sizeof(UINT);
			UINT newBuffeSize = oldBuffeSize + _numIndices;
			ret = oldBuffeSize;
			iinitData.pSysMem = new UINT[newBuffeSize];
			//memcpy((char *)(iinitData.pSysMem) + 100, 
			memcpy((char *)(iinitData.pSysMem) + ibd.ByteWidth, 
				_indices, sizeof(UINT) * _numIndices);

			ibd.ByteWidth += sizeof(UINT) * _numIndices;

			ID3D11Buffer *newIndexBufferPtr;

			HR(Renderer::theDevicePtr->CreateBuffer(&ibd, &iinitData, &newIndexBufferPtr));

			SetD3DName(indexBufferPtr, "The Index Buffer");

			Renderer::theContextPtr->CopySubresourceRegion(newIndexBufferPtr, 0, 0, 0, 0,
				indexBufferPtr, 0, 0);

			ReleaseCOM(indexBufferPtr);
			indexBufferPtr = newIndexBufferPtr;

			delete [] iinitData.pSysMem;
		}
		/// Have to create the initial buffer in this case
		else
		{
			D3D11_BUFFER_DESC ibd;
			ibd.Usage = D3D11_USAGE_DEFAULT;
			ibd.ByteWidth = sizeof(UINT) * _numIndices;
			ibd.BindFlags = D3D11_BIND_INDEX_BUFFER;
			ibd.CPUAccessFlags = 0;
			ibd.MiscFlags = 0;
			ibd.StructureByteStride = 0;

			D3D11_SUBRESOURCE_DATA iinitData;
			iinitData.pSysMem = _indices;
			HR(Renderer::theDevicePtr->CreateBuffer(&ibd, &iinitData, &indexBufferPtr));
		}
		return ret;
	}
unsigned int VertexBuffer<VertexFormat>::AddVerts(const VertexFormat* pVertices, unsigned int unNumVerts)
{
	size_t ret;
	// Test if this buffer has already been finalized
	if(!m_pVertexBuffer)
	{
		ret = 0;

		D3D11_BUFFER_DESC vbd;
		vbd.Usage = D3D11_USAGE_DEFAULT;
		vbd.ByteWidth = sizeof(VertexFormat) * unNumVerts;
		vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
		vbd.CPUAccessFlags = 0;
		vbd.MiscFlags = 0;
		vbd.StructureByteStride = 0;
		D3D11_SUBRESOURCE_DATA vinitData;
		vinitData.pSysMem = pVertices;
		Renderer::m_pDevice->CreateBuffer( &vbd, &vinitData, &m_pVertexBuffer);

		string szType = typeid(VertexFormat).name();
		szType = szType.substr(14);
		string szName = "Vertex Buffer: " + szType;
		SetD3DName(m_pVertexBuffer, szName.c_str());
	}
	else
	{
		D3D11_BUFFER_DESC ibd;

		m_pVertexBuffer->GetDesc(&ibd);

		D3D11_SUBRESOURCE_DATA iinitData;
		UINT oldBuffeSize = ibd.ByteWidth / sizeof(VertexFormat);
		UINT newBuffeSize = oldBuffeSize + unNumVerts;

		iinitData.pSysMem = new VertexFormat[newBuffeSize];
		memcpy((char *)(iinitData.pSysMem) + ibd.ByteWidth, pVertices, sizeof(VertexFormat) * unNumVerts);
		ibd.ByteWidth += sizeof(VertexFormat) * unNumVerts;

		ID3D11Buffer* newVertexBufferPtr;
		Renderer::m_pDevice->CreateBuffer(&ibd, &iinitData, &newVertexBufferPtr);
		Renderer::m_pImmediateContext->CopySubresourceRegion(newVertexBufferPtr, 0, 0, 0, 0, m_pVertexBuffer, 0, 0);
		SafeRelease(&m_pVertexBuffer);
		m_pVertexBuffer = newVertexBufferPtr;

		delete [] iinitData.pSysMem;
		ret = oldBuffeSize;
	}
	return (unsigned int)ret;
}
Example #4
0
	ID3D11ShaderResourceView *Renderer::GetDepthSRV() {
		// Do not try to create a view to an uninitialized resource
		assert(theDepthStencilBufferPtr);
		if ( !theDepthStencilSRVPtr ) {
			// Create the requested view
			D3D11_SHADER_RESOURCE_VIEW_DESC desc;
			desc.Format = DXGI_FORMAT_R24_UNORM_X8_TYPELESS;
			desc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
			//desc.Buffer = 0; //?
			desc.Texture2D.MipLevels = -1;
			desc.Texture2D.MostDetailedMip = 0;
			HRESULT hr = Renderer::theDevicePtr->CreateShaderResourceView(
				theDepthStencilBufferPtr, &desc, &theDepthStencilSRVPtr);
			HR(hr);
			SetD3DName(theDepthStencilSRVPtr, "Depth Stencil SRV");
		}
		return theDepthStencilSRVPtr;
	}