OpenGL/Vulkanスレ Part22©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
クロスプラットフォームの3D API OpenGL 及び次世代のローレベルAPI Vulkan に関する話題を扱うスレッド。
現在の最新バージョンは4.5
https://www.opengl.org/
https://www.khronos.org/vulkan
== OpenGLと一緒に使われるツール&ライブラリ ==
苦労したくなかったらとりあえず入れとけ。
・glx: XからOpenGLを使うためのライブラリ。普通は直接は使わず意識する事はない
・glut: クロスプラットフォームなツールキット。でもさすがに古くさい
・GLFW より新しいマルチプラットフォームなツールキット
・glew: これを入れないと拡張機能が使えないor使いにくい
・glxgears: 歯車が回るベンチマーク。-infoでOpenGLのバージョンが見られる。OpenGLの動作確認はこれで
・glxinfo: 自分の使っているカードのOpenGLの機能が全てリストアップされる。
・OpenTK C#からOpenGLを簡単に使えるようになる。VC#の強力なIntellisenseとあわせてサクサク開発可能。
・OpenSceneGraph: OpenGL を高度に抽象化し、利便性を高めたラッパー。C++ ライブラリ
・OpenGL Mathematics (GLM): GLSL 文法ライクの C++ 数学ライブラリ
== チュートリアルサイト ==
床井研究室: http://marina.sys.wakayama-u.ac.jp/~tokoi/oglarticles.html
OpenGL de プログラミング: http://wiki.livedoor.jp/mikk_ni3_92/
NeHe: http://nehe.gamedev.net/
Tutorials for OpenGL 3.3 and later http://www.opengl-tutorial.org/
Learning Modern 3D Graphics Programming http://www.arcsynthesis.org/gltut/
== 前スレ ==
OpenGLスレ Part21
http://peace.2ch.net/test/read.cgi/tech/1409581958/
== 関連スレ ==
【O3D】HTML5用 3D API WebGL 【Canvas:3D】
http://peace.2ch.net/test/read.cgi/tech/1308761577/
OpenGL 2.0 専用スレ
http://peace.2ch.net/test/read.cgi/tech/1126268759/ OpenGLってCで書かれてるんでしょうか?
Javaから使いたいんですけどプラットフォームがwindowsならライブラリはどの言語から使っても共通なんでしょうか? 方程式方程式うるせーな
その次のフェーズを言ってるんだよ
その方程式でポリゴンのクリップする境界を特定したとして
どうやってそれを描画するのかってこと >>262
アホか、お前が知らなそうだから聞いてみたんだよ
図星だったんだなw >>264
結局そこはドライバとかハード次第なんじゃないか?
ま、ハードでサポートしてるとは思えないからステンシル使うと思うよ androidスマートフォンにvulkanが搭載されると具体的なこととして何か変わりますか?
また1年後の普及率は個人的にどうなると思いますか >>264
デプスバッファとかアルファリファレンスで discard することを理解できるなら、面方程式でのクリップなんて、内積とって大小比較して discard するだけなんだから、分からない理由がわからない。 >>268
WorldView空間の平面は
WorldViewProj空間では平面ではなく
曲面になる
ただしカメラ方向(z軸)と平行な場合は
平面は平面のままとなる
曲面じゃなく平面のままならそりゃ簡単さ
ただ、GLのクリッピングプレーンの座標系は
カメラ空間とあったので
平面の向きによっては曲面になりうる
その場合どのような実装でクリッピングを実現しているのか気になったわけ
まあ逆行列でWorldView空間に戻して
判定、discardすれば出来なくは無いが、
わざわざそんなまぬけな実装入れるか?ってこと
オタクが見当違いも甚だしいってわかったかよ? >>269
俺は268じゃないが268は正しいよ
それより
> 曲面になる
は笑うところか? だから言ってんじゃん
お前は2chの低レベルっぷりを
体現してる奴だってな
教えてやるのもここまでだ
後は自分で勉強するこった 多分透視除算でzが手前から奥にリニアに変化しないということなんだろう だからまあWVPの行列かけた後の透視除算前に処理するんじゃないか? >>271
お前ピクセルシェーダにどんな風に座標渡してんだよ…
wを1.0にしたカメラ座標orワールド座標を渡せば線形補間されてピクセルシェーダに渡るだろ
バカ過ぎ >>271
リニアにならないのはMVP行列を掛けるとZ値がWに移動してwが1.0にならなくなる
それをピクセルシェーダに渡すとGPUがZ/Wを補間するようになるからリニアにはならなくなる
後は自分で勉強するこったw glhint(gl_perspective_correction_hint gl_nicest)
つまりナイス! クリッププレーンはちゃんとしらべたらシェーダ利用時はそのまま使えないじゃん
別途MV変換した座標を渡す必要があるんだとな glDisableしようとすると1280エラーになるのだけれど私の環境では使えないのでしょうか?
エラーが出るのは GL_CONVOLUTION_1D_EXT GL_CONVOLUTION_2D_EXT GL_SEPARABLE_2D_EXT
GL_HISTOGRAM_EXT GL_MINMAX_EXTです
環境は CPU:Intel core I7-4771 GPU:オンボード MB:ASUS Z87-PRO-V メモリ:8GB
OS:ArchLinux カーネル4.5.4でGNOMEを使っていて
OpenGLのバージョンはよくわからないのでglxinfoを抜粋します
OpenGL renderer string: Mesa DRI Intel(R) Haswell Desktop
OpenGL core profile version string: 3.3 (Core Profile) Mesa 11.2.2
OpenGL core profile shading language version string: 3.30
OpenGL version string: 3.0 Mesa 11.2.2
OpenGL shading language version string: 1.30
長文申し訳ありませんが、宜しくお願いします >>279
GL_EXT_convolutionとかGL_ARB_imagingが無いなら使えない
つかglDisableするなら別に使えなくてもいいじゃない >>280
レス有難う
Linux版のOpenToonzで落ちるところを探ってて行き当たったので
GL_EXT_convolutionとかGL_EXT_histogramのifdefで囲ってあるようですが上手く判定できていないのかな
もうちと調べてみます >>281
それらがdefineされてるかどうかとお前の使ってるGPUがそれらをサポートしてるかどうかは別の話だから OpenGL(ES)のバージョンを指定で使いたいんだけど、
getコンテキストなんたらで、バージョン指定すりゃいいの?
2.0指定してみたけど、読み出したら3.0になってるんだが・・・ >>284
2のプログラムそのまま動くから3で問題ないよ 機械学習ベース グラフィックAPIまだできてねーのかよ OpenGLで単純な直線・ドット・四角形の描画を実行すると
ドライバ(ビデオカード?)によって同じ座標値を与えても描画結果が異なるみたいなんだけど
そういうもんなの?
環境依存しまくりで頭抱える そういう話がなくはないけど、そこまで単純なモノだったらなにかコーディングが間違ってそう Adrenoはmediump以下の精度にしようとしても無視してhighpにするって読んだ >>287
斜線が途中で微妙に1ドット違う結果になったのを確認した事はあったけど
アルゴリズムとかモバイルだと精度も違うから同じ結果にならないのも納得出来る
けど困るほどズレるかね? 旧APIの固定機能パイプラインの実装が微妙に異なるんじゃね。型とか。 Vertex2d指定で14x14の小さい丸に見立てた八角形を描こうとしたら形が歪んで
ミスが見つけられなかったから他の環境で実行したら違う形にゆがんだので
テスト用にL字型の線分を描かせてみたら違うピクセルが抜けたりと
ぶっちゃけ斜め要素のない四角形以外はおかしかったです >>292
それだけだと何とも言えないけどZテスト有効にしてZ値込みで描画してたりすんじゃないの? >>292
あーVertex2dって書いてあるか…すまん
だとしたらトライアングルストリップの指定がおかしいかぐらいか
どっちにしろそこまで歪むなんて考えられん おかしなコマンドやデータを与えた時の動作は
実装依存でもおかしくない GLSLのShader Storage Buffer Objectで質問だけど、
これを関数の引数に渡すのってどう書くの?
layout(std140,binding=0) buffer _a {
writeonly vec4 a[];
};
layout(std140, binding=1) buffer _b {
readonly vec4 b[];
};
があって、_bの内容を_aにコピーできるような一般的な関数を作る場合に
引数の型がどうなるのかがわかりません。 eglCreateSyncKHRとか、KHR付いた拡張使いたいんだけど、
なんか前提条件ある?
試したらEGL_NO_SYNC_KHRしかかえって来ない、これって駄目って事だよな?
もうひとつ、この手の機能はglFinishとかの代用って解説あるけど、
glutとか使わない生のGLES使ってる分にはeglswapがあるから意味無い? Apple様はMetal推しだからな
いいAPIだと思うよ、移植性を除けば 今時OpenGLが動かない環境なんてクソみたいもんだからどうでもいいよ Vulkanって今まで通り、GLESのコードで動くの? >>307
動かない。
全く違う低レイヤーのAPIでGLESのAPIを低レイヤーのVulkanで実装しようという動きがあるぐらい Vulkanってそんなむずいの?
https://forums.developer.apple.com/thread/38469
MetalはVulkanよりは色々やってくれて優しいみたいな事が書いてある
MetalがVulkanよりハイレベルで動くなら
他のプラットフォームで動くMetal互換の実装を作るのは可能?
でもプロプライエタリAPIの互換実装なんか誰も作らないか VulkanのアプリをMetalで動かすレイヤーはある
Metalは絶対消え去る運命にあるのは間違いない OpenGLでガンヴァロウ
そんなAPIやってられん >>306
なんか勘違いしてそうだけど、環境作る側の「環境」って組み込み機器とかの事だぞ
GPUは無いけどOpenGL ESを動かしたいとかの特殊な状況で役に立つだろう ラッパーライブラリを作る側はアプリを作る側とOpenGLからしてみれば同じだよ >>311
そのOpenGLの中身をVulkanにしよう動きが既に出ている
効率を上げないとしんどいインディーがすごく増えたし
スマホゲームにおいてVulkanを積極的にやらんとMetal持ってるiOSに負ける >>312
それと、搭載予定のGPUが開発中で実物が無い時に、すでに開発はスタートしてるとかね。 >>314
OpenGLをVulkanで実装したところで効率が良くなるとは思えんが…
むしろ間接的になるから効率は悪くなるだろ
OpenGLは仕様上色々ドライバがチェックすべき事が多いからDrawコールが重いんだろう
Vulkanで実装したところでやるべき事は一緒だ OpenGLはまずコマンドバッファの管理がドライバ任せなのが良くない感じ?
テクスチャや頂点バッファ用のメモリ確保とか転送をどうやるかもドライバ次第だしな
モバイルでglTexSubImage2dがやたら遅いとかよくあった
モバイルだと殆どのGPUがタイルベースだけど
この処理もドライバ任せだし
処理結果を取っておいたりも出来ない >>317
コンテキストが一つってのが問題点じゃなかったでしたっけ? コード量が増えるってことはバグも人件費も増えるってことじゃないの
普及するのかね >>318
コンテキストは複数持てるけど
MakeCurrentが同時に一つのスレッドからしか出来なくて
1つのスレッドからしかコマンドを送れないのが問題では
このマルチコアCPUの時代に どうせ使われてないんだから過去の互換性なんか切り捨ててくればよかったのに
使われまくってるDirectXでもやってんのに >>320
結局実行速度が厳しいスマホだからこそ急いで開発しないとマジでiOSに人取られるからなあ
より負荷の高いゲームでどっちが快適に動くかってのを見せられてしまうとなおさら Vulkanは最近のGPUの仕様に合わせて策定されてんだから今後は普通に使われるようになるだろ
時代はどんどん先へ進んでんだよ
プログラマが追い付かなきゃいかんよ >>326
そう思うなら直接使うの諦めてゲームエンジンとかのミドルウェア使えばいいじゃん。それらが対応してれば恩恵受けれるんだし OpenGLもミドルウェア的な物を通じて使う物じゃないのか コード的には退化とか言って
ハードの進化がPGのオナニーに帳消しにされてるのが我慢ならない。
クソみたいに遅いなスクリプト言語は禁止せよ 高級言語のFORTRANから低級言語のCに「退化」したようなもんだろ。 今まで抽象化されてドライバ任せだったメモリ管理とかが、今後はソフトやプログラマが直接管理しなきゃならないから、
直にはついて行けない奴も大勢いるだろ
というか、エンジンや環境自体を開発しているようなハイエンドな連中以外は環境が整うまで待ちだろ つうか赤本早くしてくれ…(一応10月発売予定にはなってる) そこだよね
どこまで対応したドライバが普及するのか 今は泥でGLつついてるんだがjavaでVulkanAPIとかパフォーマンス出なそう
まあ遅い言語でチューニングした方が感コツ掴めそうだから完成したらC++に清書か Intel内蔵GPUでもLinuxだったらIvy Bridge(2012年発売)から対応してるぞ
Windows版だと最近のしか対応しないようだが
NVIDIAも2012年製のから対応してる
↓詳しいことはこれ見れば分かる
https://en.wikipedia.org/wiki/Vulkan_(API) AndroidはAdreno一強だけど500からしか対応しないから今年の最新モデルからだね
PowerVRはかなり古いのから対応してるけどこっちはほぼApple専用だしな… intelの対応が遅いのがな
Macの少し前のでは動かないの確定か・・・ >>339
ハードウェア的にはそこそこ古いものでも対応出来るんだろうがAndroidのSoCベンダーは一度出した製品のドライバー絶対更新しないからな…
Googleすらドライバーのバグを回避するworkaround書いてる程だから グラフィック周りの更新は特に文鎮化の危険あるからな >>337
そもそもAndroidのVulkan APIってNDK前提じゃ? 幸いな事にVulkanはモバイルとデスクトップでAPIに差がないからとりあえずデスクトップで組んでおくのがいいだろうね VulkanのAPIがローレベル過ぎてJavaバインディングを作るのは難しいのかも OpenGLを蹴ってまでのAPIでJava使ったら速度でなくて意味ないじゃん 流れを見るとJava+OpenGL→Java+Vulkanって話でしょ
当然意味はある
あとバインディングもOpenGLより簡単だろう
VulkanAPIは全てXMLで定義されてるからツールに通して作れるはず OpenGLでもややこしいのにこれ以上ややこしくするなよ よくわからないけど
GPUのこと詳しくなればVulkanのほうがわかりやすくなるんじゃね
よくわからないけど 実際そうだと思う。OpenCLを先にやってたらOpenGLは暗黙の了解みたいなのが多くてわけわからなかった。 VulkanをJavaに持っていこうとしても
JNIでやり取りする時のコストがでかくて
低オーバーヘッドの意味がなくなるとかない? SDKサンプルが上がってこないとわかんないな最初に描画手順のコード?渡して
後は頂点渡すだけみたいな感じなら普通に恩恵あるだろうし 複雑なアプリを作ってるとOpenGLはステートを内部でもってるから整合性を保つのが滅茶苦茶面倒になる
Vulkanは外部に置いておけるからその辺は簡単になるだろう
OpenGL→最初簡単だけど後が大変
Vulkan→最初大変だけど後が楽
じゃないか? nvidiaはPCで不利になるから裏でVulkanを普及させたくない意図が見え隠れしてるけど
OpenGLはいい加減古い NVIDIAは無理してVulkanに移行しなくてもOpenGLだけでCPU負荷を減らせる拡張を用意してるだけだ
デベロッパーに優しいんだよ
それとゲームはDirectX12の速度の方が重要じゃないか? ■ このスレッドは過去ログ倉庫に格納されています