Beispiel #1
0
	void GPUData::UpdateBuffers(int aIndexCount, char* aIndexData, int aVertexCount, int aVertexStride, char* aVertexData, GPUContext& aGPUContext)
	{
		SetupIndexBuffer(aIndexCount, aIndexData, aGPUContext);
		SetupVertexBuffer(aVertexCount, aVertexData, aGPUContext);

		myIndexData->myNumberOfIndices = aIndexCount;
		myVertexData->myNumberOfVertices = aVertexCount;
		myVertexData->myStride = aVertexStride;
	}
Beispiel #2
0
	void GPUData::Init(EffectID aEffect, GPUContext& aGPUContext, AssetContainer& aAssetContainer)
	{
		InitInputLayout(aEffect, aGPUContext, aAssetContainer);

		InitVertexBuffer(myVertexData->myStride, D3D11_USAGE_IMMUTABLE, 0);
		InitIndexBuffer();

		SetupVertexBuffer(myVertexData->myNumberOfVertices, myVertexData->myVertexData, aGPUContext);
		SetupIndexBuffer(myIndexData->myNumberOfIndices, myIndexData->myIndexData, aGPUContext);

		myTechniqueName = "Render";
	}
Beispiel #3
0
	void GPUData::Init(EffectID aEffect, int aIndexCount, char* aIndexData
		, int aVertexCount, int aVertexStride, char* aVertexData, GPUContext& aGPUContext, AssetContainer& aAssetContainer)
	{
		InitInputLayout(aEffect, aGPUContext, aAssetContainer);

		InitVertexBuffer(aVertexStride, D3D11_USAGE_IMMUTABLE, 0);
		InitIndexBuffer();

		SetupIndexBuffer(aIndexCount, aIndexData, aGPUContext);
		SetupVertexBuffer(aVertexCount, aVertexData, aGPUContext);

		myTechniqueName = "Render";
	}
Beispiel #4
0
Disk::Disk(Graphics::Renderer *r, RefCountedPtr<Material> material, Graphics::RenderState *state, const int edges, const float rad)
	: m_material(material)
{
	PROFILE_SCOPED()
	m_renderState = state;

	VertexArray vertices (ATTRIB_POSITION);

	vertices.Add(vector3f(0.f, 0.f, 0.f));
	const float edgeStep = 360.0f / float(edges);
	for (int i = edges; i >= 0; i--) {
		vertices.Add(vector3f(
			0.f+sinf(DEG2RAD(i*edgeStep))*rad,
			0.f+cosf(DEG2RAD(i*edgeStep))*rad,
			0.f));
	}

	SetupVertexBuffer(vertices, r);
}
Beispiel #5
0
Disk::Disk(Graphics::Renderer *r, Graphics::RenderState *state, const Color &c, float rad)
{
	PROFILE_SCOPED()
	m_renderState = state;

	VertexArray vertices (ATTRIB_POSITION);
	m_material.Reset(r->CreateMaterial(MaterialDescriptor()));
	m_material->diffuse = c;

	vertices.Add(vector3f(0.f, 0.f, 0.f));
	for (int i = 72; i >= 0; i--) {
		vertices.Add(vector3f(
			0.f+sinf(DEG2RAD(i*5.f))*rad,
			0.f+cosf(DEG2RAD(i*5.f))*rad,
			0.f));
	}

	SetupVertexBuffer(vertices, r);
}
Beispiel #6
0
	void Terrain::CreateVertices()
	{
		CU::GrowingArray<VertexPosNormUV> vertices(myHeightMap->myWidth * myHeightMap->myDepth);
		CU::GrowingArray<int> indices(myHeightMap->myWidth * myHeightMap->myDepth * 6);

		for (int z = 0; z < myHeightMap->myDepth; ++z)
		{
			for (int x = 0; x < myHeightMap->myWidth; ++x)
			{
				VertexPosNormUV vertex;
				vertex.myPos.x = float(x) * mySize.x / float(myHeightMap->myWidth);
				vertex.myPos.y = myHeightMap->myData[z * myHeightMap->myWidth + x] * myHeight / 255.f; 
				vertex.myPos.z = float(z) * mySize.y / float(myHeightMap->myDepth);
				vertex.myUV.x = float(x) / float(myHeightMap->myWidth);
				vertex.myUV.y = float(z) / float(myHeightMap->myDepth);
				vertices.Add(vertex);
			}
		}

		CalcNormals(vertices);

		for (int z = 0; z < myHeightMap->myDepth - 1; ++z)
		{
			for (int x = 0; x < myHeightMap->myWidth - 1; ++x)
			{
				indices.Add(z * myHeightMap->myWidth + x);
				indices.Add(z * myHeightMap->myWidth + x + 1);
				indices.Add((z + 1) * myHeightMap->myWidth + x);

				indices.Add((z + 1) * myHeightMap->myWidth + x);
				indices.Add(z * myHeightMap->myWidth + x + 1);
				indices.Add((z + 1) * myHeightMap->myWidth + x + 1);
			}
		}

		SetupVertexBuffer(vertices.Size(), sizeof(VertexPosNormUV), reinterpret_cast<char*>(&vertices[0])
			, "Terrain::VertexBuffer");
		SetupIndexBuffer(indices.Size(), reinterpret_cast<char*>(&indices[0]), "Terrain::IndexBuffer");

		mySurfaces[0]->SetVertexCount(vertices.Size());
		mySurfaces[0]->SetIndexCount(indices.Size());
	}
