我使用OpenTK來處理我的體素遊戲引擎。一切工作正常使用x86作爲平臺的目標,但一旦我切換到64位構建我的網格都亂碼。我將其縮小到GL.BufferSubData--只要我每個VAO上傳一個塊網格(顯然位置0),世界呈現良好,但是一旦我添加更多網格(顯然,位置0處的而不是)到VAO的毛刺開始 - 對我來說,它看起來非常像新的網格覆蓋以前上傳的網格。GL.BufferSubData與64位版本不正確工作
這裏是我如何上傳我的頂點,索引,rgbas和指標:
GL.BindBuffer(BufferTarget.ArrayBuffer, vao.xyzVboId);
GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)data.xyzOffset, sizeof(float) * data.XyzCount, data.xyz);
GL.BindBuffer(BufferTarget.ArrayBuffer, vao.uvVboId);
GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)data.uvOffset, sizeof(float) * data.UvCount, data.uv);
GL.BindBuffer(BufferTarget.ArrayBuffer, vao.rgbaVboId);
GL.BufferSubData(BufferTarget.ArrayBuffer, (IntPtr)data.rgbaOffset, sizeof(byte) * data.RgbaCount, data.rgba);
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
GL.BindBuffer(BufferTarget.ElementArrayBuffer, vao.vboIdIndex);
GL.BufferSubData(BufferTarget.ElementArrayBuffer, (IntPtr)data.indicesOffset, sizeof(int) * data.indicesCount, data.indices);
GL.BindBuffer(BufferTarget.ElementArrayBuffer, 0);
內部我跟蹤的數據量(vertexPosition,indexPosition),並設置相應的xyzOffset,uvOffset,rgbaOffset和indicesOffset到插入頂點和索引的數量。
顯然,我的偏移量有點不對?但這怎麼可能呢?
[編輯:]無論gDebugger也不對GL.GetError查詢()顯示任何錯誤
[EDIT2:]這部分代碼已經運行在過去的幾個月很穩定,所以我不懷疑任何失誤建設不相關的64位
[EDIT3:]我是如何初始化VBO例
GL.BufferData(BufferTarget.ArrayBuffer, xyzCount, IntPtr.Zero, BufferUsageHint.StaticDraw);
[Edit4:]我已經通過我的代碼也梳理,如果我做任何不安全的異國指針運算,我找不到任何
[Edit5:]截圖:http://imgur.com/a/YnVYZ
[Edit6:]這是我的集成GPU(英特爾HD4000)發生的事情,如果我告訴NVIDIA用我的GT630M屏幕閃爍一堆的時間和我的比賽只是用力以某種方式退出。第一次發生NVIDIA給我的錯誤信息「錯誤很多,」
在你初始化時,不應該是xyzCount * sizeof(float)嗎?另外,檢查你的代碼是否應該是sizeof(int)或類似的sizeof(IntPtr)。此外,計算偏移量的代碼會很有用,而且,您應該嘗試從nvidia驅動程序獲取一些控制檯輸出,它會在說出「太多錯誤」之前告訴您什麼是錯誤的。 – karyon
非常感謝@karyon,你的要求,看看我如何計算我的偏移量,讓我學習我的代碼更多,並得出解決方案。 – Tyron