Beispiel #1
0
    void VRender() override
    {
        // Set up the input assembler
        mRenderer->VSetPrimitiveType(GPU_PRIMITIVE_TYPE_TRIANGLE);

        DX3D11Renderer* dxRenderer = static_cast<DX3D11Renderer*>(mRenderer);
        ID3D11DeviceContext* deviceContext = dxRenderer->GetDeviceContext();
        deviceContext->RSSetViewports(1, &dxRenderer->GetViewport());

        switch (mBlurType)
        {
        case Rig3DSampleScene::BLUR_TYPE_NONE:
            RenderNoBlur();
            break;
        case Rig3DSampleScene::BLUR_TYPE_GAUSSIAN:
            RenderGuassianBlur();
            break;
        case Rig3DSampleScene::BLUR_TYPE_MOTION:
            RenderMotionBlur();
            break;
        default:
            break;
        }

        mRenderer->VSwapBuffers();
    }
Beispiel #2
0
	void VInitialize() override
	{
		mRenderer = &DX3D11Renderer::SharedInstance();
		mRenderer->SetDelegate(this);

		mDevice = mRenderer->GetDevice();
		mDeviceContext = mRenderer->GetDeviceContext();

		mBezier.p0 = vec4f(-4, -4, 0, 0);
		mBezier.p1 = vec4f(-4, 4, 0, 0);
		mBezier.p2 = vec4f(4, -4, 0, 0);
		mBezier.p3 = vec4f(4, 4, 0, 0);

		VOnResize();

		InitializeGeometry();
		InitializeShaders();
		InitializeCamera();
	}
Beispiel #3
0
	void VRender() override
	{
		float color[4] = { 0.2f, 0.2f, 0.2f, 1.0f };

		// Set up the input assembler
		mDeviceContext->IASetInputLayout(mInputLayout);
		mRenderer->VSetPrimitiveType(GPU_PRIMITIVE_TYPE_TRIANGLE);

		mDeviceContext->RSSetViewports(1, &mRenderer->GetViewport());
		mDeviceContext->OMSetRenderTargets(1, mRenderer->GetRenderTargetView(), mRenderer->GetDepthStencilView());
		mDeviceContext->ClearRenderTargetView(*mRenderer->GetRenderTargetView(), color);
		mDeviceContext->ClearDepthStencilView(
		mRenderer->GetDepthStencilView(),
			D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL,
			1.0f,
			0);

		mDeviceContext->VSSetShader(mVertexShader, NULL, 0);
		mDeviceContext->PSSetShader(mPixelShader, NULL, 0);

		mDeviceContext->UpdateSubresource(
			mConstantBuffer,
			0,
			NULL,
			&mMatrixBuffer,
			0,
			0); 

		mDeviceContext->VSSetConstantBuffers(
			0,
			1,
			&mConstantBuffer);

		// Bezier
		mDeviceContext->UpdateSubresource(static_cast<DX11Mesh*>(mBezierMesh)->mVertexBuffer, 0, NULL, &mBezierVertices, 0, 0);

		mRenderer->VSetPrimitiveType(GPU_PRIMITIVE_TYPE_LINE);
		mRenderer->VBindMesh(mBezierMesh);
		mRenderer->VDrawIndexed(0, mBezierMesh->GetIndexCount());

		// Handles
		mDeviceContext->UpdateSubresource(static_cast<DX11Mesh*>(mHandlesMesh)->mVertexBuffer, 0, NULL, &mHandlesVertices, 0, 0);

		mRenderer->VSetPrimitiveType(GPU_PRIMITIVE_TYPE_LINE);
		mRenderer->VBindMesh(mHandlesMesh);
		mRenderer->VDrawIndexed(0, mHandlesMesh->GetIndexCount());

		// Circles
		mRenderer->VSetPrimitiveType(GPU_PRIMITIVE_TYPE_TRIANGLE);
		for (size_t i = 0; i < 4; i++)
		{
			mMatrixBuffer.mWorld = (mat4f::scale(mCircleScale) * mat4f::translate(mBezier.p[i])).transpose();
			mDeviceContext->UpdateSubresource(mConstantBuffer, 0, NULL, &mMatrixBuffer, 0, 0);

			mRenderer->VBindMesh(mCircleMesh);
			mRenderer->VDrawIndexed(0, mCircleMesh->GetIndexCount());
		}


		mRenderer->VSwapBuffers();
	}
