2017-04-05 315 views
0

我有一個字節的緩衝區數組繪製像素緩衝區使用OpenGL的Android

static IntBuffer byteBuffer = BufferUtils.createIntBuffer(8300000); 

我投入了大量的像素之如下列:

byteBuffer.put(256) // ALPHA 
byteBuffer.put(150) // RED 
byteBuffer.put(152) // GREEN 
byteBuffer.put(23) // BLUE 
byteBuffer.put(152) // ALPHA 
... etc etc 

在實現GLSurfaceView.Renderer我的渲​​染類,我有這3種方法被覆蓋:

public void onDrawFrame(GL10 gl) { 
    gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1920, 1080, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, SocketActivity.byteBuffer); 
} 

public void onSurfaceChanged(GL10 gl, int width, int height) { 
    init(width, height); 
} 

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 

} 

我想rendera 1920x1080分辨率的大紋理,爲什麼我分配了8300000(1920 * 1080 * 4)。

但它沒有顯示任何東西。

+0

'glTexImage2D'加載紋理,它不繪製它。 – Vallentin

+0

那我怎麼裝之後呢裝呢? – DevAndroid

+1

[通過學習OpenGL ES開始](http://www.learnopengles.com/android-lesson-one-getting-started/) – Vallentin

回答

1

已解決!這是任何想要這樣做的人的命令。

init功能:

glViewport(GL_ZERO, GL_ZERO, width, height); 
glGenTextures(1, &idTexture); 
glBindTexture(GL_TEXTURE_2D, idTexture); 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, idTexture); 
glUseProgram(gProgram); 

draw功能:

glPixelStorei(GL_UNPACK_ALIGNMENT, 1); 
glTexImage2D(GL_TEXTURE_2D, GL_ZERO, GL_RGB, width, height, GL_ZERO, GL_RGB, GL_UNSIGNED_BYTE, buffer); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glVertexAttribPointer(position, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat), vertices); 
glVertexAttribPointer(inputTextureCoordinate, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat), vVertices); 
glEnableVertexAttribArray(gvPositionHandle); 
glEnableVertexAttribArray(inputTextureCoordinate); 
glUniform1i(baseMapLoc, GL_ZERO); 
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, indices); 

你看的想法。非常感謝所有啓發我的人。