예제 #1
0
  @Override // runs on RenderThread
  public void handleMessage(Message msg) {
    int what = msg.what;
    // Log.d(TAG, "RenderHandler [" + this + "]: what=" + what);

    RenderThread renderThread = mWeakRenderThread.get();
    if (renderThread == null) {
      Log.w(TAG, "RenderHandler.handleMessage: weak ref is null");
      return;
    }

    switch (what) {
      case MSG_SURFACE_CREATED:
        renderThread.surfaceCreated();
        break;
      case MSG_SURFACE_CHANGED:
        renderThread.surfaceChanged(msg.arg1, msg.arg2);
        break;
      case MSG_DO_FRAME:
        long timestamp = (((long) msg.arg1) << 32) | (((long) msg.arg2) & 0xffffffffL);
        renderThread.doFrame(timestamp);
        break;
      case MSG_SHUTDOWN:
        renderThread.shutdown();
        break;
      default:
        throw new RuntimeException("unknown message " + what);
    }
  }
예제 #2
0
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   width = getMeasuredWidth();
   height = getMeasuredHeight();
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);
   Log.d("weather", "onMeasure width=" + width + ",height=" + height);
   if (renderThread != null) {
     renderThread.setWidth(width);
     renderThread.setHeight(height);
   }
 }
  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    Log.d("ssidang", "surfaceChanged(" + width + ", " + height + ")");

    // 160 좌표계로 스케일합니다.
    // 화면의 짧은 축을 160으로 합니다.
    // 렌더링 시작.
    int length = Math.min(width, height);
    float factor = length / 160.f;
    this.width = width / factor;
    this.height = height / factor;

    renderThread.setScaleFactor(factor);
    renderThread.start();
  }
예제 #4
0
  public boolean requestRendering1(JobRequest request, MusicPage page) {
    // TODO: Consider switching to org.openide.util.RequestProcessor
    request.page = page;
    cancelRendering(request.requester);
    Renderer.renderQ.add(request);

    // TODO: Allow multiple threads
    if (renderThread == null || !renderThread.isAlive()) {
      renderThread = new RenderThread();
      renderThread.setName("MusicPage render");
      renderThread.start();
    }

    return true;
  }
  public void surfaceDestroyed(SurfaceHolder holder) {
    Log.d("ssidang", "surfaceDestroyed()");

    // 렌더링 스레드를 죽입니다.
    renderThread.shutdown();
    this.renderThread = null;
  }
예제 #6
0
 @Override
 public void surfaceCreated(SurfaceHolder holder) {
   Log.d("weather", "surfaceCreated");
   if (renderThread == null) {
     renderThread = new RenderThread(surfaceHolder, getContext());
     renderThread.start();
   }
 }
예제 #7
0
  @Override
  public void start() {
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    gd = ge.getDefaultScreenDevice();

    if (!gd.isFullScreenSupported()) {
      onError("Full-screen exclusive mode not supported");
      System.exit(0);
    }
    // switch on FSEM
    //        gd.setFullScreenWindow(window);

    window.setVisible(true);

    renderThread.start();
    updateThread.start();
    inputThread.start();
  }
예제 #8
0
  @Override
  public void render() {
    if (!window.isFocused()) {
      return;
    }
    // Render single frame
    do {
      // The following loop ensures that the contents of the drawing buffer
      // are consistent in case the underlying surface was recreated
      do {
        // Get a new graphics context every time through the loop
        // to make sure the strategy is validated
        Graphics2D g2 = (Graphics2D) strategy.getDrawGraphics();

        // Clear rect
        g2.clearRect(0, 0, window.getWidth(), window.getHeight());
        // Render to graphics
        gsm.render(g2);
        // ...

        if (SHOW_INFO) {
          g2.setPaint(Color.WHITE);
          g2.drawString(renderThread.report(), 900, 18);
          g2.drawString(updateThread.report(), 1100, 18);
        }

        // Dispose the graphics
        g2.dispose();

        // Repeat the rendering if the drawing buffer contents
        // were restored
      } while (strategy.contentsRestored());

      // Display the buffer
      strategy.show();

      // Repeat the rendering if the drawing buffer was lost
    } while (strategy.contentsLost());
  }
예제 #9
0
 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
   Log.d("weather", "surfaceDestroyed");
   renderThread.getRenderHandler().sendEmptyMessage(1);
 }