前幾天我應用最新的Windows 8.1更新到我的筆記本電腦,當重新啓動作爲過程的一部分,我得到了藍屏,我也是如此,當我試圖手動重新啓動等。最後,我必須進行部分重置(它會刪除任何Windows認定爲應用程序但保留您的數據完好無損),因爲我不能丟失數據。OpenGL紋理不
之前,我的代碼顯示紋理和動畫模型的工作,但之後,我從我的GLSL編譯器,因爲不贊成使用的關鍵字,從我的新錯誤。當這些問題得到解決時,我的程序不會顯示紋理,而是隻顯示黑色的所有內容。
我有2個較老的項目使用相同的glsl代碼,他們也有同樣的問題(雖然他們在着色器中沒有任何棄用的關鍵字)。
代碼像這樣工作〜2小時之前我做了更新。
正在初始化:
void TestWindow::initialize()
{
initSkybox();
initVAO();
initVBO();
m_program = new QOpenGLShaderProgram(this);
m_program->addShaderFromSourceFile(QOpenGLShader::Vertex ,"../Qt_Flyff_1/Simple_VertexShader.vert");
m_program->addShaderFromSourceFile(QOpenGLShader::Fragment ,"../Qt_Flyff_1/Simple_FragmentShader.frag");
m_program->link();
qDebug("log: %s",m_program->log().toStdString().c_str());
m_posAttr = m_program->attributeLocation("position");
m_texPos = m_program->attributeLocation("texcoord");
m_colorUniform = m_program->uniformLocation("color");
m_matrixUniform = m_program->uniformLocation("matrix");
int asdf=m_program->uniformLocation("tex");
GLuint tex;
glGenTextures(1, &tex);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex);
QImage img("../skybox01_big.png");
glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, img.width(), img.height(), 0, GL_BGRA, GL_UNSIGNED_BYTE, img.bits());
glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glEnable(GL_DEPTH_TEST);
// glEnable(GL_CULL_FACE);
glClearColor(0.5,0.5,0.5,1.0);
m_program->setUniformValue(asdf,0);
}
頂點着色器:
#version 400 core
uniform mediump mat4 matrix;
uniform mediump vec3 color;
in vec4 position;
in vec2 texcoord;
out vec3 Color;
out vec2 Texcoord;
void main()
{
Color = color;
Texcoord = texcoord;
gl_Position = matrix*position;
}
片段着色器:
#version 400 core
in vec3 Color;
in vec2 Texcoord;
out vec4 outColor;
uniform sampler2D tex;
void main()
{
outColor = texture(tex, Texcoord) * vec4(Color, 1.0);
}
我也比我的代碼,以各種教程,但沒有找到任何區別。
當簡單地使用「outColor = vec4(Color,1.0)」時,我的模型完全像預期的那樣變白,並且在以顏色顯示紋理座標時,我也可以得到預期的結果。
萬一重要我的筆記本電腦有GeForce GT 740M。
我會開始一些錯誤檢查ING。我不使用Qt,但是'img'可能無效而無效?你也可以檢查'asdf'在調用'QOpenGLShaderProgram :: uniformLocation'之後保持適當的統一位置。 – gmbeard 2015-01-20 22:10:57
你的筆記本電腦是否也有英特爾高清集成GPU?更新後,我的筆記本電腦默認開始使用它,而不是使用Nvidia GPU,它給我帶來了同樣奇怪的錯誤。 (如果您想知道,可以在Nvidia控制面板中設置默認的GPU - >管理3D設置。) – Jerem 2015-01-20 23:44:31
@Jerem你有點解決了這個問題,我的筆記本電腦有「英特爾(R)高清顯卡4000」,但是在使用Nvidia顯卡時不用工作,只有在選擇「集成顯卡」作爲首選GPU時纔有效。根據我的理解,Nvidia GPU可以帶來更好更快的結果,所以我仍然在思考問題出在哪裏。 – Mognakor 2015-01-21 11:12:08