2012-11-08 75 views
3

我已初始化glewInit()和其他任何openGL的東西。所有在我做任何這些電話之前。glMapBuffer不斷返回0x00000000

glGenBuffers(1, &m_uiVertBufferHandle); 
    glBindBuffer(GL_ARRAY_BUFFER, m_uiVertBufferHandle); 
    glBufferData(GL_ARRAY_BUFFER, 0, 0, GL_READ_WRITE); 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 

這是我創造我的緩衝物II做了glBufferData因爲我在你沒有任何的存儲空間可言,如果你不把它至少一次,這將使glMapBuffer總是openGL的文章都讀給你0x00000000。

後來我打電話glMapBuffer讓我的存儲位置,開始保存數據 當我使用glMapBuffer我這樣稱呼它

void* buffer1; 
glBindBuffer(GL_ARRAY_BUFFER, m_uiVertBufferHandle); 

//make sure our buffer excists 
buffer1 = glMapBuffer(GL_ARRAY_BUFFER, GL_READ_WRITE); 

我總是在我的緩衝器1獲得00000000。爲什麼是這樣?我唯一能找到的兩個原因是我沒有正確初始化glewInit,而且我沒有至少調用一次glBindBufferData。

+0

解決方案[沒有得到你喜歡的答案](http://stackoverflow.com/questions/13281508/glmapbuffer-returns-0x00000000-constantly)不是刪除你的舊問題,而是再次提問。只是FYI。 –

+0

@NicolBolas取決於是否有人濫用系統的回答 – user3728501

回答

4
glBufferData(GL_ARRAY_BUFFER, 0, 0, GL_READ_WRITE); 

​​是not a valid usage for buffer objects。你使用映射,而不是緩衝區對象的用法。使用參數是GL_STATIC_DRAW之類的東西,或者更適合您的「讀/寫」情況,GL_DYNAMIC_READ

因爲你傳遞了一個無效的枚舉,OpenGL給了你一個GL_INVALID_ENUM錯誤並且未能執行這個命令。而且,0長度的緩衝區對象對於緩衝區的存儲來說不是合理的大小。有時試試new int[0]malloc(0),看看會發生什麼。

請停止allocating miniscule or non-existent sizes of data.分配4096個字節,如果你真的想測試這個。

+0

是的!非常感謝你:D。如此多的枚舉和枚舉聽起來很相似,並且對於相同的函數來說是枚舉,而O_O的措辭略有改變。非常感謝! –

2

您將0作爲緩衝區的大小傳遞給glBufferData。這意味着OpenGL實現不知道緩衝區的大小(即使是理論值),也不知道如何映射這個零大小的緩衝區。

使用非零值作爲尺寸和NULL作爲數據指針,即:

glBufferData(GL_ARRAY_BUFFER, SizeOfTheBuffer, NULL, GL_READ_WRITE); 

P.S.​​不是緩衝區對象的有效用法。

+0

我將其更改爲 glBufferData(GL_ARRAY_BUFFER,sizeof(int),NULL,GL_READ_WRITE); 即時只是試圖創建我的存儲空間開始。就這樣我可以有我的緩衝區對象的存儲空間。 我試着做你說的通過把某種大小即時仍然獲得0x00000000我的空*緩衝區1 –

+1

GL_READ_WRITE不是緩衝區對象的有效用法。 –