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/CLTexImage.h

84 lines
2.7 KiB

////////////////////////////////////////////////////////////////////////////
// File: CLTexImage.h
// Author: Changchang Wu
// Description : interface for the CLTexImage 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
//
////////////////////////////////////////////////////////////////////////////
#if defined(CL_SIFTGPU_ENABLED)
#ifndef CL_TEX_IMAGE_H
#define CL_TEX_IMAGE_H
class GLTexImage;
class CLTexImage
{
protected:
cl_context _context;
cl_command_queue _queue;
cl_mem _clData;
int _numChannel;
int _imgWidth;
int _imgHeight;
int _texWidth;
int _texHeight;
int _bufferLen;
int _fromGL;
private:
void ReleaseTexture();
public:
void SetImageSize(int width, int height);
void SetPackedSize(int width, int height, int packed);
void InitBufferTex(int width, int height, int nchannel);
void InitTexture(int width, int height, int nchannel);
void InitPackedTex(int width, int height, int packed);
void InitTextureGL(GLuint tex, int width, int height, int nchannel);
void CopyToHost(void* buf);
void CopyFromHost(const void* buf);
public:
int CopyToPBO(GLuint pbo);
int GetImageDataSize();
public:
inline operator cl_mem(){return _clData; }
inline int GetImgWidth(){return _imgWidth;}
inline int GetImgHeight(){return _imgHeight;}
inline int GetTexWidth(){return _texWidth;}
inline int GetTexHeight(){return _texHeight;}
inline int GetDataSize(){return _bufferLen;}
inline bool IsImage2D() {return _bufferLen == 0;}
inline int GetImgPixelCount(){return _imgWidth*_imgHeight;}
inline int GetTexPixelCount(){return _texWidth*_texHeight;}
public:
CLTexImage();
CLTexImage(cl_context context, cl_command_queue queue);
void SetContext(cl_context context, cl_command_queue queue);
virtual ~CLTexImage();
friend class ProgramCL;
friend class PyramidCL;
friend class ProgramBagCL;
friend class ProgramBagCLN;
};
//////////////////////////////////////////////////
//transfer OpenGL Texture to PBO, then to CUDA vector
//#endif
#endif // !defined(CU_TEX_IMAGE_H)
#endif