Example #1
0
void RaceScene::Exit()
{
	mSceneManager->destroy();
	ITextureManager* textureManager = ITextureManager::getInstance();
	textureManager->destroy(mTireTrailDepthSurface->getTexture());
	textureManager->destroy(mTireTrailTexture);
}
void		IRenderer::mFunction_GraphicObj_RenderTriangle2DInList(std::vector<IGraphicObject*>* pList)
{
	//prepare to draw , various settings.....
	ID3D11Buffer* tmp_pVB = NULL;

	ITextureManager* pTexMgr = GetScene()->GetTextureMgr();

	mFunction_SetRasterState(NOISE_FILLMODE_SOLID, NOISE_CULLMODE_NONE);

	for (UINT i = 0;i < pList->size();i++)
	{
		//----------------------1,draw common triangle----------------------
		tmp_pVB = pList->at(i)->m_pVB_GPU[NOISE_GRAPHIC_OBJECT_TYPE_TRIANGLE_2D];
		g_pImmediateContext->IASetInputLayout(g_pVertexLayout_Simple);
		g_pImmediateContext->IASetVertexBuffers(0, 1, &tmp_pVB, &c_VBstride_Simple, &c_VBoffset);
		g_pImmediateContext->IASetIndexBuffer(NULL, DXGI_FORMAT_R32_UINT, 0);
		g_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

		UINT j = 0, vCount = 0;
		//traverse all region list , to decide use which tech to draw (textured or not)

		m_pFX_Tech_Solid2D->GetPassByIndex(0)->Apply(0, g_pImmediateContext);
		vCount = pList->at(i)->GetTriangle2DCount() * 3;
		if (vCount>0)g_pImmediateContext->Draw(pList->at(i)->GetTriangle2DCount() * 3, 0);


		//---------------------2,draw rectangles---------------------
		tmp_pVB = pList->at(i)->m_pVB_GPU[NOISE_GRAPHIC_OBJECT_TYPE_RECT_2D];
		g_pImmediateContext->IASetInputLayout(g_pVertexLayout_Simple);
		g_pImmediateContext->IASetVertexBuffers(0, 1, &tmp_pVB, &c_VBstride_Simple, &c_VBoffset);
		g_pImmediateContext->IASetIndexBuffer(NULL, DXGI_FORMAT_R32_UINT, 0);
		g_pImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

		for (auto tmpRegion : *(pList->at(i)->m_pRectSubsetInfoList))
		{
			//if current Rectangle disable Texture ,then draw in a solid way
			//thus validate the UID first
			if (pTexMgr->FindUid(tmpRegion.texName)==FALSE)
			{
				//draw with solid texture
				m_pFX_Tech_Solid2D->GetPassByIndex(0)->Apply(0, g_pImmediateContext);
			}
			else
			{
				//------Draw 2D Common Texture-----
				mFunction_GraphicObj_Update_RenderTextured2D(tmpRegion.texName);
				m_pFX_Tech_Textured2D->GetPassByIndex(0)->Apply(0, g_pImmediateContext);
			}

			//draw 
			vCount = tmpRegion.vertexCount;
			if (vCount>0)g_pImmediateContext->Draw(tmpRegion.vertexCount, tmpRegion.startID);
		}

	}

	//清空渲染列表
	pList->clear();
}
Example #3
0
void RaceScene::Enter()
{
	mFollowCamera = mSceneManager->addFpsCameraNode(2, nullptr, XMFLOAT3(0, 100.0f, -100.0f), XMFLOAT3(0, 1.0f, 0.0f), XMFLOAT3(0, 1.0f, 0), true);
	mFollowCamera->setNearZ(1.0f);
	mFollowCamera->setFarZ(1000.0f);
	mFollowCamera->setShadowRange(300.0f);

	mSideCamera = mSceneManager->addFpsCameraNode(3, nullptr);
	mSideCamera->setNearZ(1.0f);
	mSideCamera->setFarZ(1000.0f);
	mSideCamera->setShadowRange(300.0f);

	mPlayerVehicle = new Vehicle(mSceneManager, mTerrainNode, "carA");

	mSceneManager->setActiveCamera(2);
	
	XMFLOAT3 camPos = mFreeCamera->getPosition();
	mPlayerVehicle->setPosition(camPos);

	mFreeCamera->update(0);
	XMFLOAT3 look = mFreeCamera->getLookVector();
	XMVECTOR look_v = XMVector3Normalize(XMVectorSet(look.x, 0, look.z, 0));
	XMVECTOR neg_x_v = XMVectorSet(-1.0f, 0, 0, 0);
	XMVECTOR axis = XMVector3Normalize(XMVector3Cross(neg_x_v, look_v));
	
	XMVECTOR angle = XMVector3AngleBetweenNormals(neg_x_v, look_v);
	XMVECTOR quat_v = XMQuaternionRotationAxis(axis, XMVectorGetX(angle));
	XMFLOAT4 quat;
	XMStoreFloat4(&quat, quat_v);
	mPlayerVehicle->setRotation(quat);

	mVideoDriver->setDeferredAntiAliasing(true);

	IMeshNode* skyNode = mSceneManager->getSkyNode();
	if (skyNode)
		skyNode->setMaterialName("skydome_material");

	u32 textureWidth = mVideoDriver->getBackBufferWidth() / 2;
	u32 textureHeight = mVideoDriver->getBackBufferHeight() / 2;

	ITextureManager* textureManager = ITextureManager::getInstance();
	mTireTrailTexture = textureManager->createTexture2D("tire_trail", 
		textureWidth,
		textureHeight, 
		ETBT_SHADER_RESOURCE | ETBT_RENDER_TARGET,
		nullptr, 1, EGF_R16_FLOAT);

	mTireTrailDepthSurface = textureManager->createDepthStencilSurface("tire_trail_depth",
		textureWidth,
		textureHeight,
		16, 0, false, 1, 0, false, false);
}
Example #4
0
	void Material::initialize()
	{
		ITextureManager *pTextureManager = getRenderEngine()->getRenderSystem()->getTextureManager();

		size_t size = m_vLayers.size();
		for(size_t i = 0;i < size;i++)
		{
			MaterialLayer& layer = m_vLayers[i];
			if(!layer.m_szTexture.empty())
			{
				layer.m_pTexture = pTextureManager->createTextureFromFile(layer.m_szTexture,FO_LINEAR,FO_LINEAR,FO_LINEAR);
			}
		}
	}
