You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
exercise_2/colmap-dev/lib/SiftGPU/CuTexImage.h

77 lines
2.2 KiB

////////////////////////////////////////////////////////////////////////////
// File: CuTexImage.h
// Author: Changchang Wu
// Description : interface for the CuTexImage class.
// class for storing data in CUDA.
//
// Copyright (c) 2007 University of North Carolina at Chapel Hill
// All Rights Reserved
//
// Permission to use, copy, modify and distribute this software and its
// documentation for educational, research and non-profit purposes, without
// fee, and without a written agreement is hereby granted, provided that the
// above copyright notice and the following paragraph appear in all copies.
//
// The University of North Carolina at Chapel Hill make no representations
// about the suitability of this software for any purpose. It is provided
// 'as is' without express or implied warranty.
//
// Please send BUG REPORTS to ccwu@cs.unc.edu
//
////////////////////////////////////////////////////////////////////////////
#ifndef CU_TEX_IMAGE_H
#define CU_TEX_IMAGE_H
class GLTexImage;
struct cudaArray;
struct textureReference;
//using texture2D from linear memory
#define SIFTGPU_ENABLE_LINEAR_TEX2D
class CuTexImage
{
protected:
void* _cuData;
cudaArray* _cuData2D;
int _numChannel;
size_t _numBytes;
int _imgWidth;
int _imgHeight;
int _texWidth;
int _texHeight;
GLuint _fromPBO;
public:
virtual void SetImageSize(int width, int height);
virtual bool InitTexture(int width, int height, int nchannel = 1);
void InitTexture2D();
inline void BindTexture(textureReference& texRef);
inline void BindTexture2D(textureReference& texRef);
void CopyToTexture2D();
void CopyToHost(void* buf);
void CopyToHost(void* buf, int stream);
void CopyFromHost(const void* buf);
int CopyToPBO(GLuint pbo);
void CopyFromPBO(int width, int height, GLuint pbo);
static int DebugCopyToTexture2D();
public:
inline int GetImgWidth(){return _imgWidth;}
inline int GetImgHeight(){return _imgHeight;}
inline int GetDataSize(){return _numBytes;}
public:
CuTexImage();
CuTexImage(int width, int height, int nchannel, GLuint pbo);
virtual ~CuTexImage();
friend class ProgramCU;
friend class PyramidCU;
};
//////////////////////////////////////////////////
//transfer OpenGL Texture to PBO, then to CUDA vector
//#endif
#endif // !defined(CU_TEX_IMAGE_H)