Beispiel #7
0
void Prism::Sprite::CreateVertices()
{
	CU::GrowingArray<VertexPosUV> vertices(4);
	CU::GrowingArray<int> indices(6);

	float left = 0 - myHotspot.x;
	float right = left + mySize.x;
	float top = 0 + myHotspot.y;
	float bottom = top - mySize.y;

	VertexPosUV vert;
	vert.myPos = { left, top, 0.0f };
	vert.myUV = { 0.0f, 0.0f };
	vertices.Add(vert);

	vert.myPos = { right, bottom, 0.0f };
	vert.myUV = { 1.0f, 1.0f };
	vertices.Add(vert);

	vert.myPos = { left, bottom, 0.0f };
	vert.myUV = { 0.0f, 1.0f };
	vertices.Add(vert);

	vert.myPos = { right, top, 0.0f };
	vert.myUV = { 1.0f, 0.0f };
	vertices.Add(vert);


	indices.Add(0);
	indices.Add(1);
	indices.Add(2);

	indices.Add(0);
	indices.Add(3);
	indices.Add(1);

	SetupVertexBuffer(vertices.Size(), sizeof(VertexPosUV), reinterpret_cast<char*>(&vertices[0]), "Sprite::VertexBuffer");
	SetupIndexBuffer(indices.Size(), reinterpret_cast<char*>(&indices[0]), "Sprite::IndexBuffer");

	mySurfaces[0]->SetVertexCount(vertices.Size());
	mySurfaces[0]->SetIndexCount(indices.Size());
}
Beispiel #8
0
	void GPUData::Init(EffectID aEffect, int aIndexCount, char* aIndexData, int aVertexCount, int aVertexStride, char* aVertexData)
	{
		const int size = myVertexFormat.Size();
		D3D11_INPUT_ELEMENT_DESC* vertexDesc = new D3D11_INPUT_ELEMENT_DESC[size];
		for (int i = 0; i < myVertexFormat.Size(); ++i)
		{
			vertexDesc[i] = *myVertexFormat[i];
		}

		InitInputLayout(vertexDesc, size, aEffect);
		delete[] vertexDesc;

		InitVertexBuffer(aVertexStride, D3D11_USAGE_IMMUTABLE, 0);
		InitIndexBuffer();

		SetupVertexBuffer(aVertexCount, aVertexData);
		SetupIndexBuffer(aIndexCount, aIndexData);

		myTechniqueName = "Render";
	}
