⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 about the basic GA in the VC++ using GPU to
💻 CPP
📖 第 1 页 / 共 3 页
字号:
bool RenderFit(LPDIRECT3DSURFACE9 &pSurface,LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;
	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );
	g_pEffect->SetTexture("ColorMapGene1", g_pResultGeneTexture[0]);
	g_pEffect->SetTexture("ColorMapGene2", g_pResultGeneTexture[1]);
	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}
bool RenderFit()
{
	if(FUCTION == FUCTION_1)
		RenderFit(g_pFitSurface,g_pBuffer,"TShader_Fit_1");
	else
		RenderFit(g_pFitSurface,g_pBuffer,"TShader_Fit_2");
	return true;
}
bool RenderBestSub(int Width, int Height,LPDIRECT3DTEXTURE9 &pTexture,char * strTechName)
{
	UINT            nPasses;
	int				pw,ph;
	int				CurrentTextureNum = 0;
	int k = EdgeRecord[0];
	int i = 0;
	while(k > 0)	
	{		
		g_pD3DDevice->SetRenderTarget(0,g_pSubSurface[i]);
		g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
		g_pD3DDevice->BeginScene();
		g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
		g_pD3DDevice->SetStreamSource(0, g_pSubBuffer[i],0, sizeof(CUSTOMVERTEX));
		D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
		g_pEffect->SetTechnique( hTechnique );
		if(CurrentTextureNum == 0)
		{
			g_pEffect->SetTexture("ColorMapSub", pTexture);
			CurrentTextureNum = 1;
			pw = Width;
			ph = Height;
		}		
		else
		{
			g_pEffect->SetTexture("ColorMapSub", g_pSubTexture[i - 1]);
			pw = EdgeRecord[i - 1];
			ph = EdgeRecord[i - 1];
		}

		g_pEffect->SetFloat("pw",(float)(1.0/(pw)));
		g_pEffect->SetFloat("ph",(float)(1.0 /(ph)));
		g_pEffect->Begin( &nPasses, 0 );
		g_pEffect->BeginPass( 0 );
		g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
		g_pEffect->EndPass();
		g_pEffect->End();
		g_pD3DDevice->EndScene();
		i++;
		k = EdgeRecord[i];	
	}
	return true;

}

bool RenderBestGene(LPDIRECT3DSURFACE9 &pSurface,int i,LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;
	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );
	g_pEffect->SetTexture("ColorMapBestGene", g_pBestGene[i]);
	g_pEffect->SetTexture("ColorMapGene", g_pResultGeneTexture[i]);
	g_pEffect->SetTexture("ColorMapBestFit", g_pSubTexture[Num-1]);
	g_pEffect->SetTexture("ColorMapBestFitSave", g_pResultBestFitTexture);

	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}


bool RenderBestFit(LPDIRECT3DSURFACE9 &pSurface,LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;
	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );
	
	g_pEffect->SetTexture("ColorMapBestFit", g_pSubTexture[Num-1]);
	g_pEffect->SetTexture("ColorMapBestFitSave", g_pResultBestFitTexture);

	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}
bool RenderBestFit()
{
	if(g_pResultBestFitTexture == g_pBestFitTexture1)
	{
		RenderBestFit(g_pBestFitSurface2,g_pBestBuffer,"TShader_BestFit");
		g_pResultBestFitTexture = g_pBestFitTexture2;
	}
	else
	{
		RenderBestFit(g_pBestFitSurface1,g_pBestBuffer,"TShader_BestFit");
		g_pResultBestFitTexture = g_pBestFitTexture1;
	}
	return true;
}

bool RenderBest()
{
	RenderBestSub(g_nWidth,g_nHeight,g_pFitTexture,"TShader_Sub");
	for(int i = 0 ; i < DIM / 4 ; i++)
	{
		if(g_pBestGene[i] == g_pBestGeneTexture1[i])
		{
			RenderBestGene(g_pBestGeneSurface2[i],0,g_pBestBuffer,"TShader_BestGene");
			g_pBestGene[i] = g_pBestGeneTexture2[i];
		}
		else
		{
			RenderBestGene(g_pBestGeneSurface1[i],0,g_pBestBuffer,"TShader_BestGene");
			g_pBestGene[i] = g_pBestGeneTexture1[i];
		}


	}
	RenderBestFit();		
	return true;
}

bool RenderSelectCtr(LPDIRECT3DSURFACE9 &pSurface,LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;
	float offset1[2],offset2[2];

	offset1[0] = (float)(rand()/(double)RAND_MAX);
	offset1[1] = (float)(rand()/(double)RAND_MAX);
	offset2[0] = (float)(rand()/(double)RAND_MAX);
	offset2[1] = (float)(rand()/(double)RAND_MAX);

	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );
	g_pEffect->SetFloat("dw",(float)(1.0/g_nWidth));
	g_pEffect->SetFloat("dh",(float)(1.0/g_nHeight));
	g_pEffect->SetFloatArray("offset1",offset1,2);
	g_pEffect->SetFloatArray("offset2",offset2,2);
	g_pEffect->SetTexture("ColorMapRand", g_pRandTexture);
	g_pEffect->SetTexture("ColorMapFit", g_pFitTexture);

	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}

