忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2025/05/18

AndroidのTexture関係について

基本的には普通にgl関数を呼ぶだけでいいみたいですが、いちおうメモ。


まず生成について。
GLSurfaceView.Rendererの継承関数内であれば正常に生成できます。

次に破棄、これも
生成と同タイミングで可能です。


使用不可能なタイミングでgl関数を呼び出した場合は
[tag]libEGL
[text]call to OpenGL ES API with no current context (logged once per thread)
という使用不能である旨のログが残ります。
エラー落ちやブロッキングはないので安心ですね。

というわけでRenderer内部での処理にTexture生成、削除をしているなら
何の心配もなく行えます。
また、Activityが終了する際には解放する必要はありません。

exeの作成に慣れていると破棄時(ここではActivity.onDestroy呼び出し時)に
全要素を解放したくなりますが、ここはRendererの処理範囲外なので
例の使用不能呼び出しがログに残るだけです。
Textureは削除されていることを信じて祈りましょう。
コントロール出来ないのはちょっと気持ち悪いですが目をつむります。

さて、API内部で勝手に破棄してくれているので、再開時には
onSurfaceCreateで削除されたTextureを再生成する必要があるそうです。


以上を踏まえてタイトルなりゲーム部分なりを作る際には
プログラム
public abstract class Scene {

 public abstract void Init(); // 初期化. ロードはしない.
 public abstract void Step(); // 毎ループの更新処理.
 public abstract void Draw();// 毎ループの描画処理.
 public abstract void Destroy(); // 全メンバ変数の解放
 public abstract void DeleteTexture(); // Textureのみの破棄
 public abstract void LoadResources( resources ); // 全リソースのロード
 public abstract void LoadTexture( resources ); // Textureのみのロード
 public abstract void TouchEvent( event ); // Androidの入力処理

}
こんな感じです。とりあえずこれで1作品作ってみましたが
何ともしっくりこない作りですね。

今日も寒いなぁ…。
明日こそは外に出よう。

拍手[0回]

PR

2015/01/25 プログラム Comment(0)

前回の続き



さて、簡単に画像が表示出来たところで何か1品作ってみています。
実際に使ってみないと処理に抜けがあったり不便な部分があったりしますからね。
必要なテストです。


2Dのみで表現できるカンタンな脱出ゲームでもいいですねぇ。
目的のないアクションゲームも最高な暇つぶしができそうです。

惜しむらくは私に絵心が全くなくて棒人間くらいしか描けない事ですね(笑)


さて、何を作るか悩みながらゆっくり暖まって寝たいと思います。
おやすみなさい。

拍手[0回]

2015/01/15 ひとりごと Comment(0)

もう12日ですね


作業に没頭していると全然記事を書こうっていう気分にならないんですよねぇ。
日記はすぐ無くしますし……。

基本的に記録するのに向いてないのかもしれないなぁ。
まぁ忘備録もかねてますんで続けますけどね。


さて、今日はAndroidのプログラムをずっとしてました。しかもEclipceで。
Unityでやったほうが楽なんでしょうけど、一回やってみたかったんですよね。
javaとOpenGLによる開発です。

OpenGL触ったことあんまりなかったんで
取り敢えず3つほどのサイト調べつつ
Android公式リファレンス広げてふむふむと進めていきました。
慣れてない言語は手探り感がひどいですね。(笑)

***

まず嵌ったのがByteBufferの作成です。
ByteBuffer.allocate関数を呼んで救ったBufferはGLに使用できないんですね。
ByteBuffer.allocateDirect関数を使わねばなりません。
じゃないとエラーです。これはうっかりミス。

またglEnableClientStateで許可をだした場合その要素のnullは認められないようですね。
ログにエラーが出続けました。
nullチェックぐらいしてもよさそうなものですが……。
それともチェックした上でエラーを表示してるのかな?

glDisable、glDisableClientStateで無効にした場合はその要素が適用されなくなるのですが、
設定したBufferやObjectは参照し続けます。GCの対象外になりそうで怖いですね。
うっかり外し忘れると解放を忘れたオブジェクトが残りそうです。

***

とまぁこんな感覚でずっといじってました。
普段なら気にならないでしょうが、でっかいBufferを外し忘れると
占有サイズが大きくなりそうで怖いですね。まぁ滅多にない、ということなの…かな?


それにしてもホットミルクが美味しい季節ですね。
ではおやすみなさい。

拍手[0回]

2015/01/12 プログラム Comment(0)

今年の正月も終わりですね

いやぁ飲み会で羽目を外し過ぎました。反省反省。

更新を忘れてメモリプール作ってたらもう出来上がっちゃったんですよねぇ。
どうしようかなこれ。

まさか1日で出来るとは思ってなかったので困惑中です。
マルチスレッドに対応してないけど
クリティカルセクションを導入すれば問題はない、と思います。
ある程度自由に拡張できるってとこが大事ですね。


いちいち書くの面倒だし
後でファイルあげておこう。


拍手[0回]

2015/01/06 ひとりごと Comment(0)

冬のあったかい飲み物は正義

今日は久々に外に出たのでインスタントの飲み物を買ってきました。

スティックタイプのカフェオレとココアなんですが、
個人的にこの味が好きでつい買っちゃうんですよねー。

インスタントのコーヒーは
めちゃくちゃ甘ったるいものか
ちゃんと漉したもの(ドリップ式)のブラックか
じゃないと飲めないんですよね。

我ながら変な味覚してるなぁとは思いますが美味しんだから仕方ない。
そう、仕方ないのです。(強引)


あともつ鍋食べました。
あったまるー。

ではおやすみなさい。

拍手[0回]

2014/12/21 ひとりごと Comment(0)

プロフィール
 
HN:
ユニ
性別:
男性
 
 
カテゴリー
 
 
 
最新記事
 
(03/09)
(10/27)
(08/09)
(07/15)
(06/02)