//invoked by RenderTriangle(when needed)
void		IRenderer::mFunction_GraphicObj_Update_RenderTextured2D(N_UID texName)
{
	//Get Shader Resource View
	ID3D11ShaderResourceView* tmp_pSRV = NULL;


	ITextureManager* pTexMgr = GetScene()->GetTextureMgr();
	//......
	BOOL IsUidValid = pTexMgr->ValidateUID(texName, NOISE_TEXTURE_TYPE_COMMON);

	if (IsUidValid)
	{
		tmp_pSRV = pTexMgr->GetObjectPtr(texName)->m_pSRV;
		m_pFX2D_Texture_Diffuse->SetResource(tmp_pSRV);
	}
}
Example #6
0
void testCreateTexture1D()
{
	ITextureManager* textureManager = ITextureManager::getInstance();
	u32 width = 256;
	std::vector<f32> data;
	data.resize(width);
	for (u32 i = 0; i < width; i++)
	{
		data[i] = i * 1.0f / width;
	}

	ITexture* texture = textureManager->createTexture1D("test_texture_1d", width, 
		ETBT_SHADER_RESOURCE, &data[0], 1, EGF_R32_FLOAT);
	
	IMaterial* material = IMaterialManager::getInstance()->get("ground_material");
	material->setTexture(0, texture);
}
Example #7
0
	void CBlurCompositor::gaussBlur(ISceneManager* smgr, bool lastCompositor)
	{
		IVideoDriver* driver = smgr->getVideoDriver();
		ITextureManager* tmgr = ITextureManager::getInstance();

		IRenderTarget* input = driver->getRenderTarget();
		IRenderTarget* output = tmgr->getTempRenderTarget(input->getWidth(), input->getHeight(), input->getFormat());

		IMeshNode* quad = smgr->getQuadNode();
		quad->setMaterial(&mMaterial);

		IPipelineManager* pipelineManager = IPipelineManager::getInstance();
		IPipeline* vblurPipeline = pipelineManager->get("gf/gauss_vertical_blur");
		IPipeline* hblurPipeline = pipelineManager->get("gf/gauss_horizontal_blur");

		// render pass - 1
		for (u32 i = 0; i < mPassCount - 1; i++)
		{
			// vertical blur
			mMaterial.setPipeline(vblurPipeline);
			renderQuad(driver, smgr, quad, input, output);

			// horizontal blur
			mMaterial.setPipeline(hblurPipeline);
			renderQuad(driver, smgr, quad, output, input);
		}

		// render last pass
		mMaterial.setPipeline(vblurPipeline);
		renderQuad(driver, smgr, quad, input, output);

		mMaterial.setPipeline(hblurPipeline);
		if (lastCompositor)
		{
			renderQuad(driver, smgr, quad, output, nullptr);
			tmgr->releaseTempRenderTarget(output);
		}
		else
		{
			renderQuad(driver, smgr, quad, output, input);
		}

		tmgr->releaseTempRenderTarget(input);
	}
