人造人.NDK.OpenGLES2.神秘地无法绘制
Android. NDK. OpenGLES2. Mysteriously not working drawing
这里有一些神秘的问题。
// There are in global space
VertexBufferGLES2 vb(true);
IndexBufferGLES2 ib(true);
...
// Initialization
vb.Create(sizeof(tris), tris, USAGE_STATIC_);
ib.Create(sizeof(indices), indices, USAGE_STATIC);
...
glBindBuffer(GL_ARRAY_BUFFER, vb.GetVertexBufferGLES2());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib.GetIndexBufferGLES2());
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (GLvoid *)0);
在这种情况下,一切都可以完美运行,但是使用下面的代码,什么都不是绘图。
// There are in global space
VertexBufferGLES2 *vb = NULL;
IndexBufferGLES2 *ib = NULL;
...
// Initialization
vb = new VertexBufferGLES2(true);
ib = new IndexBufferGLES2(true);
vb->Create(sizeof(tris), tris, USAGE_STATIC_);
ib->Create(sizeof(indices), indices, USAGE_STATIC);
...
glBindBuffer(GL_ARRAY_BUFFER, vb->GetVertexBufferGLES2());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ib->GetIndexBufferGLES2());
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, (GLvoid *)0);
...
delete vb;
delete ib;
所有其他代码都是相同的。只有这两段代码不同。我已经三天在等待修复,但什么也没找到,因为这段代码在逻辑上是如此明显和逻辑上相同,一定是......
问题解决了:在函数"create"中,我在从"create"函数参数为其赋值之前使用成员变量(enum)。在第一种情况下,编译器将此变量初始化为 0,这对于代码来说是正确的(因为这是第一个枚举值),并且一切正常。在第二种情况下,编译器不初始化变量,因为类是在堆上创建的,其中变量是垃圾。
我的错误在于这段代码:
int VertexBufferGLES2::Create(int size, void *data, USAGE_ usage)
{
if (size == 0) return -1;
Delete();
m_size = size;
glGenBuffers(1, &m_buffer);
glBindBuffer(GL_ARRAY_BUFFER, m_buffer);
// The function GetGLES2Usage() is mapping my m_usage enum to
// OpenGL ES 2 enum
glBufferData(GL_ARRAY_BUFFER, size, data, GetGLES2Usage());
// but the value to m_usage i assign here. Moving up (to above
// glBufferData line) this code line solves the problem
m_usage = usage;
if (m_useCache) CacheData(size, data);
return 0;
}
行
VertexBufferGLES2 vb = NULL;
IndexBufferGLES2 ib = NULL;
看起来很可疑,也许你应该尝试一下
VertexBufferGLES2* vb = NULL;
IndexBufferGLES2* ib = NULL;
相关文章:
- 如何使用ndk-build.cmd构建Android.so文件
- Android NDK传感器向事件队列报告奇怪的间隔
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 如何在QT中的自定义视频小工具t上绘制矩形
- Android NDK 编译 LAME HAVE_MPGLIB > 'interface.h' 文件未找到
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- NDK:如何通过ndkr15c包含"RefBase.h"?
- SFML 文本未绘制在窗口上
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 为什么使用 NDK 不能存在不同的 stl 实现?
- 获取位于安卓工作室中可绘制的图像的绝对路径,用于NDK项目
- 图像绘制使用NDK显示轮廓
- 人造人.NDK.OpenGLES2.神秘地无法绘制
- Android NDK中的OpenGL ES 2.0:没有绘制任何内容