0
我有圖像數據的std::container
中的格式:OpenGL的上傳像素數據*浮點格式(C++)
struct C
{
float r;
float g;
float b;
float a;
}
所以它看起來像:
std::vector<C> colours(width*height);
其中寬度和高度是我的形象的大小。
現在,我想把它推入OpenGL中的紋理。
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA,GL_FLOAT,colours.data());
(存在總共是6,一個用於我的立方體貼圖的每一側上。寬度和高度也是相同的所要求的立方貼圖)。
但我得到一個黑色的紋理。 GLIntercept沒有給我提示任何問題。
因此,審查https://www.opengl.org/sdk/docs/man/docbook4/xhtml/glTexImage2D.xml後,我認爲我應該稱它想:
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X,0,GL_RGBA8,width,height,0,GL_RGBA32F,GL_FLOAT,colours.data());
的變化在於我表明我的像素數據是32位的花車,以及每像素有4。
但是,這也給我一個黑色的紋理,以及GLIntercept告訴我這個電話正在產生一個GL_INVALID_ENUM
。
查看相同的文檔告訴我,glTexImage2D
將導致GL_INVALID_ENUM
在某些條件下,我沒有遇到過。
基本上,我只是想讓我的4個浮動容器變成紋理。
不,不是的,那不是。你說得對,我有'internalFormat'和'format'混淆。但是這並沒有解決它。據我瞭解,'internalformat'並不重要,因爲OpenGL會將我發送的任何*轉換成*格式。它是'GL_RGBA'的格式,表示將會有4個組件,而'type'表示每個組件將是'GL_FLOAT'。仍然不知道我在做什麼錯... – NeomerArcana 2015-04-06 10:13:45
實際上'internalformat'定義了OGL如何在內部存儲texels,'format'定義了輸入紋素數據的格式。在OGL ES 2.0'internalformat'中的BTW必須與'format'相等,所以也許你應該爲'internalformat'和'format'使用'GL_RGBA32F'。 – tonso 2015-04-06 10:45:39
該文檔明確指出了選項,這不是常規OpenGL的選項之一。我相信我找到了答案,但我現在正在調試。我認爲問題是在早期階段;與上述無關。 – NeomerArcana 2015-04-06 10:50:16