@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); } }
@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(); }
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; }
@Override public void surfaceCreated(SurfaceHolder holder) { Log.d("weather", "surfaceCreated"); if (renderThread == null) { renderThread = new RenderThread(surfaceHolder, getContext()); renderThread.start(); } }
@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(); }
@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()); }
@Override public void surfaceDestroyed(SurfaceHolder holder) { Log.d("weather", "surfaceDestroyed"); renderThread.getRenderHandler().sendEmptyMessage(1); }