ShaderEditorを改造する
TODO
完全な全画面対応
シェーダーがでかい時にエディタが重すぎる
google driveと連携し、シェーダーを自動でクラウドにバックアップ、保存する機能
それをwebから見ることが出来るサイト
映像の外部出力
マルチパス
他のファイルをincludeする機能 (通常のファイルと分けたglslファイル)
MIDI入力
ShaderToyへのアップロード
完了
backbufferをfloat精度に
OpenGL ES 3.0に移行
環境整備(WSLからのUSBを通した実機テスト)
wslから実機確認をするため、USBIPD-WINを使う
code:ps
PS C:\Users\Renar> usbipd list
Connected:
BUSID VID:PID DEVICE STATE
1-5 ****:**** POCO F6 Pro Not shared
Androidデバイス(BUSID 1-5)を共有化 (POCO F6 ProはGPU強いクソ安いxiaomiのスマホ)
usbipd bind --busid 1-5
WSL2にアタッチ
usbipd attach --wsl --busid 1-5
wslでlsusb,adb devicesを行い、デバイスが認識されたらok
code:bash
./gradlew assembleDebug # ビルド
./gradlew installDebug # 実機インストール
adb shell am start -n de.markusfisch.android.shadernerdeditor.debug/de.markusfisch.android.shadernerdeditor.activity.SplashActivity # 実機テスト
./gradlew assembleRelease # リリースビルド
adb logcat -c # log clean
adb logcat -s MainActivity # log tracking
ちなウチのスマホは
Android 15
Adreno 740 GPU
OpenGL ES 3.2 いける
backbufferの精度をfloatにする
ShaderRenderer.javaのcreateTargetメソッド(1165行目)
code:java
GLES20.glTexImage2D(
GLES20.GL_TEXTURE_2D,
0,
GLES20.GL_RGBA, // 内部フォーマット
width,
height,
0,
GLES20.GL_RGBA, // ピクセルデータフォーマット
GLES20.GL_UNSIGNED_BYTE, // データ型
null);
TextureParameters.setBitmapメソッド(144-146行目)
code:java
GLUtils.texImage2D(
GLES20.GL_TEXTURE_2D,
0,
GLES20.GL_RGBA,
flippedBitmap,
GLES20.GL_UNSIGNED_BYTE,
0);
内部フォーマット: GL_RGBA (8ビット符号なし整数)
データ型: GL_UNSIGNED_BYTE (RGBA32bit)
現在OpenGL ES 2.0なので、GL_OES_texture_half_floatで16bit float textureまでは行けるが、ウチは3.2まで行けるので、この際OpenGL ES 3.0にしちゃおう -> できたー ∩(´∀`∩) ワショーイ∩( ´∀` )∩ワショーイ (∩´∀`)∩
backbufferはfloat 32bitでlinerにした
多分mipmapも生成されてるとおもう
OpenGL ES 3.0へ移行
floatにするよ -> できたー ∩(´∀`∩) ワショーイ∩( ´∀` )∩ワショーイ (∩´∀`)∩
全画面対応
今まで録画するとき邪魔すぎたので
ちなウチの全画面解像度は1080x2400
ナビゲーションバーを常に非表示 -> できたー∩(´∀`∩) ワショーイ∩( ´∀` )∩ワショーイ (∩´∀`)∩
プレビュー画面を完全な全画面表示に (ダブルタップで元に戻る)
映像の外部出力
案
NDI (Network Device Interface) 実装
RTMP ストリーミング
Android Screen Mirroring API の活用 (MediaProjection APIを使用し、Miracast/Chromecastへ出力)
USB-C/HDMI 出力 (Android の Display Manager APIを使用し、外部ディスプレイに専用ウィンドウを表示)