GrGLint GLTestContext::createTextureRectangle(int width, int height, GrGLenum internalFormat, GrGLenum externalFormat, GrGLenum externalType, GrGLvoid* data) { if (!(kGL_GrGLStandard == fGL->fStandard && GrGLGetVersion(fGL) >= GR_GL_VER(3, 1)) && !fGL->fExtensions.has("GL_ARB_texture_rectangle")) { return 0; } if (GrGLGetGLSLVersion(fGL) < GR_GLSL_VER(1, 40)) { return 0; } GrGLuint id; GR_GL_CALL(fGL, GenTextures(1, &id)); GR_GL_CALL(fGL, BindTexture(GR_GL_TEXTURE_RECTANGLE, id)); GR_GL_CALL(fGL, TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_MAG_FILTER, GR_GL_NEAREST)); GR_GL_CALL(fGL, TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_MIN_FILTER, GR_GL_NEAREST)); GR_GL_CALL(fGL, TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_WRAP_S, GR_GL_CLAMP_TO_EDGE)); GR_GL_CALL(fGL, TexParameteri(GR_GL_TEXTURE_RECTANGLE, GR_GL_TEXTURE_WRAP_T, GR_GL_CLAMP_TO_EDGE)); GR_GL_CALL(fGL, TexImage2D(GR_GL_TEXTURE_RECTANGLE, 0, internalFormat, width, height, 0, externalFormat, externalType, data)); return id; }
bool GrGLGetGLSLGeneration(const GrGLInterface* gl, GrGLSLGeneration* generation) { SkASSERT(generation); GrGLSLVersion ver = GrGLGetGLSLVersion(gl); if (GR_GLSL_INVALID_VER == ver) { return false; } switch (gl->fStandard) { case kGL_GrGLStandard: SkASSERT(ver >= GR_GLSL_VER(1,10)); if (ver >= GR_GLSL_VER(4,20)) { *generation = k420_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(4,00)) { *generation = k400_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(3,30)) { *generation = k330_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(1,50)) { *generation = k150_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(1,40)) { *generation = k140_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(1,30)) { *generation = k130_GrGLSLGeneration; } else { *generation = k110_GrGLSLGeneration; } return true; case kGLES_GrGLStandard: SkASSERT(ver >= GR_GL_VER(1,00)); if (ver >= GR_GLSL_VER(3,20)) { *generation = k320es_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(3,10)) { *generation = k310es_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(3,00)) { *generation = k330_GrGLSLGeneration; } else { *generation = k110_GrGLSLGeneration; } return true; default: SK_ABORT("Unknown GL Standard"); return false; } }
GrGLSLGeneration GrGetGLSLGeneration(GrGLBinding binding, const GrGLInterface* gl) { GrGLSLVersion ver = GrGLGetGLSLVersion(gl); switch (binding) { case kDesktop_GrGLBinding: GrAssert(ver >= GR_GLSL_VER(1,10)); if (ver >= GR_GLSL_VER(1,50)) { return k150_GrGLSLGeneration; } else if (ver >= GR_GLSL_VER(1,30)) { return k130_GrGLSLGeneration; } else { return k110_GrGLSLGeneration; } case kES2_GrGLBinding: // version 1.00 of ES GLSL based on ver 1.20 of desktop GLSL GrAssert(ver >= GR_GL_VER(1,00)); return k110_GrGLSLGeneration; default: GrCrash("Unknown GL Binding"); return k110_GrGLSLGeneration; // suppress warning } }