簡體   English   中英

使用OpenGL ES着色器進行Android測試

[英]Android test with OpenGL ES Shaders

我編寫了一個測試類,只應該將應用程序圖標繪制到屏幕上。 到目前為止沒有運氣。 我做錯了什么?

public class GLTester
{


void test(final Context context)
{
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inScaled = false;
    bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon, options);

    setupGLES();
    createProgram();
    setupTexture();
    draw();
}


void draw()
{
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    glUseProgram(glProgramHandle);

}
}

有幾件事。

我認為你的squareVertices緩沖區應該包含4個vec3s。 但你的着色器是為vec4s設置的。 也許這沒關系,但對我來說似乎很奇怪。

您也沒有使用glFrustum或glOrtho設置任何類型的透視矩陣,也沒有使用Matrix.setLookAtM等設置任何類型的視圖矩陣。 您應該始終考慮保持頂點管道。 從本講座看幻燈片2 https://wiki.engr.illinois.edu/download/attachments/195761441/3-D+Transformational+Geometry.pptx?version=2&modificationDate=1328223370000

我認為正在發生的事情是你的squareVertices正在通過這個管道並在另一側作為像素坐標出現。 因此,您的圖像可能是屏幕一角的非常小的圖像,因為您使用的是從-1.0到1.0的頂點。

作為一個無恥的旁注,我在SourceForge上發布了一些代碼,可以在資源文件夾中的文件中處理和加載着色器,而不必在.java文件中作為字符串進行處理。 https://sourceforge.net/projects/androidopengles/ Theres是一個使用此着色器助手的文件部分中的示例項目。

我希望這漫無邊際的某些部分很有幫助。 :)

它看起來很不錯,但我發現有一件事你在setupTexture中調用glUniform,而着色器不是當前綁定的。 你應該在調用glUseProgram后調用glUniform。

我不知道這是不是問題,因為我猜它可能默認為0,但我不確定。

除此之外,你應該熟悉調用glGetError來檢查是否有任何錯誤條件未決。

此外,在創建着色器時,習慣用glGetShader(GL_COMPILE_STATUS)檢查其成功狀態,如果編譯失敗則檢查glGetShaderInfoLog,對於具有glGetProgram / glGetProgramInfoLog的程序也類似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM