00001 #ifndef RC_RENDERER_GL_H
00002 #define RC_RENDERER_GL_H
00003
00004
00005
00006 typedef enum {
00007
00008 SHADER_TYPE_VERTEX = 0,
00009 SHADER_TYPE_GEOMETRY,
00010 SHADER_TYPE_FRAGMENT,
00011
00012 SHADER_TYPE_LAST
00013
00014 } ShaderType_t;
00015
00016
00017
00018 class RendererGL : public Renderer {
00019
00020 public:
00021
00022 RendererGL();
00023
00024 ~RendererGL();
00025
00026 void init();
00027
00028 public:
00029
00030
00031
00032 void enqueue(
00033 Geometry *mesh
00034 );
00035
00036 void renderQueued();
00037
00038 void render(
00039 Geometry *mesh
00040 );
00041
00042 void swapBuffers();
00043
00044
00045
00046 void setShaderProgram(
00047 ShaderProgram *shader_program
00048 );
00049
00050 bool loadShaderProgram(
00051 ShaderProgram *shader_program,
00052 char *desc,
00053 char *prefix
00054 );
00055
00056 void unloadShaderProgram(
00057 ShaderProgram *shader_program
00058 );
00059
00060
00061 void setAttributes(
00062 VertexArray *vertex_array
00063 );
00064
00065 void clearAttributes(
00066 VertexArray *vertex_array
00067 );
00068
00069
00070
00071 void setUniform(
00072 Uniform *uniform
00073 );
00074
00075 bool getShaderHasUniform(
00076 ShaderProgram *shader_program,
00077 const char *name
00078 );
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 bool loadRenderTarget(
00089 RenderTarget *target,
00090 u32 n_textures,
00091 bool include_depth_buffer,
00092 bool include_stencil_buffer
00093 );
00094
00095 void unloadRenderTarget(
00096 RenderTarget *target
00097 );
00098
00099 bool shareDepthBuffer(
00100 RenderTarget *dst,
00101 RenderTarget *src
00102 );
00103
00104 void loadTexture(
00105 Texture *texture,
00106 u8 *pixels,
00107 u32 width,
00108 u32 height,
00109 TextureFormat_t format,
00110 bool generate_mipmaps,
00111 TextureFilter_t filter,
00112 TextureWrap_t wrap
00113 );
00114
00115 void unloadTexture(
00116 Texture *texture
00117 );
00118
00119 void loadCubeMap(
00120 CubeMap *cubemap,
00121 u8 **pixels,
00122 u32 width,
00123 u32 height,
00124 u32 bpp
00125 );
00126
00127 void unloadCubeMap(
00128 CubeMap *cubemap
00129 );
00130
00131 void loadVertexArray(
00132 VertexArray *vertex_array,
00133 void *new_array,
00134 u32 n,
00135 AttributeUsage_t usage
00136 );
00137
00138 void unloadVertexArray(
00139 VertexArray *vertex_array
00140 );
00141
00142 void reloadVertexArray(
00143 VertexArray *vertex_array,
00144 void *new_array,
00145 u32 n
00146 );
00147
00148 void loadIndexArray(
00149 VertexArray *vertex_array,
00150 void *new_array,
00151 u32 n,
00152 AttributeUsage_t usage
00153 );
00154
00155 void unloadIndexArray(
00156 VertexArray *vertex_array
00157 );
00158
00159 void reloadIndexArray(
00160 VertexArray *vertex_array,
00161 void *new_array,
00162 u32 n
00163 );
00164
00165
00166
00167 void setRenderState(
00168 RenderState *render_state
00169 );
00170
00171 void setViewport(
00172 i32 x,
00173 i32 y,
00174 u32 width,
00175 u32 height
00176 );
00177
00178 void getViewportDimensions(
00179 u32 *width,
00180 u32 *height
00181 );
00182
00183 void setRenderTarget(
00184 RenderTarget *target
00185 );
00186
00187 void setClearColor(
00188 vec4f color
00189 );
00190
00191 void setClearDepth(
00192 f32 depth
00193 );
00194
00195 void setClearStencil(
00196 i32 stencil
00197 );
00198
00199 void clearColor();
00200
00201 void clearDepth();
00202
00203 void clearStencil();
00204
00205 void flush();
00206
00207 void finish();
00208
00209
00210
00211 void setMatrices(
00212 Camera *camera
00213 );
00214
00215
00216
00217 void endFrame();
00218
00219 void produceScreenshot(
00220 char *filename
00221 );
00222
00223 void ensure();
00224
00225
00226
00227 private:
00228
00229 void setCubeTex(
00230 u8 *pixels,
00231 u32 w,
00232 u32 h,
00233 u32 bpp,
00234 u32 side
00235 );
00236
00237 GLuint loadShader(
00238 const char *parent,
00239 char *prefix,
00240 char *code,
00241 ShaderType_t type
00242 );
00243
00244 void unloadShader(
00245 void *handle
00246 );
00247
00248 private:
00249
00250 u32 curr_tex_slot;
00251 char tex_slot[RC_MAX_TEXTURE_SLOTS][RC_MAX_TEXTURE_NAME];
00252
00253 u32 n_vbos;
00254 u32 n_ibos;
00255 u32 n_rbos;
00256 u32 n_fbos;
00257 u32 n_textures;
00258 u32 n_cubemaps;
00259 u32 n_shaders;
00260 u32 n_shaderprogs;
00261
00262 ShaderProgram *default_shader_program;
00263
00264 RenderState *default_render_state;
00265
00266 vec4f frustum[6];
00267 bool frustum_cull;
00268
00269 };
00270
00271 #endif
00272