Example #8
0
	bool CD3D11Driver::setupGBuffer()
	{
		if (mGBuffers[0])
			return false;

		ITextureManager* textureManager = ITextureManager::getInstance();

		std::string textureNames[] = { "gbuffer0", "gbuffer1", "gbuffer2", "gbuffer3" };
		

		E_GI_FORMAT formats[] = { EGF_R32G32B32A32_FLOAT, EGF_R8G8B8A8_UNORM, EGF_R8G8B8A8_UNORM, EGF_R8G8B8A8_UNORM };

		for (u32 i = 0; i < EGT_GBUFFER_COUNT; i++)
		{
			IRenderTarget* pTarget = textureManager->createRenderTarget(textureNames[i], 0, 0, formats[i]);
			assert("set up gbuffer failed!");
			mGBuffers[i] = pTarget;
		}
		return true;
	}
Example #9
0
	void SubModelInstance::setTexture(int layer,const char* szName)
	{
		Assert(layer >= 0 && layer < m_mtlOrigin.numLayers());
		MaterialLayer *pLayer = m_mtl.getLayer(layer);

		const std::string& textureName = pLayer->m_szTexture;
		if(StringHelper::casecmp(textureName,szName) == 0)return;

		safeRelease(pLayer->m_pTexture);
		pLayer->m_szTexture = "";

		if(!szName)return;

		IRenderEngine *pRenderEngine = getRenderEngine();
		IRenderSystem *pRenderSystem = pRenderEngine->getRenderSystem();
		ITextureManager *pTextureManager = pRenderSystem->getTextureManager();
		pLayer->m_pTexture = pTextureManager->createTextureFromFile(szName,FO_LINEAR,FO_LINEAR,FO_LINEAR);
		if(pLayer->m_pTexture)
		{
			pLayer->m_szTexture = szName;
		}
	}
Example #10
0
void LoadingScene::setupScene()
{
	math::SAxisAlignedBox aabb;
	aabb.Center = XMFLOAT3(0, 0.0f, 0);
	aabb.Extents = XMFLOAT3(3000.0f, 1000.0f, 3000.0f);

	ISceneManager* smgr = mDevice->createSceneManager(aabb);
	mSceneManager = smgr;
	
	IMeshManager* meshManager = IMeshManager::getInstance();
	ISimpleMesh* cubeMesh = meshManager->createCubeMesh("debug_loading", 3.0f, 3.0f, 3.0f);
	IMeshNode* meshNode = smgr->addMeshNode(cubeMesh, nullptr, nullptr, false);
	meshNode->setMaterialName("picking_cube_material");

	ICameraNode* camera = smgr->addFpsCameraNode(1, nullptr, XMFLOAT3(0, 0.0f, -15.0f),
		XMFLOAT3(0, 0, 0.0f), XMFLOAT3(0, 1.0f, 0), true);

	mVideoDriver->setDeferredShading(false);

	ITextureManager* textureManager = ITextureManager::getInstance();
	mLoadingImage = textureManager->get("loading_image.jpg");
}
Example #11
0
	void CBlurCompositor::squareBlur(ISceneManager* smgr, bool lastCompositor)
	{
		IVideoDriver* driver = smgr->getVideoDriver();
		ITextureManager* tmgr = ITextureManager::getInstance();

		IRenderTarget* input = driver->getRenderTarget();
		IRenderTarget* output = nullptr;

		IMeshNode* quad = smgr->getQuadNode();
		quad->setMaterial(&mMaterial);

		if (mPassCount == 1)
		{
			if (!lastCompositor)
				output = tmgr->getTempRenderTarget(input->getWidth(), input->getHeight(), input->getFormat());

			renderQuad(driver, smgr, quad, input, output);
			tmgr->releaseTempRenderTarget(input);
		}
		else
		{
			output = tmgr->getTempRenderTarget(input->getWidth(), input->getHeight(), input->getFormat());

			// render pass - 1 
			for (u32 i = 0; i < mPassCount - 1; i++)
			{
				renderQuad(driver, smgr, quad, input, output);
				std::swap(input, output);
			}

			// render the last pass
			if (!lastCompositor)
			{
				renderQuad(driver, smgr, quad, input, output);
			}
			else
			{
				renderQuad(driver, smgr, quad, input, nullptr);
				tmgr->releaseTempRenderTarget(output);
			}

			tmgr->releaseTempRenderTarget(input);
		}
	}
