OpenGL红皮书-LoadShaders已损坏
OpenGL Redbook - LoadShaders broken?
我正在尝试构建"OpenGL红皮书"的第一个示例。好吧,是只有我,还是他们的第三方LoadShader坏了?
错误LNK2001:未解析的外部符号_LoadShaders
不知道该怎么办…
将位于oglpg-8th-edition/lib中的LoadShaders.cpp添加到您的项目/编译中。不过,祝你好运。一旦最终完成了编译和链接,我还没有让这个例子正常工作。你可能会认为它们会包含一些说明,而不仅仅是"这是代码"。
很抱歉回复延迟,我解决LNK2001错误的方法是将文件本身作为我的VS解决方案的一部分
我也遇到了与您描述的相同的问题。。。
您可以将其用作加载着色器的变通方法!
参数与本书不同,但它会起作用,只需将顶点和片段着色器代码放入main.cpp所在的文本文件中,然后实例化一个着色器对象并调用.LoadShader(vertex ShaderFileName,fragmentShaderFileNName);
标题:
#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;
}
相关文章:
- 如何确定我已使用非编码文件到达 EOF?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 嵌入方指针压缩已禁用
- 如何用参数值调用函数(仅在运行时已知)
- 为什么示例代码访问IUnknown中已删除的内存
- 引用一个已擦除类型(void*)的指针
- 类的C++属性似乎已重新初始化
- 无法删除指针,已触发断点
- 'operator='已弃用:改用 QDir::setPath()
- 现代CMake(3.8+)-FindCUDA已弃用,非.cu文件呢
- 如何正确地将分支添加到已存在的树中
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 为什么C中的通用链表中存储的数据已损坏
- 链表c++插入,所有情况都已检查,但没有任何工作
- 已修改的LinkedList未在文本文件本身中更新
- 对已具有设定值的整数变量的加法
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 根据变量使Qt UI中的复选框为已选中/未选中
- 如何将分支添加到已存在的TTree:ROOT
- OpenGL红皮书-LoadShaders已损坏