static void SetupShaders(void) { /* emit same color to both draw buffers */ static const char *fragShaderText = "void main() {\n" " gl_FragData[0] = gl_Color; \n" " gl_FragData[1] = gl_Color; \n" "}\n"; GLuint fragShader; fragShader = LoadAndCompileShader(GL_FRAGMENT_SHADER, fragShaderText); Program = glCreateProgram(); glAttachShader(Program, fragShader); glLinkProgram(Program); CheckLink(Program); glUseProgram(Program); }
bool CGbaLoader::Load(bool aForce,bool aNotStart) { if(!expansion().IsValid()) return false; bool load=false,nor=false; struct stat st; if(-1==stat(iFileName.c_str(),&st)) { return false; } iSize=st.st_size; if(iSize>MAX_PSRAM) { nor=true; } else if(iSize>MAX_NOR) { akui::messageBox( NULL, LANG("gba warn", "title"), LANG("gba warn", "text"), MB_OK ); return false; } FILE* gbaFile=fopen(iFileName.c_str(),"rb"); if(gbaFile) { sGBAHeader header; fread(&header,1,sizeof(header),gbaFile); fclose(gbaFile); if(header.is96h==0x96) { load=LoadInternal(nor,aForce); } } if(!aNotStart&&load&&!CheckLink()) { StartGBA(); } return load; }
static void Init(void) { const char *version; GLint i; version = (const char *) glGetString(GL_VERSION); if (version[0] != '2' || version[1] != '.') { printf("Warning: this program expects OpenGL 2.0\n"); /*exit(1);*/ } GetExtensionFuncs(); vertShader = glCreateShader_func(GL_VERTEX_SHADER); ReadShader(vertShader, VertProgFile); fragShader = glCreateShader_func(GL_FRAGMENT_SHADER); ReadShader(fragShader, FragProgFile); program = glCreateProgram_func(); glAttachShader_func(program, fragShader); glAttachShader_func(program, vertShader); glLinkProgram_func(program); CheckLink(program); glUseProgram_func(program); for (i = 0; Uniforms[i].name; i++) { Uniforms[i].location = glGetUniformLocation_func(program, Uniforms[i].name); printf("Uniform %s location: %d\n", Uniforms[i].name, Uniforms[i].location); switch (Uniforms[i].size) { case 1: glUniform1fv_func(Uniforms[i].location, 1, Uniforms[i].value); break; case 2: glUniform2fv_func(Uniforms[i].location, 1, Uniforms[i].value); break; case 3: glUniform3fv_func(Uniforms[i].location, 1, Uniforms[i].value); break; case 4: glUniform4fv_func(Uniforms[i].location, 1, Uniforms[i].value); break; default: abort(); } } assert(glGetError() == 0); glClearColor(0.4f, 0.4f, 0.8f, 0.0f); printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER)); assert(glIsProgram_func(program)); assert(glIsShader_func(fragShader)); assert(glIsShader_func(vertShader)); glColor3f(1, 0, 0); }
static void Init(void) { static const char *fragShaderText = "uniform vec4 diffuse;\n" "uniform vec4 specular;\n" "varying vec3 normal;\n" "void main() {\n" " // Compute dot product of light direction and normal vector\n" " float dotProd = max(dot(gl_LightSource[0].position.xyz, \n" " normalize(normal)), 0.0);\n" " // Compute diffuse and specular contributions\n" " gl_FragColor = diffuse * dotProd + specular * pow(dotProd, 20.0);\n" "}\n"; static const char *vertShaderText = "varying vec3 normal;\n" "void main() {\n" " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" " normal = gl_NormalMatrix * gl_Normal;\n" "}\n"; const char *version; version = (const char *) glGetString(GL_VERSION); if (version[0] != '2' || version[1] != '.') { printf("This program requires OpenGL 2.x, found %s\n", version); exit(1); } GetExtensionFuncs(); fragShader = glCreateShader_func(GL_FRAGMENT_SHADER); if (FragProgFile) ReadShader(fragShader, FragProgFile); else LoadAndCompileShader(fragShader, fragShaderText); vertShader = glCreateShader_func(GL_VERTEX_SHADER); if (VertProgFile) ReadShader(vertShader, VertProgFile); else LoadAndCompileShader(vertShader, vertShaderText); program = glCreateProgram_func(); glAttachShader_func(program, fragShader); glAttachShader_func(program, vertShader); glLinkProgram_func(program); CheckLink(program); glUseProgram_func(program); uDiffuse = glGetUniformLocation_func(program, "diffuse"); uSpecular = glGetUniformLocation_func(program, "specular"); uTexture = glGetUniformLocation_func(program, "texture"); printf("DiffusePos %d SpecularPos %d TexturePos %d\n", uDiffuse, uSpecular, uTexture); glUniform4fv_func(uDiffuse, 1, diffuse); glUniform4fv_func(uSpecular, 1, specular); /* assert(glGetError() == 0);*/ glUniform1i_func(uTexture, 2); /* use texture unit 2 */ /*assert(glGetError() == 0);*/ if (CoordAttrib) { int i; glBindAttribLocation_func(program, CoordAttrib, "coord"); i = glGetAttribLocation_func(program, "coord"); assert(i >= 0); if (i != CoordAttrib) { printf("Hmmm, NVIDIA bug?\n"); CoordAttrib = i; } else { printf("Mesa bind attrib: coord = %d\n", i); } } /*assert(glGetError() == 0);*/ glClearColor(0.3f, 0.3f, 0.3f, 0.0f); glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHT0); glEnable(GL_LIGHTING); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 20.0f); MakeSphere(); MakeRect(); CurList = SphereList; #if TEXTURE MakeTexture(); #endif printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER)); printf("Press p to toggle between per-pixel and per-vertex lighting\n"); /* test glGetShaderSource() */ if (0) { GLsizei len = strlen(fragShaderText) + 1; GLsizei lenOut; GLchar *src =(GLchar *) malloc(len * sizeof(GLchar)); glGetShaderSource_func(fragShader, 0, NULL, src); glGetShaderSource_func(fragShader, len, &lenOut, src); assert(len == lenOut + 1); assert(strcmp(src, fragShaderText) == 0); free(src); } assert(glIsProgram_func(program)); assert(glIsShader_func(fragShader)); assert(glIsShader_func(vertShader)); glColor3f(1, 0, 0); /* for testing state vars */ { static GLfloat fc[4] = { 1, 1, 0, 0 }; static GLfloat amb[4] = { 1, 0, 1, 0 }; glFogfv(GL_FOG_COLOR, fc); glLightfv(GL_LIGHT1, GL_AMBIENT, amb); } #if 0 TestFunctions(); #else (void) TestFunctions; #endif }
static void Init(void) { static const char *fragShaderText = "uniform sampler2DShadow shadowTex2D; \n" "uniform sampler2DRectShadow shadowTexRect; \n" "void main() {\n" #if USE_RECT " gl_FragColor = shadow2DRectProj(shadowTexRect, gl_TexCoord[0]); \n" #else " gl_FragColor = shadow2D(shadowTex2D, gl_TexCoord[0].xyz); \n" #endif "}\n"; static const char *vertShaderText = "void main() {\n" " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n" " gl_TexCoord[0] = gl_MultiTexCoord0; \n" "}\n"; const char *version; #if USE_RECT if (!glutExtensionSupported("GL_ARB_texture_rectangle")) { printf("This program requires GL_ARB_texture_rectangle\n"); exit(1); } #endif version = (const char *) glGetString(GL_VERSION); if (version[0] != '2' || version[1] != '.') { printf("This program requires OpenGL 2.x, found %s\n", version); exit(1); } printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER)); fragShader = glCreateShader(GL_FRAGMENT_SHADER); if (FragProgFile) ReadShader(fragShader, FragProgFile); else LoadAndCompileShader(fragShader, fragShaderText); vertShader = glCreateShader(GL_VERTEX_SHADER); if (VertProgFile) ReadShader(vertShader, VertProgFile); else LoadAndCompileShader(vertShader, vertShaderText); program = glCreateProgram(); glAttachShader(program, fragShader); glAttachShader(program, vertShader); glLinkProgram(program); CheckLink(program); glUseProgram(program); uTexture2D = glGetUniformLocation(program, "shadowTex2D"); uTextureRect = glGetUniformLocation(program, "shadowTexRect"); printf("uTexture2D %d uTextureRect %d\n", uTexture2D, uTextureRect); if (uTexture2D >= 0) { glUniform1i(uTexture2D, 0); /* use texture unit 0 */ } if (uTextureRect >= 0) { glUniform1i(uTextureRect, 1); /* use texture unit 0 */ } CheckError(__LINE__); glClearColor(0.3f, 0.3f, 0.3f, 0.0f); glColor3f(1, 1, 1); MakeTexture(); CheckError(__LINE__); }