目前分類:OpenGL (4)

瀏覽方式: 標題列表 簡短摘要

本文以 OpenGL ES 範例 - GLSurfaceView 實作 與 影像播放器實作 - 使用 MediaCodec 類别 為基礎實作影像播放器 (不含聲音). MediaCodc 輸出影像至使用SurfaceTexture 類別建立之 Surface.

<<SurfaceTexture>>

建立 SurfaceTexture, 建構元需要傳入由 glGenTextures() 產生的 texturehandler. 再將 SurfaceTexture 傳入 Surface 建構元.

配置 SurafceTexture.OnFrameAvailableListener(), OnFrameAvailable() 將在 MediaCodec.releaseOutputBuffer() 後觸發.

if (id == R.id.action_play) {
// Create SurfaceTexture and set callback for frame update event triggered by
// MediaCodec releaseOutputBuffer()
if (surfaceTexture == null) {
surfaceTexture = new SurfaceTexture(glRenderer.getTextureHandle());
surfaceTexture.setOnFrameAvailableListener(this);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

Fragment shader 又稱為像素 (Pixel) 着色器.

本文使用像素着色器修改原始圖片 (纹理, Texture), 將圖片分成四個象限缩圖, 第一象限為原色, 其餘為過濾 R, G , B 後的输出.

<<像素着色器原始碼>>

private final String fragmentShaderCode =
"precision mediump float;" +
"uniform sampler2D texture;" +
"varying vec2 texCoordVar;" +
"void main() {" +
" vec4 texColor;" +
" vec2 position = texCoordVar;" +
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

着色器原始碼與程式執行時利用 glCompileShader() 编譯, 本文說明编譯着色器原始碼的除錯方式.

<<步驟>>

使用 glGetShaderiv() 與参數 GL_COMPILE_STATUS 取得着色器编譯结果.

使用 glGetShaderiv() 與参數 GL_INFO_LOG_LENGTH 取得錯誤訊息長度.

使用 glGetShaderInfoLog() 取得錯誤訊息.

<<原始碼>>

private static int loadShader(int type, String shaderCode) {
int shader;

shader = GLES20.glCreateShader(type);
文章標籤

版大 發表在 痞客邦 留言(0) 人氣()

本文提供 OpenGL ES 範例, 作業環境為 Ubuntu 14.04 LTS 使用 Android Studio 1.2.1.1. 原始碼可從 GitHub 下載.

 

<<原始碼>>

QR SampleOpenGL  

<<範例一>>

創建 GLSurfaceView 與 SampleGLRenderer 物件並填满绿色背景. SampleGLRenderer 類别為 .Renderer 的實作.

Commit:

https://github.com/ArtisteHsu/SampleOpenGL/commit/5a689950ee8eea33bd67a22ffb191fbf20f926cd

<<範例二>>

使用 OpenGL ES2.0 的 Vexter shader 與 Fragment shader 繪製三角型.

文章標籤

版大 發表在 痞客邦 留言(0) 人氣()