Example #12
0
	void CPointLightNode::generateShadowMap(ICameraNode* viewCamera)
	{
		ITextureManager* tmgr = ITextureManager::getInstance();
		if (mCastShadow)
		{
			if (!mShadowMapTexture)
			{
				std::string name = "_point_shadow_map_";
				name += getId();

				mShadowMapTexture = tmgr->createTextureCube(name, mShadowMapWidth,
					ETBT_SHADER_RESOURCE | ETBT_RENDER_TARGET, nullptr, 1, EGF_R32_FLOAT);
			}

			ICameraNode* camera = mSceneManager->getActiveCameraNode();
			camera->setPerspectiveProjection(true);

			XMFLOAT3 pos = getAbsolutePosition();
			camera->setPosition(pos);
			camera->setFovAngle(XM_PIDIV2);
			camera->setNearZ(0.1f);
			camera->setFarZ(mLightData.Range);
			camera->setAspectRatio(1.0f);

			//const 
			const static XMFLOAT3 looks[] = {
				XMFLOAT3(1.0f, 0, 0),					//+x
				XMFLOAT3(-1.0f, 0, 0),					//-x
				XMFLOAT3(0, 1.0f, 0),					//+y
				XMFLOAT3(0, -1.0f, 0),					//-y
				XMFLOAT3(0, 0, 1.0f),					//+z
				XMFLOAT3(0, 0, -1.0f)					//-z
			};

			const static XMFLOAT3 ups[] = {
				XMFLOAT3(0.0f, 1.0f, 0.0f),  // +X
				XMFLOAT3(0.0f, 1.0f, 0.0f),  // -X
				XMFLOAT3(0.0f, 0.0f, -1.0f), // +Y
				XMFLOAT3(0.0f, 0.0f, +1.0f), // -Y
				XMFLOAT3(0.0f, 1.0f, 0.0f),	 // +Z
				XMFLOAT3(0.0f, 1.0f, 0.0f)	 // -Z
			};

			IVideoDriver* driver = mSceneManager->getVideoDriver();
			IDepthStencilSurface* pDepthStencilSurface = tmgr->getTempDepthStencilSurface(
				mShadowMapWidth, mShadowMapWidth, 32, 0);
			
			driver->setPipelineUsage(EPU_POINT_SHADOW_MAP);

			for (u32 i = 0; i < 6; i++)
			{
				camera->look(looks[i], ups[i]);
				camera->updateAbsoluteTransformation();
				IRenderTarget* pRenderTarget = mShadowMapTexture->getRenderTarget(i);
				driver->setRenderTargetAndDepthStencil(pRenderTarget, pDepthStencilSurface);
				
				const f32 clearColor[] = { 1000.0f, 1000.0f, 1000.0f, 1000.0f };
				pRenderTarget->clear(clearColor);
				driver->clearDepthStencil(1.0f, 0);
				mSceneManager->drawShadowMap(this);
			}

			tmgr->releaseTempDepthStencilSurface(pDepthStencilSurface);
		}
	}
Example #13
0
int main()
{
	SDeviceContextSettings settings;
	settings.MultiSamplingCount = 4;
	settings.MultiSamplingQuality = 32;

	IApplication* device = gf::createDevice(EDT_DIRECT3D11, SCREEN_WIDTH, SCREEN_HEIGHT, EWS_NONE, true, settings);
	IVideoDriver* driver = device->getVideoDriver();
	ISceneManager* smgr = device->createSceneManager();
	IMeshManager* meshManager = driver->getMeshManager();
	IMaterialManager* materialManager = driver->getMaterialManager();
	ITextureManager* textureManager = driver->getTextureManager();

	IResourceGroupManager* resourceGroupManager = driver->getResourceGroupManager();
	resourceGroupManager->init("Resources.cfg");
//	resourceGroupManager->loadResourceGroup("General");

	ILightNode* light = smgr->addDirectionalLight(1, nullptr, XMFLOAT3(3.0f, -2.0f, 1.5f));
	light->setSpecular(XMFLOAT4(1.0f, 1.0f, 1.0f, 32.0f));
	light->setDiffuse(XMFLOAT4(0.4f, 0.4f, 0.4f, 1.0f));

	ILightNode* light2 = smgr->addDirectionalLight(2, nullptr, XMFLOAT3(-2.0f, -3.0f, -2.0f));
	light2->setSpecular(XMFLOAT4(1.0f, 1.0f, 1.0f, 32.0f));
	light2->setDiffuse(XMFLOAT4(0.5f, 0.5f, 0.5f, 1.0f));

	ICameraNode* camera = smgr->addFpsCameraNode(1, nullptr, XMFLOAT3(0, 30.0f, -4.0f), XMFLOAT3(0, 30.0f, 0.0f), XMFLOAT3(0, 1.0f, 0), true);
	camera->setViewWidth(300);
	camera->setViewHeight(200);

	char caption[200];
	
	std::string rawFileName("heightmap.raw");
	ITerrainMesh* mesh = meshManager->createTerrainMesh("terrain", rawFileName,
		3.0f, 0.4f, false, true, 1.0f);

	ITerrainNode* terrainNode = smgr->addTerrainNode(mesh);
	//terrainNode->setMaterialName("terrain/tessellation_material");
	terrainNode->setMaterialName("terrain/terrain_material");

	ITextureCube* skyTexture = textureManager->loadCubeTexture("Snow.dds");
	smgr->setSkyDome(skyTexture);

	
	IRenderTarget* pRenderTarget = textureManager->getRenderTarget("target1");

		
	ITimer* timer = device->getTimer();
	timer->reset();

	while (device->run())
	{
		const float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
		driver->beginScene(true, true, clearColor);

		u32 ms = timer->tick();
		float dt = ms * 0.001f;
		updateCamera(camera, dt);

		XMFLOAT3 camPos = camera->getPosition();
		float terrainHeight = terrainNode->getHeight(camPos.x, camPos.z, true);
		camPos.y = terrainHeight + 3.0f;
		//camera->setPosition(camPos);

		smgr->update(ms);
		smgr->drawAll();

		driver->endScene();

		u32 num = smgr->getRenderedMeshNum();

		sprintf(caption, "FPS:%f num:%d", getFps(dt), num);
		device->setWindowCaption(caption);
	}

	smgr->destroy();
	device->drop();

	return 0;
}
Example #14
0
int _tmain(int argc, _TCHAR* argv[])
{
	SDeviceContextSettings settings;
	settings.MultiSamplingCount = 4;
	settings.MultiSamplingQuality = 32;

	IDevice* device = gf::createDevice(EDT_DIRECT3D11, SCREEN_WIDTH, SCREEN_HEIGHT, EWS_NONE, true, settings);
	IVideoDriver* driver = device->getVideoDriver();

	math::SAxisAlignedBox aabb;
	aabb.Center = XMFLOAT3(0, 0.0f, 0);
	aabb.Extents = XMFLOAT3(3000.0f, 1000.0f, 3000.0f);

	ISceneManager* smgr = device->createSceneManager(aabb);
	IMeshManager* meshManager = driver->getMeshManager();
	IMaterialManager* materialManager = driver->getMaterialManager();
	ITextureManager* textureManager = driver->getTextureManager();

	IResourceGroupManager* resourceGroupManager = driver->getResourceGroupManager();
	resourceGroupManager->init("Resources.cfg");

	ILightNode* light = smgr->addDirectionalLight(1, nullptr, XMFLOAT3(3.0f, -2.0f, 1.5f));
	light->setSpecular(XMFLOAT4(1.0f, 1.0f, 1.0f, 32.0f));
	light->setDiffuse(XMFLOAT4(0.4f, 0.4f, 0.4f, 1.0f));
	light->enableShadow(true);

	ICameraNode* camera = smgr->addFpsCameraNode(1, nullptr, XMFLOAT3(0, 30.0f, -4.0f), 
		XMFLOAT3(0, 30.0f, 0.0f), XMFLOAT3(0, 1.0f, 0), true);
	camera->setShadowRange(200.0f);

	buildGrassLand(smgr);

	ISimpleMesh* groundMesh = meshManager->createPlaneMesh("ground", GROUND_SIZE, GROUND_SIZE, 50, 50, 10.0f, 10.0f);
	IMeshNode* groundNode = smgr->addMeshNode(groundMesh, nullptr, nullptr, false);
	groundNode->setMaterialName("ground_material");

	ITextureCube* skyTexture = textureManager->loadCubeTexture("skybox1.dds");
	smgr->setSkyDome(skyTexture);

	ITimer* timer = device->getTimer();
	timer->reset();
	char caption[200];
	while (device->run())
	{
		const float clearColor[] = { 0.0f, 0.0f, 0.0f, 1.0f };
		driver->beginScene(true, true, clearColor);

		f32 dt = timer->tick();
		updateCamera(camera, dt);
		g_grassLand->update(dt);

		smgr->update(dt);
		smgr->drawAll();

		driver->endScene();

		u32 num = smgr->getRenderedMeshNum();

		sprintf(caption, "FPS:%f num:%d", getFps(dt), num);
		device->setWindowCaption(caption);
	}

	smgr->destroy();
	device->drop();

	return 0;
}
Example #15
0
BOOL Init3D(HWND hwnd)
{
    const UINT bufferWidth = 640;
    const UINT bufferHeight = 480;

    //初始化失败
    if(!IRoot.InitD3D( hwnd, bufferWidth, bufferHeight,TRUE))return FALSE;

    IScene.CreateMesh(Mesh1);
    IScene.CreateRenderer(Renderer);
    IScene.CreateCamera(ICamera);
    IScene.CreateLightManager(LightMgr);
    IScene.CreateMaterialManager(MatMgr);
    IScene.CreateTextureManager(TexMgr);
    IScene.CreateAtmosphere(Atmos);
    fontMgr.Initialize();


    //漫反射贴图
    //TexMgr.CreateTextureFromFile(L"Earth.jpg", "Earth", TRUE,0, 0, TRUE);
    //TexMgr.CreatePureColorTexture("myText", 300, 100, NVECTOR4(0.0f, 0.0f, 0.0f, 0.0f), TRUE);
    TexMgr.CreateTextureFromFile(L"media/button1.png", "GUI_Button1", TRUE, 0, 0, FALSE);
    TexMgr.CreateTextureFromFile(L"media/button2.png", "GUI_Button2", TRUE, 0, 0, FALSE);
    TexMgr.CreateTextureFromFile(L"media/button3.png", "GUI_Button3", TRUE, 0, 0, FALSE);
    TexMgr.CreateTextureFromFile(L"media/button4.png", "GUI_Button4", TRUE, 0, 0, FALSE);
    TexMgr.CreateTextureFromFile(L"media/Earth.jpg","Earth", TRUE,0, 0,FALSE);
    TexMgr.CreateTextureFromFile(L"media/Earth.jpg", "EarthNormalMap", TRUE, 0, 0, TRUE);
    TexMgr.CreateTextureFromFile(L"media/texture2.jpg", "Wood", TRUE, 0, 0, FALSE);
    TexMgr.CreateTextureFromFile(L"media/universe2.jpg", "Universe", FALSE, 512, 512, FALSE);
    TexMgr.CreateTextureFromFile(L"media/bottom-right-conner-title.jpg", "BottomRightTitle", TRUE, 0, 0, FALSE);
    TexMgr.CreateCubeMapFromDDS(L"media/UniverseEnv.dds", "EnvironmentMap",NOISE_CUBEMAP_SIZE_256x256);
    TexMgr.ConvertTextureToGreyMap(TexMgr.GetTextureID("EarthNormalMap"));
    TexMgr.ConvertHeightMapToNormalMap(TexMgr.GetTextureID("EarthNormalMap"),20.0f);

    //create font texture
    fontMgr.CreateFontFromFile("media/STXINWEI.ttf", "myFont", 24);

    fontMgr.InitStaticTextW(0, L"TextBox的CapsLock和大小写/ GUI system需不需要重构一下啊....很多Event是比较重复的....= =", 300, 100, NVECTOR4(0, 1.0f, 0.5f, 1.0f), 0, 0, myText1);

    myText1.SetTextColor(NVECTOR4(1.0f, 0, 0, 0.5f));
    myText1.SetCenterPos(300.0f, 100.0f);
    fontMgr.InitDynamicTextA(0, "abcdefghijklmnopqrstuvwxyz!@#$%^&*()_<>-+?/+ 1234567890<>?,./{}[]\\", 300, 100, NVECTOR4(0, 1.0f, 0.5f, 1.0f), 0, 0, myText2);
    myText2.SetTextColor(NVECTOR4(0.5f, 0.3f, 1.0f, 0.5f));
    myText2.SetCenterPos(300.0f,400.0f);
    fontMgr.InitDynamicTextA(0, "fps:000", 200, 100, NVECTOR4(0,0,0,1.0f), 0, 0, myText_fps);
    myText_fps.SetTextColor(NVECTOR4(0,0.3f,1.0f,0.5f));
    myText_fps.SetDiagonal(NVECTOR2(20, 20),NVECTOR2(150, 60));
    myText_fps.SetFont(0);

    Renderer.SetFillMode(NOISE_FILLMODE_SOLID);
    Renderer.SetCullMode(NOISE_CULLMODE_BACK);//NOISE_CULLMODE_BACK

    //Mesh1.LoadFile_STL("object.stl");
    Mesh1.CreateSphere(5.0f, 30, 30);
    //Mesh1.CreatePlane(10.0f, 10.0f, 5, 5);
    Mesh1.SetPosition(0,0,0);

    ICamera.SetPosition(2.0f,0,0);
    ICamera.SetLookAt(0,0,0);
    ICamera.SetViewAngle(MATH_PI / 2.5f, 1.333333333f);
    ICamera.SetViewFrustumPlane(1.0f, 500.f);
    //use bounding box of mesh to init camera pos
    NVECTOR3 AABB_MAX = Mesh1.ComputeBoundingBoxMax();
    float rotateRadius = sqrtf(AABB_MAX.x*AABB_MAX.x + AABB_MAX.z*AABB_MAX.z)*1.2f;
    float rotateY = Mesh1.ComputeBoundingBoxMax().y*1.3f;
    ICamera.SetPosition(rotateRadius*0.7f, rotateY, rotateRadius*0.7f);
    ICamera.SetLookAt(0, rotateY / 2, 0);

    Atmos.SetFogEnabled(FALSE);
    Atmos.SetFogParameter(7.0f, 8.0f, NVECTOR3(0, 0, 1.0f));
    Atmos.CreateSkyDome(4.0f, 4.0f, TexMgr.GetTextureID("Universe"));
    //Atmos.CreateSkyBox(10.0f, 10.0f, 10.0f, TexMgr.GetIndexByName("EnvironmentMap"));

    //——————灯光————————
    DirLight1.mAmbientColor = NVECTOR3(1.0f,1.0f,1.0f);
    DirLight1.mDiffuseColor	=	NVECTOR3(1.0f,1.0f,1.0f);
    DirLight1.mSpecularColor	=NVECTOR3(1.0f,1.0f,1.0f);
    DirLight1.mDirection = NVECTOR3(0.0f, -0.5f, 1.0f);
    DirLight1.mSpecularIntensity	=1.5f;
    DirLight1.mDiffuseIntensity = 1.0f;
    LightMgr.CreateDynamicDirLight(DirLight1);

    N_Material Mat1;
    Mat1.baseMaterial.mBaseAmbientColor	= NVECTOR3(0.1f,  0.1f,0.1f);
    Mat1.baseMaterial.mBaseDiffuseColor		= NVECTOR3(1.0f,  1.0f, 1.0f);
    Mat1.baseMaterial.mBaseSpecularColor	=	NVECTOR3(1.0f, 1.0f,1.0f);
    Mat1.baseMaterial.mSpecularSmoothLevel	=	40;
    Mat1.baseMaterial.mNormalMapBumpIntensity = 0.3f;
    Mat1.baseMaterial.mEnvironmentMapTransparency = 0.05f;
    Mat1.diffuseMapID = TexMgr.GetTextureID("Wood");//"Earth");
    Mat1.normalMapID = TexMgr.GetTextureID("EarthNormalMap");
    Mat1.cubeMap_environmentMapID = NOISE_MACRO_INVALID_TEXTURE_ID;//TexMgr.GetTextureID("EnvironmentMap");
    UINT	 Mat1_ID = MatMgr.CreateMaterial(Mat1);

    //set material
    Mesh1.SetMaterial(Mat1_ID);

    GraphicObjBuffer.AddRectangle(NVECTOR2(340.0f, 430.0f), NVECTOR2(640.0f, 480.0f), NVECTOR4(0.3f, 0.3f, 1.0f, 1.0f),TexMgr.GetTextureID("BottomRightTitle"));

    //GUI System
    GUIMgr.Initialize(bufferWidth, bufferHeight, Renderer, inputE, fontMgr, hwnd);
    GUIMgr.SetWindowHWND(hwnd);
    GUIMgr.SetFontManager(fontMgr);
    GUIMgr.InitButton(GUIButton1);
    GUIMgr.InitScrollBar(GUIScrollBar1);
    GUIMgr.InitTextBox(GUITextBox1,0);
    GUIButton1.SetCenterPos(150.0f, 50.0f);
    GUIButton1.SetWidth(300.0f);
    GUIButton1.SetHeight(100.0f);
    GUIButton1.SetDragableX(TRUE);
    GUIButton1.SetDragableY(TRUE);
    GUIButton1.SetTexture(NOISE_GUI_BUTTON_STATE_COMMON,TexMgr.GetTextureID("GUI_Button2"));
    GUIButton1.SetTexture(NOISE_GUI_BUTTON_STATE_MOUSEON,TexMgr.GetTextureID("GUI_Button3"));
    GUIButton1.SetTexture(NOISE_GUI_BUTTON_STATE_MOUSEBUTTONDOWN,TexMgr.GetTextureID("GUI_Button4"));
    GUIButton1.SetEventProcessCallbackFunction(Button1MsgProc);
    GUIScrollBar1.SetCenterPos(300.0f, 300.0f);
    GUIScrollBar1.SetWidth(30.0f);
    GUIScrollBar1.SetHeight(300.0f);
    GUIScrollBar1.SetTexture_ScrollButton(NOISE_GUI_BUTTON_STATE_COMMON, TexMgr.GetTextureID("GUI_Button1"));
    GUIScrollBar1.SetTexture_ScrollButton(NOISE_GUI_BUTTON_STATE_MOUSEON, TexMgr.GetTextureID("GUI_Button2"));
    GUIScrollBar1.SetTexture_ScrollButton(NOISE_GUI_BUTTON_STATE_MOUSEBUTTONDOWN, TexMgr.GetTextureID("GUI_Button3"));
    GUIScrollBar1.SetTexture_ScrollGroove(TexMgr.GetTextureID("GUI_Button4"));
    GUIScrollBar1.SetAlignment(FALSE);
    GUIScrollBar1.SetValue(0.5f);
    GUITextBox1.SetTextColor({ 1.0f,0,0,1.0f });
    GUITextBox1.SetCenterPos(470.0f, 400.0f);
    GUITextBox1.SetWidth(300.0f);
    GUITextBox1.SetHeight(80.0f);
    GUITextBox1.SetFont(0);
    GUITextBox1.SetMaxWordCount(20);
    GUITextBox1.SetTexture_BackGround( TexMgr.GetTextureID("GUI_Button3"));
    GUITextBox1.SetTexture_Cursor( TexMgr.GetTextureID("GUI_Button2"));
    GUIMgr.Update();




    /*Slicer.Step1_LoadPrimitiveMeshFromSTLFile("object.stl");
    Slicer.Step2_Intersection(5);
    Slicer.Step3_GenerateLineStrip();// extremely neccessary for optimization
    Slicer.Step4_SaveLayerDataToFile("object.LayerOutput");*/
    //Slicer.Step3_LoadLineStripsFrom_NOISELAYER_File("object.LayerOutput");

    /*NVECTOR3 v1, v2, n;

    for (UINT i = 0;i < Slicer.GetLineStripCount();i++)
    {

    	Slicer.GetLineStrip(lineStrip, i);
    	for (UINT j = 0;j < lineStrip.at(i).pointList.size() - 1;j++)
    	{
    		v1 = lineStrip.at(i).pointList.at(j);
    		v2 = lineStrip.at(i).pointList.at(j + 1);
    		n = lineStrip.at(i).normalList.at(j);
    		//vertex
    		GraphicObjBuffer.AddLine3D(v1, v2);
    		//normal
    		GraphicObjBuffer.AddLine3D((v1 + v2) / 2, ((v1 + v2) / 2) + n / 4, NVECTOR4(1.0f, 1.0f, 1.0f, 1.0f), NVECTOR4(1.0f, 0.2f, 0.2f, 1.0f));
    	}
    }*/

    return TRUE;
};
Example #16
0
int main()
{
	IDevice* device = gf::createDevice(EDT_DIRECT3D11, 800, 600);
	IVideoDriver* driver = device->getVideoDriver();
	ISceneManager* smgr = device->createSceneManager();

	IResourceGroupManager* resourceGroupManager = driver->getResourceGroupManager();
	resourceGroupManager->init("Resources.cfg");
	
	ITimer* timer = device->getTimer();
	timer->reset();

	ITextureManager* textureManager = ITextureManager::getInstance();
	IShaderManager* shaderMgr = driver->getShaderManager();
	IShader* shader = shaderMgr->load(EST_COMPUTE_SHADER, "matmul.hlsl", "cs_main");

	const u32 dimension = 512;
	const u32 sq_dimension = dimension * dimension;
	std::vector<f32> A(sq_dimension);
	std::vector<f32> B(sq_dimension);
	std::vector<f32> C(sq_dimension);
	std::vector<f32> D(sq_dimension);

	// init data
	for (u32 i = 0; i < sq_dimension; i++)
	{
		A[i] = math::RandomFloat(0, 10.0f);
		B[i] = math::RandomFloat(0, 10.0f);
	}

	f32 start_time, end_time;

	start_time = timer->getTime();
	// store the right answers to D
	for (u32 i = 0; i < dimension; i++)
	{
		for (u32 j = 0; j < dimension; j++)
		{
			f32 sum = 0;
			for (u32 k = 0; k < dimension; k++)
			{
				sum += A[i * dimension + k] * B[k * dimension + j];
			}
			D[i * dimension + j] = sum;
		}
	}
	end_time = timer->getTime();
	printf("The computation time by CPU: %fs\n", end_time - start_time);


	start_time = timer->getTime();
	ITexture* inputTexture1 = textureManager->createTexture2D("input1", dimension, dimension,
		ETBT_SHADER_RESOURCE, &A[0], 1, EGF_R32_FLOAT, 0);

	ITexture* inputTexture2 = textureManager->createTexture2D("input2", dimension, dimension,
		ETBT_SHADER_RESOURCE, &B[0], 1, EGF_R32_FLOAT, 0);

	ITexture* outputTexture = textureManager->createTexture2D("output", dimension, dimension,
		ETBT_UNORDERED_ACCESS, nullptr, 1, EGF_R32_FLOAT, 0);

	ITexture* copyTexture = textureManager->createTexture2D("copy", dimension, dimension,
		ETBT_CPU_ACCESS_READ, nullptr, 1, EGF_R32_FLOAT, 0);

	shader->setTexture("gInputA", inputTexture1);
	shader->setTexture("gInputB", inputTexture2);
	shader->setTexture("gOutput", outputTexture);

	u32 blockNum = dimension / 8;
	if (blockNum * 8 != dimension)
		blockNum++;

	driver->runComputeShader(shader, blockNum, blockNum, 1);

	//driver->resetRWTextures();
	//driver->resetTextures();

	outputTexture->copyDataToAnotherTexture(copyTexture);
	STextureData outputData;
	copyTexture->lock(ETLT_READ, &outputData);
	u8* data = (u8*)outputData.Data;
	for (u32 i = 0; i < dimension; i++)
	{
		// copy each row.
		memcpy(&C[i * dimension], data + outputData.RowPitch * i, dimension * sizeof(f32));
	}

	copyTexture->unlock();
	end_time = timer->getTime();
	printf("The computation time by GPU: %fs\n", end_time - start_time);

	for (u32 i = 0; i < sq_dimension; i++)
	{
		assert(math::FloatEqual(C[i], D[i]));
	}

	// destory textures.
	if (!textureManager->destroy(inputTexture1))
		printf("Destory texture failed!");

	if (!textureManager->destroy(inputTexture2))
		printf("Destory texture failed!");

	if (!textureManager->destroy(outputTexture))
		printf("Destory texture failed!");

	if (!textureManager->destroy(copyTexture))
		printf("Destory texture failed!");

	//sphereMaterial.drop();
	smgr->destroy();
	device->drop();

	system("pause");

	return 0;
}