VS2019 C++ 使用OpenGL调用SOIL库运行报错 编译代码没有错误 运行会报错 include和lib都调用了 64位也对应了的 链接器输入也加了SOIL.lib
源码如下:
#include <iostream>
#include <glad/glad.h>
#include <vector>
#include <SOIL.h>
using namespace std;
int main()
{
char hmFname[] = "noise.jpg";
int imgW, imgH, imgChannel;
if (hmFname == nullptr) {
return -1;
}
unsigned char* data = SOIL_load_image(hmFname, &imgW, &imgH, &imgChannel, 1);//1灰度图
GLuint numVertices = imgW * imgH;
GLuint numIndices = (imgW - 1) * (imgH - 1) * 6;
GLuint textureID;
/*Vector3* vertexs = new Vector3[numVertices];*/
vector<float> vertexs;
vector<float> indicess;
//Vector2* textureCoords = new Vector2[numVertices];
unsigned int* indices = new GLuint[numIndices];
int index1 = 0, index = 0;
float xrate = imgW / 2.0f;
float rrate = imgH / 2.0f;
if (data) {
for (int r = 0; r < imgH; r++)
{
for (int c = 0; c < imgW; c++)
{
//生成顶点数组, 坐标按照三角网格处理 GL_TRIGANLES
index1 = r * imgW + c;
vertexs.push_back((c - xrate) / xrate);
vertexs.push_back(data[index1] / 255.0f);
vertexs.push_back((r - rrate) / rrate);
//顶点颜色
vertexs.push_back(1.0f);
vertexs.push_back(0.0f);
vertexs.push_back(0.0f);
//纹理坐标
vertexs.push_back((c - xrate) / imgW);
vertexs.push_back((r - rrate) / imgH);
}
}
imgH -= 1;
int iW = imgW - 1;
for (int r = 0; r < imgH; r++)
{
for (int c = 0; c < iW; c++)
{
index1 = r * imgW + c;
index = (r + 1) * imgW + c;
indicess.push_back(index1);
indicess.push_back(index1 + 1);
indicess.push_back(index + 1);
indicess.push_back(index1);
indicess.push_back(index);
indicess.push_back(index + 1);
}
}
}
SOIL_free_image_data(data);
unsigned int VAO;
unsigned int VBO;
unsigned int EBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glGenBuffers(1, &EBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, vertexs.size() * sizeof(float), &vertexs[0], GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicess.size() * sizeof(unsigned int), &indicess[0], GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
// color attribute
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);
// texture coord attribute
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));
glEnableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
//textureID = loadTexture2(texName, GL_REPEAT, GL_REPEAT, GL_LINEAR_MIPMAP_LINEAR, GL_LINEAR);
//textureID = loadTexture(texName);
textureID = SOIL_load_OGL_texture("texture.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS);
return 0;
}
请问是什么问题