angle::Result ImageEGL::setRenderbufferStorage(const gl::Context *context, RenderbufferGL *renderbuffer, GLenum *outInternalFormat) { const FunctionsGL *functionsGL = GetFunctionsGL(context); StateManagerGL *stateManager = GetStateManagerGL(context); // Make sure this renderbuffer is bound stateManager->bindRenderbuffer(GL_RENDERBUFFER, renderbuffer->getRenderbufferID()); // Bind the image to the renderbuffer functionsGL->eGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, mImage); *outInternalFormat = mNativeInternalFormat; return angle::Result::Continue; }
bool DisplayOzone::Buffer::resize(int32_t width, int32_t height) { if (mWidth == width && mHeight == height) { return true; } reset(); if (width <= 0 || height <= 0) { return true; } mBO = gbm_bo_create(mDisplay->mGBM, width, height, mGBMFormat, mUseFlags); if (!mBO) { return false; } mDMABuf = gbm_bo_get_fd(mBO); if (mDMABuf < 0) { return false; } // clang-format off const EGLint attr[] = { EGL_WIDTH, width, EGL_HEIGHT, height, EGL_LINUX_DRM_FOURCC_EXT, UnsignedToSigned(mDRMFormat), EGL_DMA_BUF_PLANE0_FD_EXT, mDMABuf, EGL_DMA_BUF_PLANE0_PITCH_EXT, UnsignedToSigned(gbm_bo_get_stride(mBO)), EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, EGL_NONE, }; // clang-format on mImage = mDisplay->mEGL->createImageKHR(EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, attr); if (mImage == EGL_NO_IMAGE_KHR) { return false; } FunctionsGL *gl = mDisplay->mFunctionsGL; StateManagerGL *sm = mDisplay->getRenderer()->getStateManager(); gl->genRenderbuffers(1, &mColorBuffer); sm->bindRenderbuffer(GL_RENDERBUFFER, mColorBuffer); gl->eglImageTargetRenderbufferStorageOES(GL_RENDERBUFFER, mImage); sm->bindFramebuffer(GL_FRAMEBUFFER, mGLFB); gl->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER, mColorBuffer); if (mDepthBits || mStencilBits) { gl->genRenderbuffers(1, &mDSBuffer); sm->bindRenderbuffer(GL_RENDERBUFFER, mDSBuffer); gl->renderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8_OES, width, height); } if (mDepthBits) { gl->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, mDSBuffer); } if (mStencilBits) { gl->framebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, mDSBuffer); } mWidth = width; mHeight = height; return true; }