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

📄 clfragmentvector.h

📁 在GPU上实现数值模拟技术(线性方程组)的通用架构
💻 H
字号:
/************************************************************
 *															*
 * decr     : abstract base class for all fragment based	*
 *            vector clases									*
 * version  : 1.2											*
 * author   : Jens Kr黦er									*
 * date     : 16.09.2003									*
 * modified	: 10.06.2004									*
 * e-mail   : jens.krueger@in.tum.de						*
 *															*
 ************************************************************/

#pragma once

#include "clvector.h"
#include "clFloat.h"
#include "clMemMan.h"

class clFragmentVector : public clVector {
	public:
		clFragmentVector(void){}
		virtual ~clFragmentVector(void);
		virtual HRESULT init(LPDIRECT3DDEVICE9 pd3dDevice, int iSizeX, int iSizeY, bool bConstant, D3DFORMAT pD3DFormat);
		virtual HRESULT init(LPDIRECT3DDEVICE9 pd3dDevice, int iSize, bool bConstant, D3DFORMAT pD3DFormat);

		virtual int getSize() = NULL;
		virtual int getSizeX() = NULL;
		virtual int getSizeY() = NULL;
		virtual clMemDescr getDecription() {return m_memDesc;}

		virtual void getData(float* fVectorData);
		virtual void setData(float* fVectorData);
		virtual HRESULT setData(LPDIRECT3DSURFACE9 m_pSurfSystem);
		virtual HRESULT getData(LPDIRECT3DSURFACE9 m_pSurfSystem);

		virtual void clear();
		virtual float reduceAdd();
		virtual float reduceAdd(clFragmentVector* clvSecond);
		virtual void reduceAdd(clFloat *clfResult);
		virtual void reduceAdd(clFragmentVector* clvSecond,clFloat *clfResult);

		virtual void multiplyScalar(float fScalar);
		virtual void copyVector(clFragmentVector *clvSource);
		virtual void addVector(clFragmentVector* vSource, clFragmentVector* vTarget, float fScal1=1, float fScal2=1);
		virtual void subtractVector(clFragmentVector* clvSource, clFragmentVector* clvTarget, float fScal1=1, float fScal2=1) {addVector(clvSource, clvTarget, fScal1, -fScal2);};
		virtual void vectorOp(CL_enum eOpType, clFragmentVector *clvSource, clFragmentVector *clvTarget, float fScal1=1, float fScal2=1);

		virtual void addVector(clFragmentVector* vSource, clFragmentVector* vTarget, float fScal, clFloat *clfScal);
		virtual void subtractVector(clFragmentVector* vSource, clFragmentVector* vTarget, float fScal, clFloat *clfScal);

		void freeRenderSurface();
		static LPD3DXEFFECT		ms_pShaderClVector;

		virtual void swapSurfaces();
		virtual LPDIRECT3DSURFACE9 getWriteSurface();
		virtual LPDIRECT3DSURFACE9 getReadSurface();
		PDIRECT3DTEXTURE9		m_pVectorTexture;

		virtual TCHAR* toString(int iOutputCount);
		virtual TCHAR* toShortString(int iOutputCount);

		HRESULT BeginScene();
		HRESULT EndScene();

	protected:
		static int				s_iFragmentVectorCount;
		int						m_iTempActive;
		clMemDescr				m_memDesc;
		int						m_iMemID;

		D3DXVECTOR4				m_vSize;

		static D3DXHANDLE				ms_fMultiply;
		static D3DXHANDLE				ms_fMultiply2;
		static D3DXHANDLE				ms_fReduceStep;
		static D3DXHANDLE				ms_f4ReduceStep;
		static D3DXHANDLE				ms_f4TexShift;
		static D3DXHANDLE				ms_fShift;
		static D3DXHANDLE				ms_fSize;
		static D3DXHANDLE				ms_tVector;
		static D3DXHANDLE				ms_tVector2;
		static D3DXHANDLE				ms_tLastPass;
		static D3DXHANDLE				ms_tMultiply;

		static D3DXHANDLE				ms_tMultiplyScal;
		static D3DXHANDLE				ms_tReduceAddFirst;
		static D3DXHANDLE				ms_tReduceAddRest;
		static D3DXHANDLE				ms_tReduceAddLast;
		static D3DXHANDLE				ms_tReduceAddRestX;
		static D3DXHANDLE				ms_tReduceAddRestY;
		static D3DXHANDLE				ms_tVectorAdd;
		static D3DXHANDLE				ms_tVectorMultiply;
		static D3DXHANDLE				ms_tVectorMultiplyMatAllCases;
		static D3DXHANDLE				ms_tVectorMultiplyMatPosOnly;
		static D3DXHANDLE				ms_tVectorMultiplyMatAllCases_noadd;
		static D3DXHANDLE				ms_tVectorMultiplyMatPosOnly_noadd;
		static D3DXHANDLE				ms_tUnpackVector;
		static D3DXHANDLE				ms_tPackVector;

		int						m_ID[2];
		PDIRECT3DTEXTURE9		m_pTempTexture[2];
		LPDIRECT3DSURFACE9		m_pTempTextureSurface[2];

		LPDIRECT3DSURFACE9		m_pVectorTextureSurface;

		virtual void loadShaders();

		virtual void splitQuadX(CL_TEX2D_VERTEX *hQuad);
		virtual void splitQuadY(CL_TEX2D_VERTEX *hQuad);
		virtual void splitQuad(CL_TEX2D_VERTEX *hQuad);
		virtual int reduceAddInternal();
		virtual void reduceInXDirection(int &iDepth, CL_TEX2D_VERTEX *hQuad);
		virtual void reduceInYDirection(int &iDepth, CL_TEX2D_VERTEX *hQuad);
		virtual void combineLastPointsGeneral(int iDepth, LPDIRECT3DSURFACE9 pMiniTextureSurface, int iType);
		virtual void combineLastPoints(int iDepth, LPDIRECT3DSURFACE9 pMiniTextureSurface) = NULL;
		virtual float evalLastPoint(LPDIRECT3DSURFACE9 pMiniTextureSurface) = NULL;
};

⌨️ 快捷键说明

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