static void setup_framebuffer(const GrGLInterface* gl, int screenWidth, int screenHeight) { //Setup framebuffer GrGLuint texture; GR_GL_CALL(gl, PixelStorei(GR_GL_UNPACK_ROW_LENGTH, 0)); GR_GL_CALL(gl, PixelStorei(GR_GL_PACK_ROW_LENGTH, 0)); GR_GL_CALL(gl, GenTextures(1, &texture)); GR_GL_CALL(gl, ActiveTexture(GR_GL_TEXTURE15)); GR_GL_CALL(gl, BindTexture(GR_GL_TEXTURE_2D, texture)); GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_MAG_FILTER, GR_GL_NEAREST)); GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_MIN_FILTER, GR_GL_NEAREST)); GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_WRAP_S, GR_GL_CLAMP_TO_EDGE)); GR_GL_CALL(gl, TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_WRAP_T, GR_GL_CLAMP_TO_EDGE)); GR_GL_CALL(gl, TexImage2D(GR_GL_TEXTURE_2D, 0, //level GR_GL_RGBA8, //internal format screenWidth, // width screenHeight, // height 0, //border GR_GL_RGBA, //format GR_GL_UNSIGNED_BYTE, // type NULL)); // bind framebuffer GrGLuint framebuffer; GR_GL_CALL(gl, BindTexture(GR_GL_TEXTURE_2D, 0)); GR_GL_CALL(gl, GenFramebuffers(1, &framebuffer)); GR_GL_CALL(gl, BindFramebuffer(GR_GL_FRAMEBUFFER, framebuffer)); GR_GL_CALL(gl, FramebufferTexture2D(GR_GL_FRAMEBUFFER, GR_GL_COLOR_ATTACHMENT0, GR_GL_TEXTURE_2D, texture, 0)); GR_GL_CALL(gl, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); GR_GL_CALL(gl, Viewport(0, 0, screenWidth, screenHeight)); }
void GrGLTexture::uploadTextureData(int x, int y, int width, int height, const void* srcData) { GPUGL->setSpareTextureUnit(); // glCompressedTexSubImage2D doesn't support any formats // (at least without extensions) GrAssert(fUploadFormat != GR_GL_PALETTE8_RGBA8); // If we need to update textures that are created upside down // then we have to modify this code to flip the srcData GrAssert(kTopDown_Orientation == fOrientation); GR_GL(BindTexture(GR_GL_TEXTURE_2D, fTexIDObj->id())); GR_GL(PixelStorei(GR_GL_UNPACK_ALIGNMENT, fUploadByteCount)); GR_GL(TexSubImage2D(GR_GL_TEXTURE_2D, 0, x, y, width, height, fUploadFormat, fUploadType, srcData)); }
void GrGLRestoreResetRowLength() { if (GR_GL_SUPPORT_DESKTOP) { GR_GL(PixelStorei(GR_GL_UNPACK_ROW_LENGTH, 0)); } }
void GrGLResetRowLength(const GrGLInterface* gl) { if (gl->supportsDesktop()) { GR_GL_CALL(gl, PixelStorei(GR_GL_UNPACK_ROW_LENGTH, 0)); } }