48 if (!is_initialized_ && !Initialize()) {
52 auto store = std::make_unique<FramebufferBackingStore>();
54 gl_->GenTextures(1, &store->texture_id);
55 gl_->GenFramebuffers(1, &store->framebuffer_id);
57 gl_->BindFramebuffer(GL_FRAMEBUFFER, store->framebuffer_id);
59 gl_->BindTexture(GL_TEXTURE_2D, store->texture_id);
60 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
61 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
62 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
63 gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
64 gl_->TexImage2D(GL_TEXTURE_2D, 0, format_.general_format, config.
size.
width,
66 GL_UNSIGNED_BYTE,
nullptr);
67 gl_->BindTexture(GL_TEXTURE_2D, 0);
69 if (enable_impeller_) {
70 if (supports_implicit_msaa_) {
72 gl_->FramebufferTexture2DMultisampleEXT(
73 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
74 store->texture_id, 0, 4);
76 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
77 GL_TEXTURE_2D, store->texture_id, 0);
81 gl_->GenRenderbuffers(1, &store->depth_stencil_id);
82 gl_->BindRenderbuffer(GL_RENDERBUFFER, store->depth_stencil_id);
83 if (supports_implicit_msaa_) {
84 gl_->RenderbufferStorageMultisampleEXT(
85 GL_RENDERBUFFER, 4, GL_DEPTH24_STENCIL8, config.
size.
width,
88 gl_->RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
91 gl_->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
92 GL_RENDERBUFFER, store->depth_stencil_id);
93 gl_->FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT,
94 GL_RENDERBUFFER, store->depth_stencil_id);
96 gl_->FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
97 GL_TEXTURE_2D, store->texture_id, 0);