     float frustum_shift_rz_ry_rx[16];
     matrixMul4(frustum_shift_rz_ry_rx, frustum, shift_rz_ry_rx);
 
+#if 0
     glEnable(GL_CULL_FACE);
     glEnable(GL_DEPTH_TEST);
     glUseProgram(simplePrg);

  glfwMakeContextCurrent(win);
  gladLoadGL(glfwGetProcAddress);

  int deviceCount;
  cudaGetDeviceCount(&deviceCount);
  if (deviceCount == 0) {
    fprintf(stderr, "No CUDA-enabled devices available.");
    return EXIT_FAILURE;
  }
  for (int i = 0; i < deviceCount; i++) {
    cudaDeviceProp dev_prop;
    cudaGetDeviceProperties(&dev_prop, i);
    fprintf(stderr, "%c[%i] %s cap=%d.%d\n", i == deviceIndex ? '*' : ' ', i, dev_prop.name, dev_prop.major, dev_prop.minor);
  }
  if (deviceIndex < 0 || deviceCount <= deviceIndex) {
    fprintf(stderr, "Illegal CUDA device index %d\n", deviceIndex);
    return EXIT_FAILURE;
  }

  glEnableVertexAttribArray(0);
//  glEnableVertexAttribArray(1);

  GLuint cudaBuf = createBuffer(GL_ARRAY_BUFFER, GL_STATIC_DRAW, sizeof(float) * vertices.size(), nullptr);

  cudaGraphicsResource* bufferResource = nullptr;
  CHECKED_CUDA(cudaGraphicsGLRegisterBuffer(&bufferResource, cudaBuf, cudaGraphicsRegisterFlagsWriteDiscard));

  GLuint cudaVbo = 0;
  glGenVertexArrays(1, &cudaVbo);
  glBindVertexArray(cudaVbo);
  glBindBuffer(GL_ARRAY_BUFFER, cudaBuf);
  glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 3, nullptr);
  //  glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 6, (void*)(sizeof(float) * 3));
  glEnableVertexAttribArray(0);
  //  glEnableVertexAttribArray(1);

  cudaGraphicsMapResources(1, &bufferResource, stream);

  cudaGraphicsUnmapResources(1, &bufferResource, stream);

  auto start = std::chrono::system_clock::now();
  while (!glfwWindowShouldClose(win)) {
