@DSGenerator(
      tool_name = "Doppelganger",
      tool_version = "2.0",
      generated_on = "2014-03-24 16:06:05.610 -0400",
      hash_original_method = "CDA5C14F8CDCE778A8FB11BE8150AA9D",
      hash_generated_method = "3FFDA852F4258D4F3758CE4950CDFF55")
  @Override
  public Frame newBoundFrame(FrameFormat format, int bindingType, long bindingId) {
    Frame result = null;
    switch (format.getTarget()) {
      case FrameFormat.TARGET_GPU:
        {
          GLFrame glFrame = new GLFrame(format, this, bindingType, bindingId);
          glFrame.init(getGLEnvironment());
          result = glFrame;
          break;
        }

      default:
        throw new RuntimeException(
            "Attached frames are not supported for target type: "
                + FrameFormat.targetToString(format.getTarget())
                + "!");
    }
    return result;
  }
  @DSGenerator(
      tool_name = "Doppelganger",
      tool_version = "2.0",
      generated_on = "2014-03-24 16:06:05.612 -0400",
      hash_original_method = "D9BBB52F9327CED81F2FD031D449BDDB",
      hash_generated_method = "BEBB154B0E0C4A7B71B71BFF09B6D9F8")
  private Frame createNewFrame(FrameFormat format) {
    Frame result = null;
    switch (format.getTarget()) {
      case FrameFormat.TARGET_SIMPLE:
        result = new SimpleFrame(format, this);
        break;

      case FrameFormat.TARGET_NATIVE:
        result = new NativeFrame(format, this);
        break;

      case FrameFormat.TARGET_GPU:
        {
          GLFrame glFrame = new GLFrame(format, this);
          glFrame.init(getGLEnvironment());
          result = glFrame;
          break;
        }

      case FrameFormat.TARGET_VERTEXBUFFER:
        {
          result = new VertexFrame(format, this);
          break;
        }

      default:
        throw new RuntimeException(
            "Unsupported frame target type: "
                + FrameFormat.targetToString(format.getTarget())
                + "!");
    }
    return result;
  }