Я пытаюсь рисовать с помощью GLES 2.0 через NDK, делаю все, кроме создания поверхности в C ++, но на экране ничего не рисует ... И я не могу понять, почему.
IЯ пробовал / проверял много разных вещей и все еще в замешательстве.
мои последние несколько предположений таковы:
мои текстуры как-то теперь совместимы с экраном:
Iзагрузить текстуры, как это:
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);
}