bool RenderSelect(LPDIRECT3DSURFACE9 &pSurface,int i,LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;

	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );

	g_pEffect->SetTexture("ColorMapSelCtr", g_pSelCtrTexture);
	g_pEffect->SetTexture("ColorMapGene", g_pResultGeneTexture[i]);

	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}
bool RenderSelect()
{
	RenderSelectCtr(g_pSelCtrSurface,g_pBuffer,"TShader_SelCtr");	
	for(int i = 0 ; i < DIM / 4 ; i++)
	{
		if(g_pResultGeneTexture[i] == g_pGeneTexture1[i])
		{
			RenderSelect(g_pGeneSurface2[i],i,g_pBuffer,"TShader_Sel");
			g_pResultGeneTexture[i] = g_pGeneTexture2[i];
		}
		else
		{
			RenderSelect(g_pGeneSurface1[i],i,g_pBuffer,"TShader_Sel");
			g_pResultGeneTexture[i] = g_pGeneTexture1[i];
		}
	}
	return true;
}

bool RenderCrossCtr(LPDIRECT3DSURFACE9 &pSurface,LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;
	float offset1[2],offset2[2];

	offset1[0] = (float)(rand()/(double)RAND_MAX);
	offset1[1] = (float)(rand()/(double)RAND_MAX);
	offset2[0] = (float)(rand()/(double)RAND_MAX);
	offset2[1] = (float)(rand()/(double)RAND_MAX);

	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );

	g_pEffect->SetTexture("ColorMapRand", g_pRandTexture);
	g_pEffect->SetTexture("ColorMapPos", g_pPosTexture);

	g_pEffect->SetFloat("pCross",g_pCross);
	g_pEffect->SetFloatArray("offset1",offset1,2);
	g_pEffect->SetFloatArray("offset2",offset2,2);

	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}


bool RenderCross(LPDIRECT3DSURFACE9 &pSurface,int i, LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;
	
	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );

	g_pEffect->SetTexture("ColorMapGene", g_pResultGeneTexture[i]);
	g_pEffect->SetTexture("ColorMapCrossCtr", g_pCrsCtrTexture);
	g_pEffect->SetFloat("dw",(float)(1.0/g_nWidth));

	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}
bool RenderCross()
{
	for(int i = 0 ; i < DIM / 4 ; i++)
	{
		RenderCrossCtr(g_pCrsCtrSurface,g_pCrossCtrBuffer,"TShader_CrossCtr");

		if(g_pResultGeneTexture[i] == g_pGeneTexture1[i])
		{
			RenderCross(g_pGeneSurface2[i],i,g_pBuffer,"TShader_Cross");
			g_pResultGeneTexture[i] = g_pGeneTexture2[i];
		}
		else
		{
			RenderCross(g_pGeneSurface1[i],i,g_pBuffer,"TShader_Cross");
			g_pResultGeneTexture[i] = g_pGeneTexture1[i];
		}
	}
	return true;
}


bool RenderMutation(LPDIRECT3DSURFACE9 &pSurface,int i, LPDIRECT3DVERTEXBUFFER9 &pBuffer,char * strTechName)
{
		
	UINT            nPasses;
	float offset1[2],offset2[2];

	offset1[0] = (float)(rand()/(double)RAND_MAX);
	offset1[1] = (float)(rand()/(double)RAND_MAX);
	offset2[0] = (float)(rand()/(double)RAND_MAX);
	offset2[1] = (float)(rand()/(double)RAND_MAX);
	
	if(g_pD3DDevice->SetRenderTarget(0,pSurface)!= D3D_OK )		
		MessageBox(NULL,"Failed!","Info",IDOK);
	g_pD3DDevice->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1.0f, 0);
	g_pD3DDevice->BeginScene(); 
	g_pD3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
	g_pD3DDevice->SetStreamSource(0, pBuffer,0, sizeof(CUSTOMVERTEX));
	D3DXHANDLE hTechnique = g_pEffect->GetTechniqueByName( strTechName );
	g_pEffect->SetTechnique( hTechnique );

	g_pEffect->SetTexture("ColorMapGene", g_pResultGeneTexture[i]);
	g_pEffect->SetTexture("ColorMapRand", g_pRandTexture);
	g_pEffect->SetFloat("pMutation",g_pMutation);
	g_pEffect->SetFloatArray("offset1",offset1,2);
	g_pEffect->SetFloatArray("offset2",offset2,2);

	g_pEffect->Begin( &nPasses, 0 );
	g_pEffect->BeginPass(0);
	g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);
	g_pEffect->EndPass();
	g_pEffect->End();
	g_pD3DDevice->EndScene(); 
	
	return true;

}

bool RenderMutation()
{
	for(int i = 0 ; i < DIM / 4 ; i++)
	{	

		if(g_pResultGeneTexture[i] == g_pGeneTexture1[i])
		{
			RenderMutation(g_pGeneSurface2[i],i,g_pBuffer,"TShader_Mutation");
			g_pResultGeneTexture[i] = g_pGeneTexture2[i];
		}
		else
		{
			RenderMutation(g_pGeneSurface1[i],i,g_pBuffer,"TShader_Mutation");
			g_pResultGeneTexture[i] = g_pGeneTexture1[i];
		}
	}
	return true;
}


void SaveResultTexture(float *data, int w,int h,LPDIRECT3DTEXTURE9 &pColorMap)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -