blog

OpenGL ES

この型は、すべてのシステム依存性をカプセル化し、ネイティブウィンドウシステムとのインタフェースに使用され、一様なクライアントとサーバー間のチャネルを表します。 OpenGL ES APIは、レンダリン...

Jul 24, 2020 · 5 min. read
シェア

I. OpenGL ESの定義

OpenGL ESは、iOS、andriod、BlackBerry、bada、Linux、Windowsなどのプラットフォームに対応しており、今日のスマートフォンで主流となっているグラフィックスAPIです。

  • OpenGLのサブセット。
  • OpenGL ESはOpenGL ESのような標準に過ぎないので、さまざまなプラットフォームがOpenGL ESをベースとしたAPIのセットを開発しています。
  • 基本的に、2Dおよび3Dデータを読み込むことができる、汎用性の高いオープンスタンダードのグラフィックスライブラリです。
  • これはOpenGLの簡素化バージョンで、冗長性を排除し、モバイルクライアントに不要なAPIを削除しています。

I. OpenGL ESの定義

クライアントはプロシージャを呼び出します:

その後、頂点シェーダは、メモリから頂点データを取得し、頂点シェーダは、頂点データを処理し、グラフィック要素アセンブリにそれを与える、アセンブリが完了した後、必要なスタイルに要求アセンブリに応じてラスタライズを介して、その後、データはスライスシェーダに与えられる、スライスシェーダは、処理が完了した後、フレームバッファに引き渡し、画面表示を待つ色処理の表示がピクセルに対応することでしょう

Appleの公式ドキュメントでは、グラフィカルなパイプラインを提供しています:

  • アプリのコードには、エレメントの組み立てに関する情報と、写真に関する情報が記載されています。
  • 頂点データのパン、ズーム、回転
  • 要素の再組み立て(切断など
  • テクスチャリングはピースワイズシェーダによって実行されます。
  • ミキシング、透明度、深度テストなど、フレームバッファに提供される場合

頂点シェーダー

定義

  • 頂点インジェクターとは、頂点に対して実行される演算を記述した頂点シェーダープログラムのソースコードです。
  • 頂点シェーダーは、各頂点のデータを提供する頂点配列などのパラメータを必要とします。
  • ユニフォーム変数も、頂点シェーダやスライスシェーダでよく使われるデータですが、ほとんど変化しません。
  • Sampler - バーテックスシェーダーで使用されるテクスチャーを表す特殊な一様変数型。
  • 頂点シェーダは組み込み変数

ビジネス処理

  • 行列変換
  • ファセット頂点カラーを生成するための照明式を計算します。
  • テクスチャ座標の生成/変換
  • ピースワイズシェーダへのテクスチャ情報の渡し方

コード例

GPUは複雑なロジック処理を処理できないため、頂点シェーダーのコードは非常にシンプルです。

attribute vec4 position;
attribute vec2 textCoordinate;
uniform mat4 rotateMatrix;
varying lowp vec2 varyTextCoord;
void main(){
	varyTextCoord = textCoordinate;
 vec4 vPos = position;
 vPos = vPos * rotateMatrix;
 gl_Postition = vPos;
}
  • 属性は、クライアントとサーバ間のチャネルを表します。
  • ここで、vec4, vec2 はベクトル型で、4 次元ベクトルと 2 次元ベクトルを表します。
  • mat4 4 * 4
  • varying は修飾子です。テクスチャ座標は varying を介してスライスシェーダに渡されます。
  • lowp 低精度
  • 演算を実装しています:
    • テクスチャ座標のブリッジングを実装
    • 頂点選択行列乗算の実装:列ベクトルを列行列と乗算して、回転した頂点座標を得ます。
    • 頂点座標をgl_Positionに割り当てます。

IV.メタアセンブリ

頂点シェーダーが処理された後、次の段階は要素アセンブリで、頂点データを個々のタプルに分割する計算が行われ、その中でクロッピング、パースペクティブ分割、ビューポート変換操作が行われ、次の段階はラスタライズ段階です。

しかし、要素の組み立てとラスタライズのこの段階は、開発者の手からはほとんど離れています。

V. ラスタライズ

ラスタライズとは、ピクチャエレメントをピースワイズシェーダで処理される2Dフラグメントの集合に変換するプロセスです。

100ピクセルポイントがある場合、スライスシェーダは100回実行されなければなりません。

頂点シェーダー

定義

  • フラグメントシェーダは、フラグメントに対して実行される処理を記述したフラグメントシェーダプログラムのソースコードであり、コードの一部でもあります。
  • 必要なパラメータは、ラスタライズユニットが補間を使用して各セグメントに生成する頂点シェーダ出力です。
  • ユニフォーム変数 - バーテックス・シェーダーでよく使われるデータですが、ほとんど変更されません。
  • Sampler - スライスシェーダで使用されるテクスチャを表す特別な一様変数型。

頂点シェーダの出力は gl_fragColor で、これはピースワイズシェーダがピクセル点

ビジネス処理

  • 色の計算
  • テクスチャ値の取得
  • ピクセルをカラー値で塗りつぶします。

チップシェーダは、イメージ/ビデオ/グラフィックスの各ピクセルの色塗りに使用できます。

コード例

varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
vord main(){
	gl_FragColor = texture2D(colorMap,varyTextCoord);
}
  • varying: テクスチャ座標を渡すには、頂点シェーダーとまったく同じでなければなりません。
  • sampler2Dサンプラー型
  • texture2D: テクスチャサンプラー、テクスチャ座標、対応する位置/座標のカラー値を取得します。
  • gl_FragColor (組み込み変数): 最終的な色の値を代入します。

概要

バーテックスシェーダ、スライスシェーダは、iOSの関数やメソッドに似た、戻り値を持つコードスニペットです。

  • 頂点シェーダの戻り値は gl_Position に代入されます。
  • ピースワイズシェーダの結果がgl_FragColorに代入されます。

これらの戻り値はどちらもGLSLの組み込み変数で、カプセル化されているので、データを直接代入することができます。

  • gl_Position: バーテックスシェーダーにおける頂点の一連の処理結果
  • gl_fragColor: ピクセルをフラグメントシェーダで処理した結果。

OpenES

ピクチャーフィルター

  • イメージ内のすべてのピクセル点を取得
  • ピクセルポイントが飽和
  • 新しい色の取得
  • 新しい色をフレームバッファに入れます。
  • ディスプレイ

ビデオフィルター原理と処理はイメージフィルターと同じです。

  • h462
  • h462
  • ビデオをデコードし、フレームごとのイメージに縮小します。
  • フレーム単位のイメージ処理

EGL

  • OpenGL ESコマンドは、グラフィックス描画を完了するために、レンダリングコンテキストと描画サーフェスを必要とします。
  • レンダリングコンテキスト:関連するOpenGL Eの状態を保存します。
  • Draw Surface: タプルの表面を描画するために使用され、レンダリングバッファ(カラーバッファ、深度バッファ、テンプレートバッファなど)を指定する必要があります。
  • OpenGL ES APIは、レンダリングコンテキストの作成方法や、コンテキストのネイティブウィンドウシステムへのリンク方法を提供していません。
  • EGLはKhronosレンダリングAPIとネイティブ・ウィンドウ・システムとの間のインターフェースです。
  • OpenGL ESをサポートし、EGLをサポートしない唯一のプラットフォームはiOSです。 AppleはEAGLと呼ばれるEGL APIの独自のiOS実装を提供しています。
  • 各ウィンドウ・システムの定義は異なるため、EGLは基本的な不透明型であるEGLDisplayを提供し、すべてのシステム依存性をカプセル化し、ネイティブ・ウィンドウ・システムとのインターフェイスに使用されます。
Read next

LeetCode 86|連鎖表の基本、連鎖表の全要素を一度に反復処理する

今日はLeetCodeのトピックで、LeetCodeの問題86のパーティションリストと一緒です。\n\n問題の意味\nまず第一に、質問の意味を見てみましょう。質問の意味は、チェーンテーブルと整数xが与えられたとき、チェーンテーブルの要素にxに従った要件がマージされることを言うことです。

Jul 24, 2020 · 3 min read