我正在嘗試構建「OpenGL紅皮書」的第一個示例。 那麼,這只是我,還是他們的第三方LoadShaders壞了?OpenGL紅寶書 - LoadShaders壞了?
錯誤LNK2001:解析外部符號_LoadShaders
不知道該怎麼辦...
我正在嘗試構建「OpenGL紅皮書」的第一個示例。 那麼,這只是我,還是他們的第三方LoadShaders壞了?OpenGL紅寶書 - LoadShaders壞了?
錯誤LNK2001:解析外部符號_LoadShaders
不知道該怎麼辦...
添加LoadShaders.cpp,位於oglpg-8版/ lib目錄,你的項目/編譯。不過,祝你好運。一旦終於通過編譯和鏈接,我還沒有得到正確的例子。你會認爲他們會包含一些說明,而不僅僅是「這是代碼」。
我也有你所描述的同樣的問題...
您可以使用此作爲一個替代加載您的着色器!只需將頂點和片段着色器代碼放入main.cpp所在的文本文件中,然後實例化一個Shader對象並調用.LoadShader(vertexShaderFileName,fragmentShaderFileName);然後,
頁眉:
#pragma once
#include <vgl.h>
#include <string>
using namespace std;
class Shader
{
public:
Shader(void);
~Shader(void);
GLuint LoadShader(const char* vertPath, const char* fragPath);
private:
string ReadFile(const char* path);
};
CPP:
#include "Shader.h"
#include <iostream>
#include <fstream>
#include <vector>
Shader::Shader(void) {
}
Shader::~Shader(void) {
}
// read a file and return as a string
string Shader::ReadFile(const char* path) {
string content;
ifstream fileStream(path, ios::in);
if (!fileStream.is_open()) {
cerr << "File could not be opened" << endl;
return "";
}
string line = "";
while (!fileStream.eof()) {
getline(fileStream, line);
content.append(line + "\n");
}
fileStream.close();
return content;
}
GLuint Shader::LoadShader(const char* vertPath, const char* fragPath) {
//generate shader names
GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
//get shader src
string vertShaderStr = ReadFile(vertPath);
string fragShaderStr = ReadFile(fragPath);
const char* vertShaderSrc = vertShaderStr.c_str();
const char* fragShaderSrc = fragShaderStr.c_str();
GLint result = GL_FALSE;
int logLength;
//compile vertex shader
glShaderSource(vertShader, 1, &vertShaderSrc, NULL);
glCompileShader(vertShader);
glGetShaderiv(vertShader, GL_COMPILE_STATUS, &result);
glGetShaderiv(vertShader, GL_INFO_LOG_LENGTH, &logLength);
vector<char> vertShaderError(logLength);
glGetShaderInfoLog(vertShader, logLength, NULL, &vertShaderError[0]);
cout << &vertShaderError[0] << endl;
//compile fragment shader
glShaderSource(fragShader, 1, &fragShaderSrc, NULL);
glCompileShader(fragShader);
glGetShaderiv(fragShader, GL_COMPILE_STATUS, &result);
glGetShaderiv(fragShader, GL_INFO_LOG_LENGTH, &logLength);
vector<char> fragShaderError(logLength);
glGetShaderInfoLog(fragShader, logLength, NULL, &fragShaderError[0]);
cout << &fragShaderError[0] << endl;
//link the program
GLuint program = glCreateProgram();
glAttachShader(program, vertShader);
glAttachShader(program, fragShader);
glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &result);
glGetProgramiv(program, GL_INFO_LOG_LENGTH, &logLength);
vector<char> programError(logLength > 1 ? logLength : 1);
glGetProgramInfoLog(program, logLength, NULL, &programError[0]);
cout << &programError[0] << endl;
glDeleteShader(vertShader);
glDeleteShader(fragShader);
return program;
}
不明確的,你在這裏做什麼。顯然_LoadShaders不存在,沒有被鏈接,或者其他什麼。 – Robinson
正如http://www.glprogramming.com/red/?第一章和第一個例子? – Derek
更近期的版本不太容易上手。所有的贊成票都是荒謬的。下載的示例代碼不包括第1章和第2章。loadshaders.cpp和頭文件位於一個有趣的地方(我記得是lib目錄之一)。 –