【发布时间】:2015-03-21 17:59:21
【问题描述】:
我第一次遇到这个问题,今天之前一切正常。在我看来,问题出在内存管理或类似问题上。
我将所有 opengl 代码压缩在一个类中,我从主窗口循环调用该类。还是一样的错误。
public class renderTest
{
public float[] vertices(int x, int y, int z)
{
float vertices[] =
{
//...
};
return vertices;
}
public final int[] indices =
{
//...
};
public Model model;
public renderTest()
{
this.model = loadToVAO(vertices(0, 0, -5), indices);
}
public void render(Model model)
{
glBindVertexArray(model.getVaoID());
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glDrawElements(GL_QUADS, model.getVertexAmount(), GL_UNSIGNED_INT, 0); // <<< FATAL ERROR HERE
glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, 0); // <<< OR HERE
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindVertexArray(0);
}
public Model loadToVAO(float[] vertices, int [] indices)
{
int vaoID = create();
bindIndicesBuffer(indices);
storeDataInAttributeList(0, vertices, 3);
//storeDataInAttributeList(1, textureCoords, 2);
unbind();
return new Model(vaoID, indices.length);
}
private int create()
{
int ID = glGenVertexArrays();
glBindVertexArray(ID);
return ID;
}
private void storeDataInAttributeList(int attributeNumber, float[] data, int coordinateSize)
{
int vboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboID);
FloatBuffer buffer = storeDataInFloatBuffer(data);
glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
glVertexAttribPointer(attributeNumber, coordinateSize, GL_FLOAT, false, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
private FloatBuffer storeDataInFloatBuffer(float[] data)
{
FloatBuffer buffer = BufferUtils.createFloatBuffer(data.length);
buffer.put(data);
buffer.flip();
return buffer;
}
private IntBuffer storeDataInIntBuffer(int[] data)
{
IntBuffer buffer = BufferUtils.createIntBuffer(data.length);
buffer.put(data);
buffer.flip();
return buffer;
}
private void bindIndicesBuffer(int[] indices)
{
int vboID = glGenBuffers();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboID);
IntBuffer buffer = storeDataInIntBuffer(indices);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
}
private void unbind()
{
glBindVertexArray(0);
}
}
Java 运行时环境检测到致命错误:
PC=0x0000000055cdb5c0, pid=5200, tid=4540 处的 EXCEPTION_ACCESS_VIOLATION (0xc0000005)
JRE 版本:Java(TM) SE 运行时环境 (8.0_40-b26)(内部版本 1.8.0_40-b26)
Java VM:Java HotSpot(TM) 64 位服务器 VM(25.40-b25 混合模式 windows-amd64 压缩 oops)
有问题的框架: C [atio6axx.dll+0x23b5c0]
无法写入核心转储。默认情况下,在 Windows 的客户端版本上不启用小型转储
崩溃发生在 Java 虚拟机之外的本地代码中。 请参阅有问题的框架以了解报告错误的位置。
【问题讨论】:
-
您使用的是哪个版本的 LWJGL?
-
2.9.1,我试试 lwjgl 3。
-
请注意 LWJGL 3 使用全新的窗口系统 (GLFW),因此如果您之前从未使用过它,可能需要一段时间才能适应。另请参阅my answer to another question。
-
是的,因此我安装了最终的 lwjgl 2 build (2.9.3),但没有任何改变。
-
我不知道该怎么办。
标签: java render lwjgl fatal-error