我試圖通過NDK與GLES 2.0畫畫,做一切,除了創造C++的表面,但沒有什麼是在屏幕上繪製......我想不出爲什麼。的Android NDK GLES 2.0沒有圖紙
我已經試過/驗證很多不同的事情,我仍然處於虧損狀態。
我最後的一些猜測是這些:
我的紋理都弄好了,現在與屏幕兼容:
我加載紋理是這樣的:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->GetPixels());
但默認GLSurfaceView格式是RGB_565
我試過這個沒成功:
mGLView.getHolder().setFormat(PixelFormat.RGBA_8888);
而且這樣的:
glTexImage2D(GL_TEXTURE_2D, 0, GL_UNSIGNED_SHORT_5_6_5, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->GetPixels());
可能紋理格式有什麼關係的問題?我沒有引用,因爲Android的SDK抽象這個完全消失..
這是我使用的着色器:
const char *vertexShader = "\
uniform mat4 uMtxProjection; \
uniform mat4 uMtxModelView; \
attribute vec2 aPosition; \
attribute vec2 aTexCoord; \
varying vec2 vTexCoord; \
void main() \
{ \
gl_Position = uMtxProjection * (uMtxModelView * vec4(aPosition.x, aPosition.y, 0.0, 1.0)); \
vTexCoord = aTexCoord; \
}";
const char *fragmentShader = "\
precision mediump float; \
varying vec2 vTexCoord; \
uniform sampler2D sTexture; \
void main() \
{ \
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); \
}";
進一步測試後,除去質地(只用紅色填充三角形),我可以看到一個扭曲的紅色框閃光每個應用程序運行時,則屏幕變爲空白=/
和鄰矩陣恰好3次:
Mat4 Ortho2D(float left, float right, float bottom, T top, float zNear, float zFar)
{
float dx = right - left;
float dy = top - bottom;
float dz = zFar - zNear;
// avoid division by zero
float tx = (dx != 0) ? -(right + left)/dx : 0;
float ty = (dy != 0) ? -(top + bottom)/dy : 0;
float tz = (dz != 0) ? -(zFar + zNear)/dz : 0;
return Mat4(2.0f/dx, 0, 0, tx,
0, 2.0f/dy, 0, ty,
0, 0, -2.0f/dz, tz,
0, 0, 0, 1);
}
從基礎開始。你的glClearColor是你期望的嗎?你的着色器加載沒有任何錯誤? – CaseyB 2011-04-29 01:50:38
是的。屏幕被正確地清除爲指定的顏色,並且着色器錯誤(或缺失)確實被打印到控制檯。我也證實了我的鄰矩陣函數產生了一個和glOrtho()相同的矩陣。 – bitwise 2011-04-29 01:57:49
實際上,我已經把紋理拿出了現在的等式,並簡單地用紅色填充三角形,現在,我得到了一些快速扭曲的紅色閃爍,但僅適用於前半秒的應用程序運行=/ – bitwise 2011-04-29 02:02:39