gpt4 book ai didi

c++ - Android NDK GLES 2.0 无绘图

转载 作者:太空狗 更新时间:2023-10-29 15:22:51 25 4
gpt4 key购买 nike

我正在尝试通过 NDK 使用 GLES 2.0 进行绘制,除了在 C++ 中创建表面之外,我正在尝试进行所有操作,但屏幕上没有绘制任何东西...而且我不明白为什么。

我已经尝试/验证了许多不同的事情,但仍然不知所措。

我最后的几个猜测是:

我的纹理现在以某种方式与屏幕兼容:

我这样加载纹理:

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);
}

最佳答案

实际上,我不确定到底发生了什么,但我改变了一些东西解决了问题 =/我尝试返回代码以重新破解它,但不能..

但作为引用,我不能保证什么地方坏了,但我可以肯定地说,问题既不是纹理,也不是着色器。即使默认表面 View 设置为 RGB_565,使用以下行在 NDK 中创建一个纹理, 工作 alpha。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->GetPixels());

我使用的投影矩阵也很好,因为我直接从 openGL 规范中复制了它。

我在工作时注意到调用 glEnable(TEXTURE_2D) 导致错误(无效枚举),因为它与 opengl 的固定功能管道有关,并且我使用的是 GLES2.0...并且我正在复制我的一些来自固定功能实现 GLES1 的旧代码。所以我能想到的就是我用旧代码导致 gl 以某种方式崩溃 =/

关于c++ - Android NDK GLES 2.0 无绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com