Beispiel #4
0
	void InitializeGeometry()
	{
		// ---- Bezier

		// allocate a sizeof BEZIER_VERTEX_COUNT * 2 to simplify our upcoming loop.
		uint16_t bezierIndices[BEZIER_VERTEX_COUNT * 2];

		for (size_t i = 0, j = 0; i < BEZIER_VERTEX_COUNT; i++, j += 2)
		{
			mBezierVertices[i].mColor = { 1.0f, 1.0f, 0.0f };
			mBezierVertices[i].mPosition = vec3f();

			bezierIndices[j] = i;
			bezierIndices[j + 1] = i + 1;
		}

		mMeshLibrary.NewMesh(&mBezierMesh, mRenderer);
		mRenderer->VSetMeshVertexBufferData(mBezierMesh, mBezierVertices, sizeof(BezierVertex) * BEZIER_VERTEX_COUNT, sizeof(BezierVertex), GPU_MEMORY_USAGE_DEFAULT);
		mRenderer->VSetMeshIndexBufferData(mBezierMesh, bezierIndices, BEZIER_INDEX_COUNT, GPU_MEMORY_USAGE_DEFAULT);

		// -- Handles

		uint16_t handlesIndices[HANDLES_INDEX_COUNT];

		for (size_t i = 0; i < HANDLES_VERTEX_COUNT; i++)
		{
			mHandlesVertices[i].mColor = { 0.5f, 0.5f, 0.5f };
			mHandlesVertices[i].mPosition = vec3f(1);

			handlesIndices[i] = i;
		}

		mMeshLibrary.NewMesh(&mHandlesMesh, mRenderer);
		mRenderer->VSetMeshVertexBufferData(mHandlesMesh, mHandlesVertices, sizeof(BezierVertex) * HANDLES_VERTEX_COUNT, sizeof(BezierVertex), GPU_MEMORY_USAGE_DEFAULT);
		mRenderer->VSetMeshIndexBufferData(mHandlesMesh, handlesIndices, HANDLES_INDEX_COUNT, GPU_MEMORY_USAGE_DEFAULT);

		// -- Circle

		BezierVertex circleVertices[CIRCLE_VERTEX_COUNT];
		uint16_t circleIndices[CIRCLE_INDEX_COUNT];

		circleVertices[0].mColor = { 0.6f, 0.6f, 0.6f };
		circleVertices[0].mPosition = vec3f();

		float t;
		auto index = 0;
		for (size_t i = 1; i < CIRCLE_VERTEX_COUNT; i++)
		{
			t = -static_cast<float>(i) * 2 * PI / (CIRCLE_VERTEX_COUNT - 1);
			
			circleVertices[i].mColor = { 0.6f, 0.6f, 0.6f };
			circleVertices[i].mPosition = { cos(t), sin(t), 0.0f };

			circleIndices[index++] = 0;
			circleIndices[index++] = i;
			circleIndices[index++] = i + 1;
		}

		circleIndices[index - 1] = 1;

		mMeshLibrary.NewMesh(&mCircleMesh, mRenderer);
		mRenderer->VSetMeshVertexBufferData(mCircleMesh, circleVertices, sizeof(BezierVertex) * CIRCLE_VERTEX_COUNT, sizeof(BezierVertex), GPU_MEMORY_USAGE_DEFAULT);
		mRenderer->VSetMeshIndexBufferData(mCircleMesh, circleIndices, CIRCLE_INDEX_COUNT, GPU_MEMORY_USAGE_DEFAULT);
	}