GPR(General Purpose Register)を読み書きするサンプルコード。
GPRは読み書き可能な32bit長のレジスタであり、プレーヤーには4096個存在する(#0-#4095)。
そこに格納された値はHDMV Title、BD-J Titleを問わす保持されるため、主にHDMV TitleとBD-J Titleの間の値のやり取りに使用される。
BD-J Title間の値のやり取りにおいても、Local StorageやTitle unbound applicationを使うよりお手軽である。
そこに格納された値はHDMV Title、BD-J Titleを問わす保持されるため、主にHDMV TitleとBD-J Titleの間の値のやり取りに使用される。
BD-J Title間の値のやり取りにおいても、Local StorageやTitle unbound applicationを使うよりお手軽である。
本サンプルは以下のTitle構成で使用することを想定しており、その場合、Top Menuキーを押すたびに画面に表示されるGPR#1の値がインクリメントされる。
- Menu title: Title#1を選択するHDMV Title(Minimal BD-J (Java) Devkit for PS3に付属のindex.bdmvとMovieObject.bdmvを使用)
- Title#1: GPR#1をインクリメントするBD-J Title
Main.java
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.system.RegisterAccess;
import org.havi.ui.HScene;
import org.havi.ui.HSceneFactory;
import org.havi.ui.HScreen;
public class Main extends Component implements Xlet {
String msg = "";
HScene hs = null;
public void initXlet(XletContext xc) {
try {
hs= HSceneFactory.getInstance().getFullScreenScene(
HScreen.getDefaultHScreen().getDefaultHGraphicsDevice());
setBounds(hs.getBounds());
setFont(new Font(null, Font.BOLD, 72));
hs.setBackground(Color.black);
hs.setBackgroundMode(HScene.BACKGROUND_FILL);
hs.add(this);
hs.setVisible(true);
// GPR取得のためのハンドルを取得
RegisterAccess ra = RegisterAccess.getInstance();
// GPR#1の値を取得
int valueOfGPR1 = ra.getGPR(1);
msg = "GPR#1: "+ valueOfGPR1; hs.repaint()
// GPR#1に値を設定;
ra.setGPR(1, valueOfGPR1+1);
} catch (Throwable e) {
msg = e.toString(); hs.repaint();
}
}
public void paint(Graphics g){
int x = 100, y = 100;
g.setColor(Color.white);
g.drawString(msg, x, y); y+=50;
}
public void startXlet() {}
public void pauseXlet() {}
public void destroyXlet(boolean unconditional) {}
}