私はOpenGL-ESを使ってアンドロイドで要素を描画するためにこれらの関数を使用します。最初にコンストラクタでバインドした後(つまり、GL10を使用しているため正しくバインドされています)、私はCreateProgram
関数を使用してプログラムを作成し、Drawを呼び出します。私は問題が描画機能にあると思います。誰でも私のミスが何であるか教えてくれますか?何も描画しない
PS:G10を使用していると言われているので、私はバッファのバインディングのコードを投稿しません。今はGL20を使いたいのですが、多分私が間違っていますが、静的関数を使用しているため、異なる質問やアンドロイド開発サイトのいくつかのページを読むことはOpenGL-ESが高速です。あなたはフラグメントシェーダの属性を持つことはできません
private final String vertexShader="" +
"attribute vec3 vertex; \n" +
"void main(){\n" +
" gl_Position=vertex;\n" +
"}";
private final String fragmentShader="" +
"attribute vec4 colors;\n" +
"void main(){\n" +
" gl_FragColor=colors;\n" +
"}";
public int LoadShader(String shader,int type){
int sha= GLES20.glCreateShader(type);
GLES20.glShaderSource(sha,shader);
GLES20.glCompileShader(sha);
return sha;
}
int program=0;
public void CreateGLProgram()
{
program=GLES20.glCreateProgram();
GLES20.glAttachShader(program,LoadShader(vertexShader,GLES20.GL_VERTEX_SHADER));
GLES20.glAttachShader(program,LoadShader(fragmentShader,GLES20.GL_FRAGMENT_SHADER));
GLES20.glLinkProgram(program);
}
public void DrawShader(){
GLES20.glUseProgram(program);
int vertex_handle=GLES20.glGetAttribLocation(program,"vertex");
GLES20.glVertexAttribPointer(vertex_handle,3,GLES20.GL_FLOAT,false,4,coordinatesbuff);
int frag_handle=GLES20.glGetAttribLocation(program,"colors");
GLES20.glVertexAttribPointer(frag_handle,4,GLES20.GL_FLOAT,false,4,colorbuffer);
GLES20.glDrawElements(GLES20.GL_TRIANGLES,indicies.length,GLES20.GL_UNSIGNED_SHORT,indiciesbuffer);
GLES20.glDisableVertexAttribArray(vertex_handle);
GLES20.glDisableVertexAttribArray(frag_handle);
}