- Timestamp:
- Feb 20, 2011, 1:02:42 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shader.cpp
r668 r670 39 39 private: 40 40 GLuint prog_id, vert_id, frag_id; 41 uint32_t vert_crc, frag_crc; 42 43 /* Global shader cache */ 44 static Shader *shaders[]; 45 static int nshaders; 41 46 }; 47 48 Shader *ShaderData::shaders[256]; 49 int ShaderData::nshaders = 0; 42 50 43 51 /* … … 47 55 Shader *Shader::Create(char const *vert, char const *frag) 48 56 { 49 return new Shader(vert, frag); 57 uint32_t new_vert_crc = Hash::Crc32(vert); 58 uint32_t new_frag_crc = Hash::Crc32(frag); 59 60 for (int n = 0; n < ShaderData::nshaders; n++) 61 { 62 if (ShaderData::shaders[n]->data->vert_crc == new_vert_crc 63 && ShaderData::shaders[n]->data->frag_crc == new_frag_crc) 64 return ShaderData::shaders[n]; 65 } 66 67 Shader *ret = new Shader(vert, frag); 68 ShaderData::shaders[ShaderData::nshaders] = ret; 69 ShaderData::nshaders++; 70 return ret; 50 71 } 51 72 52 73 void Shader::Destroy(Shader *shader) 53 74 { 54 delete shader; 75 /* XXX: do nothing! the shader should remain in cache */ 76 (void)shader; 55 77 } 56 78 … … 61 83 GLsizei len; 62 84 85 data->vert_crc = Hash::Crc32(vert); 63 86 data->vert_id = glCreateShader(GL_VERTEX_SHADER); 64 87 glShaderSource(data->vert_id, 1, &vert, NULL); … … 69 92 fprintf(stderr, "ERROR: failed to compile vertex shader: %s", buf); 70 93 94 data->frag_crc = Hash::Crc32(frag); 71 95 data->frag_id = glCreateShader(GL_FRAGMENT_SHADER); 72 96 glShaderSource(data->frag_id, 1, &frag, NULL);
Note: See TracChangeset
for help on using the changeset viewer.