无论我尝试什么,我似乎都无法使四边形显示任何纹理,尝试在fragshader中使用纯色效果良好,尝试绘制渐变tex坐标效果良好。。当我引入一个采样器并尝试设置纹理时,它就不起作用了。。。下面附上了一些代码和调试细节
int width, height, nrChannels;
bool hasAlpha;
unsigned int refID;
glGenTextures(1, &refID);
glBindTexture(GL_TEXTURE_2D, refID);
// set the texture wrapping/filtering options (on the currently bound texture object)
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);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
unsigned char* data = stbi_load("C:\\Users\\shubhz\\source\\repos\\Lumigen\\assets\\textures\\dia.png", & width, & height, & nrChannels, 0);
bool has_alpha = (nrChannels > 3) ? true : false;
if (data) {
if (has_alpha)
glTexImage2D(refID, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
else
glTexImage2D(refID, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
Debug::log("Loaded Texture from :", " w: ", width, " h:", height, " alpha : ", has_alpha, " refID ", refID);
}
else {
//Failed to load texture
Debug::log("Failed to load texture : ");
}
//frees up the tempdata after upload
stbi_image_free(data);
app.initialize();
glUseProgram(Resources::GetShader("default-shader"));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, refID);
glUniform1i(glGetUniformLocation(Resources::GetShader("default-shader"), "texture1"), 0);
绘图部分:
void SceneRenderer::render(Mesh& _mesh, Material& _mat, glm::mat4 _modelMatrix)
{
glUseProgram(_mat.shader);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _mat.texture.refID);
glBindVertexArray(_mesh.VAO);
Shader::Mat4f(_mat.shader, "modelMatrix", _modelMatrix);
Shader::Vec4f(_mat.shader, "_MainColor", glm::vec4(0.2f, 0.3f, 0.5f, 1));
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
}
也打开了带有render doc的应用程序,在管道查看器中出现了一个奇怪的错误,显示Base_level 0中的无效维度,但我记录了宽度和高度,它们都很好