1. ホーム
  2. java

[解決済み] GL エラー値 1285: メモリー不足

2022-02-19 06:13:45

質問

単純な四角形をいくつかの異なる方法でレンダリングしようとしています。

すべてが1つのクラスに格納されていると、とても簡単にできますね。 しかし、画面上に1つ以上のオブジェクトをレンダリングできるようにしたいので、コードを分解して、さまざまな機能の断片を別々のクラスに配置し始めています。 問題は、レンダリング機能を Entity クラスに置くと、エラーが発生することです。

これは、VertexArrayObjectクラスである関数です。

public void render(){
    glBindVertexArray(vaoID);
    glEnableVertexAttribArray(0);
    glEnableVertexAttribArray(1);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboiID);

    this.exitOnGLError("Before render");
    glDrawElements(GL_TRIANGLES, indicesCount, GL_UNSIGNED_BYTE, 0);
    this.exitOnGLError("After render");

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
    glDisableVertexAttribArray(0);
    glDisableVertexAttribArray(1);
    glBindVertexArray(0);

    this.exitOnGLError("error rendering vao");
}

繰り返しになりますが、私が行ったことは、これをメインクラスから、VAOを管理し、理論的にはレンダリングするクラスに移動させただけです。

エラー値1285を与えていて、エラーが発生したエラーコールは "After render" と書かれたものです。 exitOnGLError() はエラーチェック用メソッドです)。

1285エラーはどうやら"Out of memory"という意味らしいのですが、1メガバイトのイメージファイルを使用しているため、明らかに不合理で、4頂点のフロートバッファがVRAMをすべて埋め尽くしているとは考えにくいのですが...。

他にこのエラーの原因となるものはありますか?

解決方法は?

参考までに、私はこれと同じエラーを経験しました。それは、glBufferDataへの呼び出しを追加しなかったことが原因です。

glBufferData(GL_ARRAY_BUFFER, sizeof(GLSL_XYZNDUV_Item)*p->iNum_verts,p->pVerts,GL_STATIC_DRAW);

glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort)*p->iNum_tris*2,p->pIndices, GL_STATIC_DRAW);