<p>将一幅图像float image[N][N]作为cuda纹理,要想取到精确像素值比如说image[i][j],应该使用tex2D(tex,i+0.5,j+0.5);</p><p>
</p><p>测试程序如下:</p>
#include <cuda_runtime.h>
#include <helper_functions.h>
#include <helper_cuda.h>
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
#define TEX_SIZE 4
#define BLOCK_SIZE 8
texture<float,2,cudaReadModeElementType> tex;
__global__ void GenImage(float* d_result)
{
unsigned int i = threadIdx.x;
unsigned int j = threadIdx.y;
d_result[j*BLOCK_SIZE+i] = tex2D(tex,i,j);
d_result[(j+BLOCK_SIZE)*BLOCK_SIZE+i] = tex2D(tex,i+0.4f,j+0.4f);
}
int main()
{
float texData[TEX_SIZE][TEX_SIZE];
float result[2][BLOCK_SIZE][BLOCK_SIZE];
for (int i=0; i<TEX_SIZE; i++)
{
for (int j=0; j<TEX_SIZE; j++)
{
texData[i][j] = i+j;
}
}
cudaChannelFormatDesc channelDesc = cuda