void Language::SetupStrings(const char* language) { // First load Blake Stone's strings so we can replace them in LANGUAGE later SetupBlakeStrings("LEVELDSC", "BLAKE_AREA_"); int lastLump = 0; int lump = 0; while((lump = Wads.FindLump("LANGUAGE", &lastLump)) != -1) { // Read the lump defaulting to english ReadLump(lump, language == NULL ? "enu" : language); } }
static GLShader* gld_LoadShader(const char *vpname, const char *fpname) { #define buffer_size 2048 int idx; int linked; char buffer[buffer_size]; char *vp_data = NULL; char *fp_data = NULL; int vp_size, fp_size; size_t vp_fnlen, fp_fnlen; char *filename = NULL; GLShader* shader = NULL; vp_fnlen = doom_snprintf(NULL, 0, "%s/shaders/%s.txt", I_DoomExeDir(), vpname); fp_fnlen = doom_snprintf(NULL, 0, "%s/shaders/%s.txt", I_DoomExeDir(), fpname); filename = malloc(MAX(vp_fnlen, fp_fnlen) + 1); sprintf(filename, "%s/shaders/%s.txt", I_DoomExeDir(), vpname); vp_size = ReadLump(filename, vpname, &vp_data); sprintf(filename, "%s/shaders/%s.txt", I_DoomExeDir(), fpname); fp_size = ReadLump(filename, fpname, &fp_data); if (vp_data && fp_data) { shader = calloc(1, sizeof(GLShader)); shader->hVertProg = GLEXT_glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB); shader->hFragProg = GLEXT_glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB); GLEXT_glShaderSourceARB(shader->hVertProg, 1, &vp_data, &vp_size); GLEXT_glShaderSourceARB(shader->hFragProg, 1, &fp_data, &fp_size); GLEXT_glCompileShaderARB(shader->hVertProg); GLEXT_glCompileShaderARB(shader->hFragProg); shader->hShader = GLEXT_glCreateProgramObjectARB(); GLEXT_glAttachObjectARB(shader->hShader, shader->hVertProg); GLEXT_glAttachObjectARB(shader->hShader, shader->hFragProg); GLEXT_glLinkProgramARB(shader->hShader); GLEXT_glGetInfoLogARB(shader->hShader, buffer_size, NULL, buffer); GLEXT_glGetObjectParameterivARB(shader->hShader, GL_OBJECT_LINK_STATUS_ARB, &linked); if (linked) { lprintf(LO_INFO, "gld_LoadShader: Shader \"%s+%s\" compiled OK: %s\n", vpname, fpname, buffer); shader->lightlevel_index = GLEXT_glGetUniformLocationARB(shader->hShader, "lightlevel"); GLEXT_glUseProgramObjectARB(shader->hShader); idx = GLEXT_glGetUniformLocationARB(shader->hShader, "tex"); GLEXT_glUniform1iARB(idx, 0); GLEXT_glUseProgramObjectARB(0); } else { lprintf(LO_ERROR, "gld_LoadShader: Error compiling shader \"%s+%s\": %s\n", vpname, fpname, buffer); free(shader); shader = NULL; } } free(filename); free(vp_data); free(fp_data); return shader; }