1 ////////////////////////////////////////////////////////////////////////////
2 //	File:		CuTexImage.h
3 //	Author:		Changchang Wu
4 //	Description :	interface for the CuTexImage class.
5 //					class for storing data in CUDA.
6 //
7 //	Copyright (c) 2007 University of North Carolina at Chapel Hill
8 //	All Rights Reserved
9 //
10 //	Permission to use, copy, modify and distribute this software and its
11 //	documentation for educational, research and non-profit purposes, without
12 //	fee, and without a written agreement is hereby granted, provided that the
13 //	above copyright notice and the following paragraph appear in all copies.
14 //
15 //	The University of North Carolina at Chapel Hill make no representations
16 //	about the suitability of this software for any purpose. It is provided
17 //	'as is' without express or implied warranty.
18 //
19 //	Please send BUG REPORTS to ccwu@cs.unc.edu
20 //
21 ////////////////////////////////////////////////////////////////////////////
22 
23 
24 #ifndef CU_TEX_IMAGE_H
25 #define CU_TEX_IMAGE_H
26 
27 class GLTexImage;
28 struct cudaArray;
29 struct textureReference;
30 
31 //using texture2D from linear memory
32 
33 #define SIFTGPU_ENABLE_LINEAR_TEX2D
34 
35 class CuTexImage
36 {
37 protected:
38 	void*		_cuData;
39 	cudaArray*	_cuData2D;
40 	int			_numChannel;
41 	size_t			_numBytes;
42 	int			_imgWidth;
43 	int			_imgHeight;
44 	int			_texWidth;
45 	int			_texHeight;
46 	GLuint		_fromPBO;
47 public:
48 	virtual void SetImageSize(int width, int height);
49 	virtual bool InitTexture(int width, int height, int nchannel = 1);
50 	void InitTexture2D();
51 	inline void BindTexture(textureReference& texRef);
52 	inline void BindTexture2D(textureReference& texRef);
53 	void CopyToTexture2D();
54 	void CopyToHost(void* buf);
55 	void CopyToHost(void* buf, int stream);
56 	void CopyFromHost(const void* buf);
57 	int  CopyToPBO(GLuint pbo);
58 	void CopyFromPBO(int width, int height, GLuint pbo);
59 	static int DebugCopyToTexture2D();
60 public:
GetImgWidth()61 	inline int GetImgWidth(){return _imgWidth;}
GetImgHeight()62 	inline int GetImgHeight(){return _imgHeight;}
GetDataSize()63 	inline int GetDataSize(){return _numBytes;}
64 public:
65 	CuTexImage();
66 	CuTexImage(int width, int height, int nchannel, GLuint pbo);
67 	virtual ~CuTexImage();
68 	friend class ProgramCU;
69 	friend class PyramidCU;
70 };
71 
72 //////////////////////////////////////////////////
73 //transfer OpenGL Texture to PBO, then to CUDA vector
74 //#endif
75 #endif // !defined(CU_TEX_IMAGE_H)
76 
77