gpt4 book ai didi

java - OpenGL "Invalid operation error"android 手机上的 glDrawElements 函数后

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:55:55 25 4
gpt4 key购买 nike

我无法在我的手机上运行我的应用程序,我找到了错误,但缺乏编程知识和英语来修复它。该应用程序在模拟器上运行完美,在 opengl 中没有任何代码错误。然而在电话上一切运行良好,没有任何错误,但没有显示我想要绘制的 opengl 元素。我在我的代码中几乎所有地方都添加了 glGetError,并发现在 glDrawElements 之后生成错误 1282,即 GL_INVALID_OPERATION

GL_INVALID_OPERATION 如果非零缓冲区对象名称绑定(bind)到 已启用的数组或元素数组和缓冲区对象的数据存储当前已映射。

GL_INVALID_OPERATION 如果 glDrawElements 在两者之间执行则生成 glBegin 和相应的 glEnd 的执行。

我的代码中没有 glBegin 或 glEnd,所以我猜问题出在我的索引缓冲区中。下面我向您展示了我对索引缓冲区的所有了解。

private ShortBuffer _indexBuffer;

public void onDrawFrame(GL10 gl) {
FramesPerSecond.StartCounter();
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

for (int i = 1; i <= 10; i++) {
gl.glLoadIdentity();
gl.glTranslatef(0.0f, -1f, -1.0f + -1.5f * i);

gl.glRotatef(-_xAngle, 1f, 0f, 0f);
gl.glRotatef(-_yAngle, 0f, 1f, 0f);
gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);
Log.e("Warning", " error code " +gl.glGetError());
}

我的对象初始化函数中的缓冲区代码:

    short[] indeksai = new short[] {
0, 1, 3,
0, 2, 1,
0, 3, 2,
1, 2, 3,
};

ByteBuffer ibb = ByteBuffer.allocateDirect(indeksai.length * 2);
ibb.order(ByteOrder.nativeOrder());
_indexBuffer = ibb.asShortBuffer();
_indexBuffer.put(indeksai);

这基本上就是我用这个缓冲区所做的一切。

关于surfaceCreated函数>>

public void onSurfaceCreated(GL10 gl, EGLConfig config) {

Log.i(LOG_TAG, "onSurfaceCreated()");
gl.glMatrixMode(GL10.GL_PROJECTION);
float ratio = _width / _height;
gl.glOrthof(-1, 1, -1 / ratio, 1 / ratio, 0.01f, 100.0f);
gl.glViewport(0, 0, (int) _width, (int) _height);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glEnable(GL10.GL_DEPTH_TEST);

gl.glClearColor(0f, 0f, 0f, 1.0f);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glFrontFace(GL10.GL_CCW);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
initTriangle(gl, context);
try {
loadGLTexture(gl);
} catch (IOException e) {
Log.w(LOG_TAG, "Texture fail");
}
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);


}

最佳答案

这很可能是因为您启用了 GL_COLOR_ARRAY 但实际上从未设置过 glColorPointer。尝试注释掉 gl.glEnableClientState(GL10.GL_COLOR_ARRAY); 行。

关于java - OpenGL "Invalid operation error"android 手机上的 glDrawElements 函数后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10710199/

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