Beispiel #9
0
	void GPUData::Init(EffectID aEffect)
	{
		const int size = myVertexFormat.Size();
		D3D11_INPUT_ELEMENT_DESC* vertexDesc = new D3D11_INPUT_ELEMENT_DESC[size];
		for (int i = 0; i < myVertexFormat.Size(); ++i)
		{
			vertexDesc[i] = *myVertexFormat[i];
		}

		InitInputLayout(vertexDesc, size, aEffect);
		delete[] vertexDesc;

		InitVertexBuffer(myVertexData->myStride, D3D11_USAGE_IMMUTABLE, 0);
		InitIndexBuffer();

		SetupVertexBuffer(myVertexData->myNumberOfVertices, myVertexData->myVertexData);
		SetupIndexBuffer(myIndexData->myNumberOfIndices, myIndexData->myIndexData);

		myTechniqueName = "Render";
	}
Beispiel #10
0
void PreviewPane::initializeGL()
{
    initializeOpenGLFunctions();

    printVersionInformation();

    glClearColor(0.15f, 0.15f, 0.15f, 1.0f);

    SetupShaders();
    SetupVertexBuffer();
    SetupObject();
    //SetupTexture();

    object.release();
    vertex.release();
    program->release();

    _initialized = true;

    glGenTextures(1, &textureRed);
    glGenTextures(1, &textureGreen);
    glGenTextures(1, &textureBlue);
}
Beispiel #11
0
void Prism::Text::ConstructBuffers()
{
	//debug:
	//CU::Vector2<float> myCharSize(16.f, 16.f);
	//float myCharSpacing(0);
	//debug end

	int numOfLetters = myText.length();
	float drawX = 0;
	float drawY = 0;
	float z = 1.f;

	myVertices.RemoveAll();
	myIndices.RemoveAll();
	VertexPosUV vert;
	for (int i = 0, row = 0; i < numOfLetters; ++i)
	{
		if (myText[i] == '\n')
		{
			drawX = 0;
			drawY -= 48.f;
			++row;
			continue;
		}
		Font::CharacterData charData = myFont.GetCharData(myText[i]);

		float left = drawX + charData.myOffset.x;
		float right = left + charData.mySize.x;
		float top = drawY + charData.myOffset.y;
		float bottom = top - charData.mySize.y;


		vert.myPos = CU::Vector3<float>(left, top, z);
		vert.myUV = charData.myTopLeftUV;
		myVertices.Add(vert);

		vert.myPos = CU::Vector3<float>(right, bottom, z);
		vert.myUV = charData.myBottomRightUV;
		myVertices.Add(vert);

		vert.myPos = CU::Vector3<float>(left, bottom, z);
		vert.myUV = { charData.myTopLeftUV.x, charData.myBottomRightUV.y };
		myVertices.Add(vert);

		vert.myPos = CU::Vector3<float>(right, top, z);
		vert.myUV = { charData.myBottomRightUV.x, charData.myTopLeftUV.y };
		myVertices.Add(vert);


		int startIndex = (i - row) * 4;
		myIndices.Add(startIndex + 0);
		myIndices.Add(startIndex + 1);
		myIndices.Add(startIndex + 2);

		myIndices.Add(startIndex + 0);
		myIndices.Add(startIndex + 3);
		myIndices.Add(startIndex + 1);


		drawX += charData.myAdvanceX;
		z -= 0.001f;
	}

	SetupVertexBuffer(myVertices.Size(), sizeof(VertexPosUV), reinterpret_cast<char*>(&myVertices[0]), "Text::VertexBuffer");
	SetupIndexBuffer(myIndices.Size(), reinterpret_cast<char*>(&myIndices[0]), "Text::IndexBuffer");

	mySurfaces[0]->SetVertexCount(myVertices.Size());
	mySurfaces[0]->SetIndexCount(myIndices.Size());

	//myTextWidth = drawX - myTextWidth;
}