00001 #ifndef RC_RENDERER_CUDA_TRACER_H
00002 #define RC_RENDERER_CUDA_TRACER_H
00003
00004
00005
00006
00007
00008 #include "CudaTracerBVH.h"
00009
00010
00011
00012
00013 class RendererCudaTracer : public Renderer {
00014
00015 public:
00016
00017 RendererCudaTracer();
00018
00019 ~RendererCudaTracer();
00020
00021 void init();
00022
00023 public:
00024
00025
00026
00027 void enqueue(
00028 Geometry *mesh,
00029 ShaderProgram *shader_program,
00030 bool is_static
00031 );
00032
00033 void renderQueued();
00034
00035 void render(
00036 Geometry *mesh
00037 );
00038
00039 void swapBuffers();
00040
00041
00042
00043 void setShaderProgram(
00044 ShaderProgram *shader_program
00045 );
00046
00047 bool loadShaderProgram(
00048 ShaderProgram *shader_program,
00049 char *desc,
00050 char *prefix
00051 );
00052
00053 void unloadShaderProgram(
00054 ShaderProgram *shader_program
00055 );
00056
00057
00058 void setAttributes(
00059 VertexArray *vertex_array
00060 );
00061
00062
00063
00064 void setUniform(
00065 Uniform *uniform
00066 );
00067
00068 bool getShaderHasUniform(
00069 ShaderProgram *shader_program,
00070 const char *name
00071 );
00072
00073 u32 getShaderSuffix(
00074 char ***suffix,
00075 ShaderType_t **type,
00076 bool **required
00077 );
00078
00079
00080
00081 void loadRenderTarget(
00082 Texture *texture
00083 );
00084
00085 void unloadRenderTarget(
00086 Texture *texture
00087 );
00088
00089 void loadTexture(
00090 Texture *texture,
00091 u8 *pixels,
00092 u32 width,
00093 u32 height,
00094 TextureFormat_t format,
00095 bool generate_mipmaps,
00096 TextureFilter_t filter,
00097 TextureWrap_t wrap
00098 );
00099
00100 void unloadTexture(
00101 Texture *texture
00102 );
00103
00104 void loadCubeMap(
00105 CubeMap *cubemap,
00106 u8 **pixels,
00107 u32 width,
00108 u32 height,
00109 u32 bpp
00110 );
00111
00112 void unloadCubeMap(
00113 CubeMap *cubemap
00114 );
00115
00116
00117
00118 void setRenderState(
00119 RenderState *render_state
00120 );
00121
00122 void setViewport(
00123 i32 x,
00124 i32 y,
00125 u32 width,
00126 u32 height
00127 );
00128
00129 void getViewportDimensions(
00130 u32 *width,
00131 u32 *height
00132 );
00133
00134 void setRenderTarget(
00135 Texture *texture
00136 );
00137
00138 void setClearColor(
00139 vec4f color
00140 );
00141
00142 void setClearDepth(
00143 f32 depth
00144 );
00145
00146 void setClearStencil(
00147 i32 stencil
00148 );
00149
00150 void clearColor();
00151
00152 void clearDepth();
00153
00154 void clearStencil();
00155
00156
00157
00158 void setMatrices(
00159 Camera *camera
00160 );
00161
00162
00163
00164 private:
00165
00166 void setCubeTex(
00167 u8 *pixels,
00168 u32 w,
00169 u32 h,
00170 u32 bpp,
00171 u32 side
00172 );
00173
00174 void runSoftwareTracer(
00175 u8 *ptr
00176 );
00177
00178 void runCudaTracer(
00179 u8 *pixels
00180 );
00181
00182 vec4f cubeMapLookup(
00183 vec3f dir
00184 );
00185
00186 private:
00187
00188 u32 pbo_index;
00189 GLuint pbo[2];
00190 GLuint tex;
00191
00192 VertexArray *myVA;
00193 BVH *bvh;
00194
00195 Ray *primary_rays;
00196 bool rays_set_up;
00197
00198 u32 cube_side;
00199 u8 *fulcube[6];
00200
00201 mat4f mat_queue[64];
00202 VertexArray *va_queue[64];
00203 u32 n_vas;
00204
00205 };
00206
00207 #endif
00208