我正在開發基於Qt 5.4的Android系統應用程序。 我正在生成幾個OES紋理,並通過着色器在Qt FBO TEXTURE_2D
中進行渲染。每個OES紋理都有自己的eglcontext,每個人都有相同的sharedContext。 OES紋理是一個接一個地使用的,我的意思是,我不想同時渲染多個紋理,但是我需要創建多個紋理,因爲我必須能夠同時渲染多個紋理未來。opengl es,glActiveTexture時出錯
這是我使用的代碼時,我必須更新:
m_program->bind();
glActiveTexture(GL_TEXTURE0 + textureId);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);
/* my code to fill shader attr and glDraw*() */
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
m_program->release();
的問題是,由於某種原因,我可以使創建的第一個OES質地,因爲我得到一個W/Adreno-ES20(28468): <core_glActiveTexture:348>: GL_INVALID_ENUM
嘗試時glActiveTexture第二個。所以,目標紋理填充黑色。
我已經檢查了這一切,並是正確的:
- textureId調用eglCreateContext時
- sharedContext。
- 當前eglContext呈現時,我的意思是,當調用上面的 代碼時。
- 二OES質地已經充滿
- GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 16
- GL_MAX_TEXTURE_IMAGE_UNITS 16
- GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 32
我有點失落,我不知道我這是一個限制或錯誤我的代碼。
有什麼想法?
編輯:在其他設備嘗試,應用程序正常工作,所以我認爲這個問題是關於設備的限制..
既然你說第二個調用已經報告了一個錯誤,你可以嘗試硬編碼第二個GL_TEXTURE1。如果這有效,那麼你的textureId有一個奇怪的值,或者GL_TEXTURE1在你的情況下不等於GL_TEXTURE0 + 1。如果這些工作可以通過包裝紋理ID來創建解決方法,則創建另一個自定義自動增量ID,然後在包含GL_TEXTUREX枚舉的某個訪問表上使用該ID。 –
@MaticOblak由於某種原因,生成的textureIds不是一個一個的,我正在檢查它的3個紋理來渲染和數字是:(oesTextureId 23)(oesTextureId 45)(oesTextureId 61) –
所以這似乎是問題,然後。你可能永遠不會認爲這些ID將是連續的,或者甚至以0或任何其他低值開始。你是否仍然堅持要做什麼,或者你是否理解生成自己的自動增量活動紋理ID的概念? –