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

📄 clvertexmatrix.h

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

#pragma once

#include "clAbstractMatrix.h"
#include "clPackedVector.h"
#include "clUnpackedVector.h"

struct CLVECMATRIXVERTEX {
    FLOAT      x,y,z;					// position    (encodes row)
	FLOAT      tu_0, tv_0;				// tex-coords0 (encodes column)
	FLOAT      tu_1, tv_1;				// tex-coords1 (encodes column)
	FLOAT      tu_2, tv_2;				// tex-coords2 (encodes column)
	FLOAT      tu_3, tv_3;				// tex-coords3 (encodes column)
	FLOAT      val0, val1, val2, val3;	// tex-coords4 (encodes values)
	FLOAT      posX, posY;				// tex-coords5 (encodes row in tex coords)
	static const DWORD FVF;
};

struct clVertexMatrixElement {
	int iX, iY;
	float fVal;
};

class clVertexMatrix : public clAbstractMatrix {
	public:
		clVertexMatrix(LPDIRECT3DDEVICE9 pd3dDevice, int iSize);
		clVertexMatrix(LPDIRECT3DDEVICE9 pd3dDevice, int iSizeX, int iSizeY);
		virtual ~clVertexMatrix(void);

		virtual int setData(clVertexMatrixElement *meData, int iElemCount);
		virtual void setDataSorted(clVertexMatrixElement *meData, int iElemCount, int iVertexBufferCount);

		virtual void matrixVectorOp(CL_enum eOpType, clFragmentVector* clvX, clFragmentVector* clvY, clFragmentVector *clvResult);
		virtual void matrixVectorOpAdd(CL_enum eOpType, clFragmentVector* clvX, clFragmentVector* clvY, clFragmentVector *clvResult);

		virtual void clPreparePackedUse();

		// public for debuf only
		LPDIRECT3DVERTEXBUFFER9 *m_ppVertexBuffers;
		int *m_iElemCounter;
		int m_iVertexBufferCount;
		static clUnpackedVector *ms_pUnpackedVectorRes;
		static clUnpackedVector *ms_pUnpackedVectorX;

	protected:
		clVertexMatrix() {} // block default constructor
		
		static LPD3DXEFFECT ms_pShaderVMatrix;
		static int ms_iVertexMatrixCount;

		static D3DXHANDLE ms_tVector;
		static D3DXHANDLE ms_tLastPass;
		static D3DXHANDLE ms_tMatrixMultiplyNoLast;
		static D3DXHANDLE ms_tMatrixMultiply;


		virtual void init(LPDIRECT3DDEVICE9 pd3dDevice, int iSizeX, int iSizeY);
		virtual void deleteVertexBuffers();
		virtual int sortData(clVertexMatrixElement *meData, int iElemCount);
		virtual void insertElement(clVertexMatrixElement &meData, CLVECMATRIXVERTEX &vbData, int iRGBAIndex);
		virtual void completeLastRow(CLVECMATRIXVERTEX &vbData, int iRGBAIndex);
		virtual void coordsTo2D(int i1DCoord, float &f2Dx, float &f2Dy);
		virtual void coordsToPos(int i1DCoord, float &f2Dx, float &f2Dy);
		virtual void loadShaders();

};

⌨️ 快捷键说明

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