00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __LIBGPU_TEXTURE_H__
00027 #define __LIBGPU_TEXTURE_H__
00028
00029 #include "glstuff.h"
00030
00031 #include "types.h"
00032
00033 #include "gpu.h"
00034
00035 class FragmentProgram;
00036
00039 class Texture {
00040 friend class Gpu;
00041 friend class Kernel;
00042 friend class Parameter;
00043 public:
00049 Texture(int _width, int _height, int _bits = 32);
00050 ~Texture();
00051
00055 void upload(float4 *data);
00056
00060 void download(float4 *data);
00061
00065 void clear(float4 *val = NULL);
00066
00073 float4 reduce(FragmentProgram* prg);
00074
00078 float4 max();
00079
00083 float4 min();
00084
00088 float4 avg();
00089
00093 float4 sum();
00094
00097 void show();
00098
00099 private:
00100 bool setup;
00101 GLuint getId();
00102 GLint getInternalFormat() {
00103 return internalFormat;
00104 }
00105
00106 void grabPBuffer();
00107
00108 bool is2Dtype() {
00109 return target == GL_TEXTURE_2D;
00110 }
00111 bool isRECTtype() {
00112 return target == GL_TEXTURE_RECTANGLE_NV;
00113 }
00114
00115 int width;
00116 int height;
00117 int bits;
00118 GLint internalFormat;
00119 GLenum target;
00120 Gpu* gpu;
00121 GLuint id;
00122 };
00123
00124
00125 #endif