unsigned int GLTexture::_Load(unsigned char* data) { glGenTextures(1, &glTex); glBindTexture(GL_TEXTURE_2D, glTex); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); if(!data) glTexImage2D(GetGLType(), 0, 4, width, height, 0, GetGLFormat(), GL_UNSIGNED_BYTE, data); else gluBuild2DMipmaps(GetGLType(), 4, width, height, GetGLFormat(), GL_UNSIGNED_BYTE, data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); return true; }
int main(int argc, char** argv) { FILE *f = fopen("dgl.h", "w"); int i = 0; SC_Open("GL.H"); while(SC_ReadTokens()) { SC_Find(false); if(!stricmp(sc_parser.token, "WINGDIAPI")) { GetGLType(&gldata[i].header); SC_Find(false); if(!stricmp(sc_parser.token, "APIENTRY")) { SC_Find(false); if(sc_parser.token[0] == 'g' && sc_parser.token[1] == 'l') { int j = 0; strcpy(gldata[i].name, sc_parser.token); while(!strrchr(sc_parser.token, ';')) { if(GetGLType(&gldata[i].args[j])) GetGLArg(&gldata[i].args[j]); j++; } i++; } } } } fprintf(f, "//\n// Generated by dglmake\n//\n"); fprintf(f, "#ifndef USE_DEBUG_GLFUNCS\n\n"); SlapGLStuffToFile(f, i, false); fprintf(f, "\n#endif // USE_DEBUG_GLFUNCS\n\n"); SC_Close(); SlapGLExtensionsToFile(f, "GL_ARB_multitexture"); SlapGLExtensionsToFile(f, "GL_EXT_compiled_vertex_array"); SlapGLExtensionsToFile(f, "GL_EXT_multi_draw_arrays"); SlapGLExtensionsToFile(f, "GL_EXT_fog_coord"); SlapGLExtensionsToFile(f, "GL_ARB_vertex_buffer_object"); SlapGLExtensionsToFile(f, "GL_ARB_texture_non_power_of_two"); SlapGLExtensionsToFile(f, "GL_ARB_texture_env_combine"); SlapGLExtensionsToFile(f, "GL_EXT_texture_env_combine"); SlapGLExtensionsToFile(f, "GL_EXT_texture_filter_anisotropic"); SlapGLExtensionsToFile(f, "GL_ARB_shader_objects"); SlapGLExtensionsToFile(f, "GL_ARB_framebuffer_object"); SlapGLExtensionsToFile(f, "GL_ARB_occlusion_query"); SlapGLExtensionsToFile(f, "GL_EXT_texture_array"); fclose(f); return 1; }
void SlapGLExtensionsToFile(FILE* f, char* arbstring) { int i = 0; int a = 0; int j; SC_Open("SDL_opengl.h"); fprintf(f, "//\n// %s\n//\n", arbstring); while(SC_ReadTokens()) { SC_Find(false); if(!strcmp(sc_parser.token, arbstring)) { SC_Find(false); if(strcmp(sc_parser.token, "1")) continue; while(SC_ReadTokens()) { SC_Find(false); if(!strcmp(sc_parser.token, "#endif")) { int count; count = i; i = 0; while(i < count) { SC_Find(false); if(!strcmp(sc_parser.token, "(APIENTRYP")) { int j = 0; int len; SC_Find(false); strcpy(gldata[i].extname, sc_parser.token); len = strlen(gldata[i].extname); gldata[i].extname[len - 1] = 0; while(!strrchr(sc_parser.token, ';')) { if(GetGLType(&gldata[i].args[j])) GetGLArg(&gldata[i].args[j]); j++; } i++; } } break; } else { if(!strcmp(sc_parser.token, "GLAPI")) { GetGLType(&gldata[i].header); SC_Find(false); SC_Find(false); if(sc_parser.token[0] == 'g' && sc_parser.token[1] == 'l') { strcpy(gldata[i].name, sc_parser.token); i++; } } } } } } fprintf(f, "extern bool has_%s;\n", arbstring); if(i > 0) fprintf(f, "\n"); if(i > 0) fprintf(f, "#ifndef __IPHONEOS__\n"); for(j = 0; j < i; j++) { fprintf(f, "typedef %s ", ReturnGLType(&gldata[j].header)); if(gldata[j].header.pointer) fprintf(f, "*"); fprintf(f, "(APIENTRYP %s) (", gldata[j].extname); a = 0; if(gldata[j].args[a].name[0] == 0) fprintf(f, "void"); else { while(gldata[j].args[a].name[0] != 0) { if(a > 0) fprintf(f, ", "); if(gldata[j].args[a].isconst) fprintf(f, "const "); fprintf(f, "%s", ReturnGLType(&gldata[j].args[a])); if(gldata[j].args[a].pointer) fprintf(f, "*"); fprintf(f, " %s", gldata[j].args[a++].name); } } fprintf(f, ");\n"); } if(i > 0) fprintf(f, "#endif // __IPHONEOS__\n"); if(i > 0) fprintf(f, "\n"); if(i > 0) fprintf(f, "#ifndef __IPHONEOS__\n"); for(j = 0; j < i; j++) { fprintf(f, "extern %s _%s;\n", gldata[j].extname, gldata[j].name); } if(i > 0) fprintf(f, "#endif // __IPHONEOS__\n"); fprintf(f, "\n"); fprintf(f, "#ifndef __IPHONEOS__\n"); fprintf(f, "#define %s_Define() \\\n", arbstring); fprintf(f, "bool has_%s = false;", arbstring); if(i > 0) fprintf(f, " \\\n"); else fprintf(f, "\n"); for(j = 0; j < i; j++) { fprintf(f, "%s _%s = NULL", gldata[j].extname, gldata[j].name); if(j < (i - 1)) fprintf(f, "; \\\n"); else fprintf(f, "\n"); } fprintf(f, "#else\n"); fprintf(f, "#define %s_Define() bool has_%s = false;\n", arbstring, arbstring); fprintf(f, "#endif // __IPHONEOS__\n"); fprintf(f, "\n"); fprintf(f, "#ifndef __IPHONEOS__\n"); fprintf(f, "#define %s_Init() \\\n", arbstring); fprintf(f, "has_%s = GL_CheckExtension(\"%s\");", arbstring, arbstring); if(i > 0) fprintf(f, " \\\n"); else fprintf(f, "\n"); for(j = 0; j < i; j++) { fprintf(f, "_%s = (%s)GL_RegisterProc(\"%s\")", gldata[j].name, gldata[j].extname, gldata[j].name); if(j < (i - 1)) fprintf(f, "; \\\n"); else fprintf(f, "\n"); } fprintf(f, "#else\n"); fprintf(f, "#define %s_Init() has_%s = true;\n", arbstring, arbstring); fprintf(f, "#endif // __IPHONEOS__\n"); fprintf(f, "\n"); if(i > 0) { fprintf(f, "#ifndef USE_DEBUG_GLFUNCS\n\n"); SlapGLStuffToFile(f, i, true); fprintf(f, "\n#endif // USE_DEBUG_GLFUNCS\n\n"); } SC_Close(); }
int GetGLType(glinfo_t* info) { char *temp; SC_Find(false); if(!strcmp(sc_parser.token, "(void);")) return 0; if(strchr(sc_parser.token, '(')) temp = (sc_parser.token + 1); else temp = sc_parser.token; if(!strcmp(temp, "const")) { info->isconst = true; return GetGLType(info); } if(!strcmp(temp, "void")) info->type = 0; else if(!strcmp(temp, "GLenum")) info->type = 1; else if(!strcmp(temp, "GLboolean")) info->type = 2; else if(!strcmp(temp, "GLbitfield")) info->type = 3; else if(!strcmp(temp, "GLbyte")) info->type = 4; else if(!strcmp(temp, "GLshort")) info->type = 5; else if(!strcmp(temp, "GLint")) info->type = 6; else if(!strcmp(temp, "GLsizei")) info->type = 7; else if(!strcmp(temp, "GLubyte")) info->type = 8; else if(!strcmp(temp, "GLushort")) info->type = 9; else if(!strcmp(temp, "GLuint")) info->type = 10; else if(!strcmp(temp, "GLfloat")) info->type = 11; else if(!strcmp(temp, "GLclampf")) info->type = 12; else if(!strcmp(temp, "GLdouble")) info->type = 13; else if(!strcmp(temp, "GLclampd")) info->type = 14; else if(!strcmp(temp, "GLvoid")) info->type = 15; else if(!strcmp(temp, "GLintptrARB")) info->type = 16; else if(!strcmp(temp, "GLsizeiptrARB")) info->type = 17; else if(!strcmp(temp, "GLintptr")) info->type = 18; else if(!strcmp(temp, "GLsizeiptr")) info->type = 19; else if(!strcmp(temp, "GLhandleARB")) info->type = 20; else if(!strcmp(temp, "GLcharARB")) info->type = 21; return 1; }