Example #1
0
  bool Initialize() {
    gbm_ = gbm_create_device(drm_->GetFD());
    if (!gbm_) {
      fprintf(stderr, "cannot create gbm device.\n");
      return false;
    }

    if (!InitializeEGL()) {
      fprintf(stderr, "cannot create EGL context.\n");
      return false;
    }

    DRMModesetter::Size display_size = drm_->GetDisplaySize();
    for (auto& framebuffer : framebuffers_) {
      if (!CreateFramebuffer(display_size.width, display_size.height,
                             framebuffer)) {
        fprintf(stderr, "cannot create framebuffer.\n");
        return false;
      }
    }

    // Need to do the first mode setting before page flip.
    if (!drm_->ModeSetCrtc())
      return false;

    return true;
  }
Example #2
0
void Camera::SetRendermode(RenderMode mode) {
    int w = m_nScreenW;
    int h = m_nScreenH;

    Destroy();
    if (mode == COLOR_DEPTH)
        CreateRenderTarget(w, h);
    CreateDepthTarget(w, h);

    CreateFramebuffer();
    CreateRenderVBO();
    UpdateRenderVBO();
    m_eRenderMode = mode;
}
Example #3
0
Camera::Camera(int w, int h, RenderMode mode, float fov, float aspect, float _near, float _far) {
    m_nScreenW = w;
    m_nScreenH = h;

    int u2 = 1;
    int v2 = 1;
    while(u2 < w) u2 *= 2;
    while(v2 < h) v2 *= 2;
    w = u2;
    h = v2;

    m_nNearPlane = _near;
    m_nFarPlane = _far;

    m_nIsDepthUniform = 0;
    m_nClipPlanesUniform = 0;
    m_nBlitShader = 0;
    m_nUvAttrib = 0;
    m_nMVPUniform = 0;
    m_nPositionAttrib = 0;
    m_nTextureUniform = 0;
    m_nScaleUniform = 0;
    m_nScreenSpaceVBO = 0;
    InitBlitShader();

    m_pRenderTarget = 0;
    m_pDepthTarget = 0;
    m_nFramebufferId = 0;
    m_nVBO = 0;
    m_eRenderMode = mode;

    if (mode == COLOR_DEPTH)
        CreateRenderTarget(w, h);
    CreateDepthTarget(w, h);

    CreateFramebuffer();
    CreateRenderVBO();


    m_vecPosition = glm::vec3(0.0f, 0.0f, 0.0f);
    m_quatRotation = glm::quat();
    m_matView = glm::mat4();
    m_matProj = glm::perspective(fov, aspect, _near, _far);
    UpdateRenderVBO();
}
Example #4
0
void Camera::UpdateFrameBuffer(int screenW, int screenH) {
    m_nScreenW = screenW;
    m_nScreenH = screenH;

    int u2 = 1;
    int v2 = 1;
    while(u2 < screenW) u2 *= 2;
    while(v2 < screenH) v2 *= 2;
    screenW = u2;
    screenH = v2;

    Destroy();
    if (m_eRenderMode == COLOR_DEPTH)
        CreateRenderTarget(screenW, screenH);
    CreateDepthTarget(screenW, screenH);

    CreateFramebuffer();
    CreateRenderVBO();
    UpdateRenderVBO();
}
Example #5
0
int AttachDisplay(HDISPLAY handle)
{
	RETURN_IF_NULL(handle);
	if (!IsDisplayConnected(handle)) {
		return 0;
	}

	if (IsDisplayAttached(handle)) {
		return 1;
	}

	if (handle->mod_count <= 0) {
		return 0;
	}

	unsigned int crtc = 0;
	if ((crtc = GetUnattachedCrtc(handle->device)) <= 0) {
		return 0;
	}

	unsigned int fbo = 0;
	if ((fbo = CreateFramebuffer(handle, 32)) <= 0) {
		return 0;
	}

	struct drm_mode_crtc req;
	memset(&req, 0, sizeof(req));
	req.set_connectors_ptr = U64PTR(&handle->id);
	req.count_connectors = 1;
	req.mode_valid = 1;
	req.crtc_id = crtc;
	req.fb_id = fbo;
	memcpy(&req.mode, &handle->modes[0], sizeof(struct drm_mode_modeinfo));
	if (ioctl(handle->fd, DRM_IOCTL_MODE_SETCRTC, &req)) {
		printf("err: %d\n", errno);
		return 0;
	}

	handle->crtc = crtc;
	return 1;
}