You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
4.0 KiB
153 lines
4.0 KiB
#include <GL/glew.h> |
|
#include <GLFW/glfw3.h> |
|
#include <iostream> |
|
#include <string> |
|
#include <fstream> |
|
|
|
using namespace std; |
|
|
|
void printShaderLog(GLuint shader) { |
|
int len = 0; |
|
int chWrittn = 0; |
|
char *log; |
|
glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &len); |
|
if (len > 0) { |
|
log = (char *) malloc(len); |
|
glGetShaderInfoLog(shader, len, &chWrittn, log); |
|
cout << "Shader Info Log: " << log << endl; |
|
free(log); |
|
} |
|
} |
|
|
|
void printProgramLog(int prog) { |
|
int len = 0; |
|
int chWrittn = 0; |
|
char *log; |
|
glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &len); |
|
if (len > 0) { |
|
log = (char *) malloc(len); |
|
glGetProgramInfoLog(prog, len, &chWrittn, log); |
|
cout << "Program Info Log: " << log << endl; |
|
free(log); |
|
} |
|
} |
|
|
|
bool checkOpenGLError() { |
|
bool foundError = false; |
|
int glErr = glGetError(); |
|
while (glErr != GL_NO_ERROR) { |
|
cout << "glError : " << glErr << endl; |
|
foundError = true; |
|
glErr = glGetError(); |
|
} |
|
return foundError; |
|
} |
|
|
|
string readShaderSource(const char *filePath) { |
|
string content; |
|
ifstream fileStream(filePath, ios::in); |
|
string line = ""; |
|
while (!fileStream.eof()) { |
|
getline(fileStream, line); |
|
content.append(line + "\n"); |
|
} |
|
fileStream.close(); |
|
return content; |
|
} |
|
|
|
using namespace std; |
|
|
|
#define numVAOs 1 |
|
|
|
GLuint renderingProgram; |
|
GLuint vao[numVAOs]; |
|
float x = 0.0f; |
|
float inc = 0.01f; |
|
|
|
GLuint createShaderProgram() { |
|
|
|
const char *vshaderSource = readShaderSource("../tri.vert").c_str(); |
|
// const char *vshaderSource = "#version 430 \n" |
|
// "\n" |
|
// "void main(void)\n" |
|
// "{\n" |
|
// " if (gl_VertexID == 0) gl_Position = vec4( 0.25, -0.25, 0.0, 1.0);\n" |
|
// "else if (gl_VertexID == 1) gl_Position = vec4(-0.25, -0.25, 0.0, 1.0);\n" |
|
// " else gl_Position = vec4( 0.25, 0.25, 0.0, 1.0);}"; |
|
// cout<<vshaderSource; |
|
const char *fshaderSource = readShaderSource("../firstvert.vert").c_str(); |
|
// cout<<fshaderSource; |
|
GLuint vShader = glCreateShader(GL_VERTEX_SHADER); |
|
GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER); |
|
|
|
glShaderSource(vShader, 1, &vshaderSource, NULL); |
|
glShaderSource(fShader, 1, &fshaderSource, NULL); |
|
|
|
printShaderLog(vShader); |
|
printShaderLog(fShader); |
|
|
|
glCompileShader(fShader); |
|
glCompileShader(vShader); |
|
|
|
cout<<"on vShader"; |
|
printShaderLog(vShader); |
|
cout<<"on fShader"; |
|
printShaderLog(fShader); |
|
|
|
GLuint vfProgram = glCreateProgram(); |
|
glAttachShader(vfProgram, vShader); |
|
glAttachShader(vfProgram, fShader); |
|
glLinkProgram(vfProgram); |
|
return vfProgram; |
|
} |
|
|
|
|
|
void init(GLFWwindow *window) { |
|
renderingProgram = createShaderProgram(); |
|
glGenVertexArrays(numVAOs, vao); |
|
glBindVertexArray(vao[0]); |
|
} |
|
|
|
void display(GLFWwindow *window, double currentTime) { |
|
|
|
glClear(GL_DEPTH_BUFFER_BIT); |
|
glClearColor(0, 0, 0, 1); |
|
glClear(GL_COLOR_BUFFER_BIT); |
|
glUseProgram(renderingProgram); |
|
|
|
// printProgramLog(renderingProgram); |
|
// glPointSize(3); |
|
// x += inc; |
|
// if (x > 1.0f) inc = -0.01f; |
|
// if (x < -1.0f) inc = 0.01f; |
|
// cout << x << endl;; |
|
// GLuint offsetLoc = glGetUniformLocation(renderingProgram, "offset"); |
|
// glProgramUniform1f(renderingProgram, offsetLoc, x); |
|
glDrawArrays(GL_TRIANGLES, 0, 3); |
|
|
|
} |
|
|
|
int main(void) { |
|
if (!glfwInit()) { exit(EXIT_FAILURE); } |
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); |
|
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); |
|
GLFWwindow *window = glfwCreateWindow(600, 600, "GLAPP0", NULL, NULL); |
|
glfwMakeContextCurrent(window); |
|
if (glewInit() != GLEW_OK) { |
|
exit(EXIT_FAILURE); |
|
} |
|
glfwSwapInterval(1); |
|
init(window); |
|
|
|
checkOpenGLError(); |
|
while (!glfwWindowShouldClose(window)) { |
|
display(window, glfwGetTime()); |
|
glfwSwapBuffers(window); |
|
glfwPollEvents(); |
|
} |
|
|
|
|
|
glfwDestroyWindow(window); |
|
glfwTerminate(); |
|
exit(EXIT_SUCCESS); |
|
}
|
|
|