Android OpenGL ES 3.0 在按钮单击时更新 VBO 数据?
有没有办法动态绘制网格。 就像按下按钮一样,将新的浮点数组发送到 openGL ES 30 VBO。 目前我在 Native C++ 中绘制矩形和三角形 STATIC 它们是可见的,但是当我使用 JNI 从 java 传递三角形数组时。我收到一个错误
在没有当前上下文的情况下调用 OpenGL ES API(每个线程记录一次)
本机 C++。
GLuint fvao, bvao;
GLuint VBO[2];
void setupBuffers() {
glGenVertexArrays(1,&bvao);
glBindVertexArray(bvao);
glGenBuffers(1, &VBO[0]);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(rect), rect, GL_STATIC_DRAW);
.
.
.
// Triangle --------------------------------------
glGenVertexArrays(1,&fvao);
glBindVertexArray(fvao);
glGenBuffers(1, &VBO[1]);
glBindBuffer(GL_ARRAY_BUFFER, VBO[1]);
glBufferData(GL_ARRAY_BUFFER, 0, nullptr, GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(0); // pos
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(0 * sizeof(GLfloat)));
glEnableVertexAttribArray(1); // color
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(2); // texture
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat)));
glBindVertexArray(0); //Unbind VAO
}
// UPDATE -----------------------
void updateBuffer(float triangle[]) {
glBindBuffer(GL_ARRAY_BUFFER, VBO[1]); //Bind array for OpenGL to use
glBufferData(GL_ARRAY_BUFFER, sizeof(triangle), triangle, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
// update Buffer JNI
extern "C" JNIEXPORT void JNICALL
Java_com_test_nativetest_GL3JNILib_update(JNIEnv * env, jclass obj, jfloatArray triangle)
{
updateBuffer(triangle);
}
如果有人可以告诉我我遗漏了什么或做错了什么。任何帮助将不胜感激。
Is there any way to draw mesh dynamically.
like on press of a button send new float array to openGL ES 30 VBO.
currently i draw both rectangle and triangle STATIC in Native C++ they are visible, But when i pass triangle array from java using JNI. I got an error
call to OpenGL ES API with no current context (logged once per thread)
Native C++.
GLuint fvao, bvao;
GLuint VBO[2];
void setupBuffers() {
glGenVertexArrays(1,&bvao);
glBindVertexArray(bvao);
glGenBuffers(1, &VBO[0]);
glBindBuffer(GL_ARRAY_BUFFER, VBO[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(rect), rect, GL_STATIC_DRAW);
.
.
.
// Triangle --------------------------------------
glGenVertexArrays(1,&fvao);
glBindVertexArray(fvao);
glGenBuffers(1, &VBO[1]);
glBindBuffer(GL_ARRAY_BUFFER, VBO[1]);
glBufferData(GL_ARRAY_BUFFER, 0, nullptr, GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(0); // pos
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(0 * sizeof(GLfloat)));
glEnableVertexAttribArray(1); // color
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(2); // texture
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat)));
glBindVertexArray(0); //Unbind VAO
}
// UPDATE -----------------------
void updateBuffer(float triangle[]) {
glBindBuffer(GL_ARRAY_BUFFER, VBO[1]); //Bind array for OpenGL to use
glBufferData(GL_ARRAY_BUFFER, sizeof(triangle), triangle, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
// update Buffer JNI
extern "C" JNIEXPORT void JNICALL
Java_com_test_nativetest_GL3JNILib_update(JNIEnv * env, jclass obj, jfloatArray triangle)
{
updateBuffer(triangle);
}
If anyone can tell me what i am missing or doing wrong. Any help would be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论